summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-08 00:34:05 +0000
committerben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-08 00:34:05 +0000
commit2362e4fe2905ab75d3230ebc3e307ae53e2b8362 (patch)
treee6d88357a2021811e0e354f618247217be8bb3da /chrome
parentdb23ac3e713dc17509b2b15d3ee634968da45715 (diff)
downloadchromium_src-2362e4fe2905ab75d3230ebc3e307ae53e2b8362.zip
chromium_src-2362e4fe2905ab75d3230ebc3e307ae53e2b8362.tar.gz
chromium_src-2362e4fe2905ab75d3230ebc3e307ae53e2b8362.tar.bz2
Move src/chrome/views to src/views. RS=darin http://crbug.com/11387
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@15604 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/DEPS1
-rw-r--r--chrome/browser/app_modal_dialog_win.cc2
-rw-r--r--chrome/browser/autocomplete/autocomplete_accessibility.cc4
-rw-r--r--chrome/browser/autocomplete/autocomplete_edit_view_win.cc2
-rw-r--r--chrome/browser/autocomplete/autocomplete_edit_view_win.h2
-rw-r--r--chrome/browser/autocomplete/autocomplete_popup_view_win.cc2
-rw-r--r--chrome/browser/automation/automation_provider.cc4
-rw-r--r--chrome/browser/automation/automation_provider.h2
-rw-r--r--chrome/browser/automation/ui_controls.cc2
-rw-r--r--chrome/browser/back_forward_menu_model_win.h2
-rw-r--r--chrome/browser/bookmarks/bookmark_context_menu.cc2
-rw-r--r--chrome/browser/bookmarks/bookmark_context_menu.h2
-rw-r--r--chrome/browser/bookmarks/bookmark_drop_info.cc4
-rw-r--r--chrome/browser/bookmarks/bookmark_folder_tree_model.h2
-rw-r--r--chrome/browser/bookmarks/bookmark_folder_tree_model_unittest.cc2
-rw-r--r--chrome/browser/bookmarks/bookmark_menu_controller_win.h2
-rw-r--r--chrome/browser/bookmarks/bookmark_model.h2
-rw-r--r--chrome/browser/bookmarks/bookmark_model_unittest.cc2
-rw-r--r--chrome/browser/bookmarks/bookmark_table_model.h2
-rw-r--r--chrome/browser/bookmarks/bookmark_utils.cc4
-rw-r--r--chrome/browser/browser_focus_uitest.cc6
-rw-r--r--chrome/browser/browser_main.cc2
-rw-r--r--chrome/browser/browser_main_win.cc6
-rw-r--r--chrome/browser/browser_process_impl.cc4
-rw-r--r--chrome/browser/debugger/debugger_view.cc11
-rw-r--r--chrome/browser/debugger/debugger_view.h4
-rw-r--r--chrome/browser/debugger/debugger_window.h4
-rw-r--r--chrome/browser/debugger/devtools_view.h2
-rw-r--r--chrome/browser/debugger/devtools_window_win.cc2
-rw-r--r--chrome/browser/debugger/devtools_window_win.h2
-rw-r--r--chrome/browser/download/download_request_dialog_delegate_win.cc2
-rw-r--r--chrome/browser/download/download_request_dialog_delegate_win.h2
-rw-r--r--chrome/browser/download/download_util.cc6
-rw-r--r--chrome/browser/download/download_util.h6
-rw-r--r--chrome/browser/drag_utils.cc2
-rw-r--r--chrome/browser/encoding_menu_controller_delegate.h2
-rw-r--r--chrome/browser/extensions/extension_shelf.h2
-rwxr-xr-xchrome/browser/extensions/extension_view.cc3
-rwxr-xr-xchrome/browser/extensions/extension_view.h4
-rw-r--r--chrome/browser/external_tab_container.cc4
-rw-r--r--chrome/browser/external_tab_container.h6
-rw-r--r--chrome/browser/first_run.cc7
-rw-r--r--chrome/browser/google_update.cc2
-rw-r--r--chrome/browser/history/starred_url_database.h2
-rw-r--r--chrome/browser/importer/importer.cc2
-rw-r--r--chrome/browser/input_window_dialog_win.cc10
-rw-r--r--chrome/browser/login_prompt.cc2
-rw-r--r--chrome/browser/renderer_host/render_widget_host.cc2
-rw-r--r--chrome/browser/renderer_host/render_widget_host_view_win.cc6
-rw-r--r--chrome/browser/ssl/ssl_manager.cc2
-rw-r--r--chrome/browser/tab_contents/interstitial_page.cc2
-rw-r--r--chrome/browser/tab_contents/render_view_context_menu_win.h4
-rw-r--r--chrome/browser/tab_contents/tab_contents.cc2
-rw-r--r--chrome/browser/tab_contents/tab_contents_view_win.cc4
-rw-r--r--chrome/browser/tab_contents/tab_contents_view_win.h2
-rw-r--r--chrome/browser/task_manager.cc16
-rw-r--r--chrome/browser/task_manager.h2
-rw-r--r--chrome/browser/task_manager_unittest.cc2
-rw-r--r--chrome/browser/views/about_chrome_view.cc6
-rw-r--r--chrome/browser/views/about_chrome_view.h10
-rw-r--r--chrome/browser/views/about_ipc_dialog.cc12
-rw-r--r--chrome/browser/views/about_ipc_dialog.h6
-rw-r--r--chrome/browser/views/about_network_dialog.cc8
-rw-r--r--chrome/browser/views/about_network_dialog.h4
-rw-r--r--chrome/browser/views/autocomplete/autocomplete_popup_contents_view.cc2
-rw-r--r--chrome/browser/views/autocomplete/autocomplete_popup_contents_view.h2
-rw-r--r--chrome/browser/views/autocomplete/autocomplete_popup_win.h2
-rw-r--r--chrome/browser/views/blocked_popup_container.cc8
-rw-r--r--chrome/browser/views/blocked_popup_container.h10
-rw-r--r--chrome/browser/views/bookmark_bar_view.cc12
-rw-r--r--chrome/browser/views/bookmark_bar_view.h10
-rw-r--r--chrome/browser/views/bookmark_bar_view_test.cc6
-rw-r--r--chrome/browser/views/bookmark_bubble_view.cc4
-rw-r--r--chrome/browser/views/bookmark_bubble_view.h8
-rw-r--r--chrome/browser/views/bookmark_editor_view.cc14
-rw-r--r--chrome/browser/views/bookmark_editor_view.h12
-rw-r--r--chrome/browser/views/bookmark_folder_tree_view.cc2
-rw-r--r--chrome/browser/views/bookmark_folder_tree_view.h2
-rw-r--r--chrome/browser/views/bookmark_manager_view.cc12
-rw-r--r--chrome/browser/views/bookmark_manager_view.h12
-rw-r--r--chrome/browser/views/bookmark_menu_button.cc2
-rw-r--r--chrome/browser/views/bookmark_menu_button.h4
-rw-r--r--chrome/browser/views/bookmark_table_view.cc2
-rw-r--r--chrome/browser/views/bookmark_table_view.h4
-rw-r--r--chrome/browser/views/bug_report_view.cc10
-rw-r--r--chrome/browser/views/bug_report_view.h8
-rw-r--r--chrome/browser/views/clear_browsing_data.cc10
-rw-r--r--chrome/browser/views/clear_browsing_data.h10
-rw-r--r--chrome/browser/views/constrained_window_impl.cc12
-rw-r--r--chrome/browser/views/constrained_window_impl.h2
-rw-r--r--chrome/browser/views/constrained_window_impl_interactive_uitest.cc2
-rw-r--r--chrome/browser/views/dom_view.h2
-rw-r--r--chrome/browser/views/download_item_view.cc8
-rw-r--r--chrome/browser/views/download_item_view.h6
-rw-r--r--chrome/browser/views/download_shelf_view.cc6
-rw-r--r--chrome/browser/views/download_shelf_view.h4
-rw-r--r--chrome/browser/views/download_started_animation.cc2
-rw-r--r--chrome/browser/views/download_started_animation.h2
-rw-r--r--chrome/browser/views/edit_keyword_controller.cc10
-rw-r--r--chrome/browser/views/edit_keyword_controller.h6
-rw-r--r--chrome/browser/views/event_utils.cc2
-rw-r--r--chrome/browser/views/external_protocol_dialog.cc4
-rw-r--r--chrome/browser/views/external_protocol_dialog.h2
-rw-r--r--chrome/browser/views/find_bar_view.cc6
-rw-r--r--chrome/browser/views/find_bar_view.h4
-rw-r--r--chrome/browser/views/find_bar_win.cc10
-rw-r--r--chrome/browser/views/find_bar_win.h2
-rw-r--r--chrome/browser/views/find_bar_win_interactive_uitest.cc2
-rw-r--r--chrome/browser/views/first_run_bubble.cc10
-rw-r--r--chrome/browser/views/first_run_customize_view.cc12
-rw-r--r--chrome/browser/views/first_run_customize_view.h8
-rw-r--r--chrome/browser/views/first_run_view.cc12
-rw-r--r--chrome/browser/views/first_run_view.h6
-rw-r--r--chrome/browser/views/first_run_view_base.cc16
-rw-r--r--chrome/browser/views/first_run_view_base.h4
-rw-r--r--chrome/browser/views/frame/browser_frame.cc2
-rw-r--r--chrome/browser/views/frame/browser_frame.h2
-rw-r--r--chrome/browser/views/frame/browser_root_view.h2
-rw-r--r--chrome/browser/views/frame/browser_view.cc12
-rw-r--r--chrome/browser/views/frame/browser_view.h4
-rw-r--r--chrome/browser/views/frame/glass_browser_frame_view.cc4
-rw-r--r--chrome/browser/views/frame/glass_browser_frame_view.h4
-rw-r--r--chrome/browser/views/frame/opaque_browser_frame_view.cc6
-rw-r--r--chrome/browser/views/frame/opaque_browser_frame_view.h4
-rw-r--r--chrome/browser/views/fullscreen_exit_bubble.cc2
-rw-r--r--chrome/browser/views/fullscreen_exit_bubble.h4
-rw-r--r--chrome/browser/views/go_button.h2
-rw-r--r--chrome/browser/views/html_dialog_view.cc4
-rw-r--r--chrome/browser/views/html_dialog_view.h2
-rw-r--r--chrome/browser/views/hung_renderer_view.cc16
-rw-r--r--chrome/browser/views/hwnd_html_view.cc4
-rw-r--r--chrome/browser/views/hwnd_html_view.h2
-rw-r--r--chrome/browser/views/importer_lock_view.cc4
-rw-r--r--chrome/browser/views/importer_lock_view.h4
-rw-r--r--chrome/browser/views/importer_view.cc8
-rw-r--r--chrome/browser/views/importer_view.h8
-rw-r--r--chrome/browser/views/importing_progress_view.cc8
-rw-r--r--chrome/browser/views/importing_progress_view.h6
-rw-r--r--chrome/browser/views/info_bubble.cc4
-rw-r--r--chrome/browser/views/info_bubble.h4
-rw-r--r--chrome/browser/views/infobars/infobar_container.h2
-rw-r--r--chrome/browser/views/infobars/infobars.cc14
-rw-r--r--chrome/browser/views/infobars/infobars.h4
-rw-r--r--chrome/browser/views/jsmessage_box_dialog.cc4
-rw-r--r--chrome/browser/views/jsmessage_box_dialog.h2
-rw-r--r--chrome/browser/views/keyword_editor_view.cc14
-rw-r--r--chrome/browser/views/keyword_editor_view.h8
-rw-r--r--chrome/browser/views/location_bar_view.cc8
-rw-r--r--chrome/browser/views/location_bar_view.h8
-rw-r--r--chrome/browser/views/login_view.cc8
-rw-r--r--chrome/browser/views/login_view.h2
-rw-r--r--chrome/browser/views/new_profile_dialog.cc8
-rw-r--r--chrome/browser/views/new_profile_dialog.h4
-rw-r--r--chrome/browser/views/options/advanced_contents_view.cc12
-rw-r--r--chrome/browser/views/options/advanced_page_view.cc12
-rw-r--r--chrome/browser/views/options/advanced_page_view.h2
-rw-r--r--chrome/browser/views/options/content_page_view.cc8
-rw-r--r--chrome/browser/views/options/content_page_view.h4
-rw-r--r--chrome/browser/views/options/cookies_view.cc12
-rw-r--r--chrome/browser/views/options/cookies_view.h12
-rw-r--r--chrome/browser/views/options/exceptions_page_view.cc6
-rw-r--r--chrome/browser/views/options/fonts_languages_window_view.cc2
-rw-r--r--chrome/browser/views/options/fonts_languages_window_view.h8
-rw-r--r--chrome/browser/views/options/fonts_page_view.cc8
-rw-r--r--chrome/browser/views/options/fonts_page_view.h6
-rw-r--r--chrome/browser/views/options/general_page_view.cc10
-rw-r--r--chrome/browser/views/options/general_page_view.h6
-rw-r--r--chrome/browser/views/options/language_combobox_model.h2
-rw-r--r--chrome/browser/views/options/languages_page_view.cc14
-rw-r--r--chrome/browser/views/options/languages_page_view.h8
-rw-r--r--chrome/browser/views/options/options_group_view.cc6
-rw-r--r--chrome/browser/views/options/options_group_view.h2
-rw-r--r--chrome/browser/views/options/options_page_view.cc2
-rw-r--r--chrome/browser/views/options/options_page_view.h4
-rw-r--r--chrome/browser/views/options/options_window_view.cc8
-rw-r--r--chrome/browser/views/options/passwords_exceptions_window_view.h8
-rw-r--r--chrome/browser/views/options/passwords_page_view.cc6
-rw-r--r--chrome/browser/views/options/passwords_page_view.h10
-rw-r--r--chrome/browser/views/page_info_window.cc12
-rw-r--r--chrome/browser/views/page_info_window.h6
-rw-r--r--chrome/browser/views/repost_form_warning_view.cc4
-rw-r--r--chrome/browser/views/repost_form_warning_view.h2
-rw-r--r--chrome/browser/views/restart_message_box.cc4
-rw-r--r--chrome/browser/views/restart_message_box.h2
-rw-r--r--chrome/browser/views/sad_tab_view.h2
-rw-r--r--chrome/browser/views/select_profile_dialog.cc12
-rw-r--r--chrome/browser/views/select_profile_dialog.h4
-rw-r--r--chrome/browser/views/shelf_item_dialog.cc12
-rw-r--r--chrome/browser/views/shelf_item_dialog.h12
-rw-r--r--chrome/browser/views/standard_layout.h2
-rw-r--r--chrome/browser/views/star_toggle.h4
-rw-r--r--chrome/browser/views/status_bubble_views.cc12
-rw-r--r--chrome/browser/views/status_bubble_views.h4
-rw-r--r--chrome/browser/views/tab_contents_container_view.cc4
-rw-r--r--chrome/browser/views/tab_contents_container_view.h4
-rw-r--r--chrome/browser/views/tab_icon_view.h2
-rw-r--r--chrome/browser/views/tabs/dragged_tab_controller.cc4
-rw-r--r--chrome/browser/views/tabs/dragged_tab_view.cc2
-rw-r--r--chrome/browser/views/tabs/dragged_tab_view.h2
-rw-r--r--chrome/browser/views/tabs/hwnd_photobooth.cc2
-rw-r--r--chrome/browser/views/tabs/tab.cc6
-rw-r--r--chrome/browser/views/tabs/tab_dragging_test.cc2
-rw-r--r--chrome/browser/views/tabs/tab_renderer.cc6
-rw-r--r--chrome/browser/views/tabs/tab_renderer.h6
-rw-r--r--chrome/browser/views/tabs/tab_strip.cc8
-rw-r--r--chrome/browser/views/tabs/tab_strip.h8
-rw-r--r--chrome/browser/views/toolbar_star_toggle.h2
-rw-r--r--chrome/browser/views/toolbar_view.cc14
-rw-r--r--chrome/browser/views/toolbar_view.h8
-rw-r--r--chrome/browser/views/uninstall_dialog.cc4
-rw-r--r--chrome/browser/views/uninstall_dialog.h2
-rw-r--r--chrome/browser/views/user_data_dir_dialog.cc6
-rw-r--r--chrome/browser/views/user_data_dir_dialog.h2
-rw-r--r--chrome/chrome.gyp468
-rw-r--r--chrome/chrome.sln4280
-rw-r--r--chrome/renderer/render_view.cc2
-rw-r--r--chrome/test/automated_ui_tests/automated_ui_tests.cc2
-rw-r--r--chrome/test/automation/automation_proxy.cc3
-rw-r--r--chrome/test/automation/automation_proxy_uitest.cc2
-rw-r--r--chrome/test/interactive_ui/view_event_test_base.cc4
-rw-r--r--chrome/test/interactive_ui/view_event_test_base.h2
-rw-r--r--chrome/test/ui_test_utils.cc2
-rw-r--r--chrome/test/unit/unittests.vcproj12
-rw-r--r--chrome/views/DEPS10
-rw-r--r--chrome/views/accelerator.cc130
-rw-r--r--chrome/views/accelerator.h101
-rw-r--r--chrome/views/accessibility/view_accessibility.cc698
-rw-r--r--chrome/views/accessibility/view_accessibility.h144
-rw-r--r--chrome/views/accessibility/view_accessibility_wrapper.cc79
-rw-r--r--chrome/views/accessibility/view_accessibility_wrapper.h55
-rw-r--r--chrome/views/background.cc113
-rw-r--r--chrome/views/background.h91
-rw-r--r--chrome/views/border.cc106
-rw-r--r--chrome/views/border.h59
-rw-r--r--chrome/views/controls/button/button.cc79
-rw-r--r--chrome/views/controls/button/button.h74
-rw-r--r--chrome/views/controls/button/button_dropdown.cc192
-rw-r--r--chrome/views/controls/button/button_dropdown.h62
-rw-r--r--chrome/views/controls/button/checkbox.cc172
-rw-r--r--chrome/views/controls/button/checkbox.h84
-rw-r--r--chrome/views/controls/button/custom_button.cc236
-rw-r--r--chrome/views/controls/button/custom_button.h105
-rw-r--r--chrome/views/controls/button/image_button.cc154
-rw-r--r--chrome/views/controls/button/image_button.h101
-rw-r--r--chrome/views/controls/button/menu_button.cc253
-rw-r--r--chrome/views/controls/button/menu_button.h92
-rw-r--r--chrome/views/controls/button/native_button.cc192
-rw-r--r--chrome/views/controls/button/native_button.h100
-rw-r--r--chrome/views/controls/button/native_button_win.cc234
-rw-r--r--chrome/views/controls/button/native_button_win.h105
-rw-r--r--chrome/views/controls/button/native_button_wrapper.h63
-rw-r--r--chrome/views/controls/button/radio_button.cc107
-rw-r--r--chrome/views/controls/button/radio_button.h43
-rw-r--r--chrome/views/controls/button/text_button.cc325
-rw-r--r--chrome/views/controls/button/text_button.h138
-rw-r--r--chrome/views/controls/combo_box.cc179
-rw-r--r--chrome/views/controls/combo_box.h80
-rw-r--r--chrome/views/controls/hwnd_view.cc137
-rw-r--r--chrome/views/controls/hwnd_view.h66
-rw-r--r--chrome/views/controls/image_view.cc170
-rw-r--r--chrome/views/controls/image_view.h107
-rw-r--r--chrome/views/controls/label.cc444
-rw-r--r--chrome/views/controls/label.h250
-rw-r--r--chrome/views/controls/label_unittest.cc441
-rw-r--r--chrome/views/controls/link.cc183
-rw-r--r--chrome/views/controls/link.h94
-rw-r--r--chrome/views/controls/menu/chrome_menu.cc2816
-rw-r--r--chrome/views/controls/menu/chrome_menu.h948
-rw-r--r--chrome/views/controls/menu/controller.h33
-rw-r--r--chrome/views/controls/menu/menu.cc626
-rw-r--r--chrome/views/controls/menu/menu.h355
-rw-r--r--chrome/views/controls/menu/view_menu_delegate.h34
-rw-r--r--chrome/views/controls/message_box_view.cc209
-rw-r--r--chrome/views/controls/message_box_view.h94
-rw-r--r--chrome/views/controls/native_control.cc385
-rw-r--r--chrome/views/controls/native_control.h132
-rw-r--r--chrome/views/controls/native_control_win.cc201
-rw-r--r--chrome/views/controls/native_control_win.h100
-rw-r--r--chrome/views/controls/native_view_host.cc74
-rw-r--r--chrome/views/controls/native_view_host.h103
-rw-r--r--chrome/views/controls/scroll_view.cc517
-rw-r--r--chrome/views/controls/scroll_view.h207
-rw-r--r--chrome/views/controls/scrollbar/bitmap_scroll_bar.cc703
-rw-r--r--chrome/views/controls/scrollbar/bitmap_scroll_bar.h192
-rw-r--r--chrome/views/controls/scrollbar/native_scroll_bar.cc357
-rw-r--r--chrome/views/controls/scrollbar/native_scroll_bar.h67
-rw-r--r--chrome/views/controls/scrollbar/scroll_bar.cc47
-rw-r--r--chrome/views/controls/scrollbar/scroll_bar.h102
-rw-r--r--chrome/views/controls/separator.cc37
-rw-r--r--chrome/views/controls/separator.h34
-rw-r--r--chrome/views/controls/single_split_view.cc116
-rw-r--r--chrome/views/controls/single_split_view.h57
-rw-r--r--chrome/views/controls/tabbed_pane.cc264
-rw-r--r--chrome/views/controls/tabbed_pane.h94
-rw-r--r--chrome/views/controls/table/group_table_view.cc193
-rw-r--r--chrome/views/controls/table/group_table_view.h82
-rw-r--r--chrome/views/controls/table/table_view.cc1570
-rw-r--r--chrome/views/controls/table/table_view.h676
-rw-r--r--chrome/views/controls/table/table_view_unittest.cc381
-rw-r--r--chrome/views/controls/text_field.cc1192
-rw-r--r--chrome/views/controls/text_field.h208
-rw-r--r--chrome/views/controls/throbber.cc170
-rw-r--r--chrome/views/controls/throbber.h111
-rw-r--r--chrome/views/controls/tree/tree_model.h91
-rw-r--r--chrome/views/controls/tree/tree_node_iterator.h74
-rw-r--r--chrome/views/controls/tree/tree_node_iterator_unittest.cc41
-rw-r--r--chrome/views/controls/tree/tree_node_model.h283
-rw-r--r--chrome/views/controls/tree/tree_view.cc745
-rw-r--r--chrome/views/controls/tree/tree_view.h305
-rw-r--r--chrome/views/event.cc42
-rw-r--r--chrome/views/event.h322
-rw-r--r--chrome/views/event_gtk.cc38
-rw-r--r--chrome/views/event_win.cc65
-rw-r--r--chrome/views/fill_layout.cc33
-rw-r--r--chrome/views/fill_layout.h35
-rw-r--r--chrome/views/focus/external_focus_tracker.cc65
-rw-r--r--chrome/views/focus/external_focus_tracker.h76
-rw-r--r--chrome/views/focus/focus_manager.cc716
-rw-r--r--chrome/views/focus/focus_manager.h343
-rw-r--r--chrome/views/focus/focus_manager_unittest.cc665
-rw-r--r--chrome/views/focus/focus_util_win.cc118
-rw-r--r--chrome/views/focus/focus_util_win.h28
-rw-r--r--chrome/views/focus/view_storage.cc182
-rw-r--r--chrome/views/focus/view_storage.h78
-rw-r--r--chrome/views/grid_layout.cc1013
-rw-r--r--chrome/views/grid_layout.h354
-rw-r--r--chrome/views/grid_layout_unittest.cc515
-rw-r--r--chrome/views/layout_manager.cc15
-rw-r--r--chrome/views/layout_manager.h60
-rw-r--r--chrome/views/painter.cc165
-rw-r--r--chrome/views/painter.h120
-rw-r--r--chrome/views/repeat_controller.cc45
-rw-r--r--chrome/views/repeat_controller.h53
-rw-r--r--chrome/views/view.cc1643
-rw-r--r--chrome/views/view.h1351
-rw-r--r--chrome/views/view_constants.cc13
-rw-r--r--chrome/views/view_constants.h25
-rw-r--r--chrome/views/view_gtk.cc56
-rw-r--r--chrome/views/view_unittest.cc1009
-rw-r--r--chrome/views/view_win.cc95
-rw-r--r--chrome/views/views.vcproj869
-rw-r--r--chrome/views/views.vsprops12
-rw-r--r--chrome/views/widget/accelerator_handler.cc46
-rw-r--r--chrome/views/widget/accelerator_handler.h30
-rw-r--r--chrome/views/widget/aero_tooltip_manager.cc128
-rw-r--r--chrome/views/widget/aero_tooltip_manager.h57
-rw-r--r--chrome/views/widget/root_view.cc1001
-rw-r--r--chrome/views/widget/root_view.h361
-rw-r--r--chrome/views/widget/root_view_drop_target.cc118
-rw-r--r--chrome/views/widget/root_view_drop_target.h75
-rw-r--r--chrome/views/widget/root_view_gtk.cc30
-rw-r--r--chrome/views/widget/root_view_win.cc70
-rw-r--r--chrome/views/widget/tooltip_manager.cc447
-rw-r--r--chrome/views/widget/tooltip_manager.h168
-rw-r--r--chrome/views/widget/widget.h81
-rw-r--r--chrome/views/widget/widget_gtk.cc508
-rw-r--r--chrome/views/widget/widget_gtk.h160
-rw-r--r--chrome/views/widget/widget_win.cc999
-rw-r--r--chrome/views/widget/widget_win.h636
-rw-r--r--chrome/views/window/client_view.cc64
-rw-r--r--chrome/views/window/client_view.h84
-rw-r--r--chrome/views/window/custom_frame_view.cc705
-rw-r--r--chrome/views/window/custom_frame_view.h122
-rw-r--r--chrome/views/window/dialog_client_view.cc440
-rw-r--r--chrome/views/window/dialog_client_view.h123
-rw-r--r--chrome/views/window/dialog_delegate.cc54
-rw-r--r--chrome/views/window/dialog_delegate.h113
-rw-r--r--chrome/views/window/hit_test.h41
-rw-r--r--chrome/views/window/native_frame_view.cc60
-rw-r--r--chrome/views/window/native_frame_view.h39
-rw-r--r--chrome/views/window/non_client_view.cc264
-rw-r--r--chrome/views/window/non_client_view.h227
-rw-r--r--chrome/views/window/window.h135
-rw-r--r--chrome/views/window/window_delegate.cc96
-rw-r--r--chrome/views/window/window_delegate.h163
-rw-r--r--chrome/views/window/window_gtk.cc199
-rw-r--r--chrome/views/window/window_gtk.h92
-rw-r--r--chrome/views/window/window_resources.h30
-rw-r--r--chrome/views/window/window_win.cc1446
-rw-r--r--chrome/views/window/window_win.h307
380 files changed, 2960 insertions, 44577 deletions
diff --git a/chrome/DEPS b/chrome/DEPS
index 5c73a5a0..964c03a 100644
--- a/chrome/DEPS
+++ b/chrome/DEPS
@@ -2,6 +2,7 @@ include_rules = [
"+app",
"+net",
"+printing",
+ "+views",
# The subdirectories in chrome/ will manually allow their own include
# directories in chrome/ so we disallow all of them.
diff --git a/chrome/browser/app_modal_dialog_win.cc b/chrome/browser/app_modal_dialog_win.cc
index ab01474..897c811 100644
--- a/chrome/browser/app_modal_dialog_win.cc
+++ b/chrome/browser/app_modal_dialog_win.cc
@@ -6,7 +6,7 @@
#include "base/logging.h"
#include "chrome/browser/views/jsmessage_box_dialog.h"
-#include "chrome/views/window/window.h"
+#include "views/window/window.h"
AppModalDialog::~AppModalDialog() {
}
diff --git a/chrome/browser/autocomplete/autocomplete_accessibility.cc b/chrome/browser/autocomplete/autocomplete_accessibility.cc
index 8fefe91..4583ab5 100644
--- a/chrome/browser/autocomplete/autocomplete_accessibility.cc
+++ b/chrome/browser/autocomplete/autocomplete_accessibility.cc
@@ -7,9 +7,9 @@
#include "app/l10n_util.h"
#include "chrome/browser/autocomplete/autocomplete_edit.h"
#include "chrome/browser/autocomplete/autocomplete_edit_view_win.h"
-#include "chrome/views/accessibility/view_accessibility_wrapper.h"
-#include "chrome/views/view.h"
#include "grit/generated_resources.h"
+#include "views/accessibility/view_accessibility_wrapper.h"
+#include "views/view.h"
HRESULT AutocompleteAccessibility::Initialize(
const AutocompleteEditViewWin* edit_box) {
diff --git a/chrome/browser/autocomplete/autocomplete_edit_view_win.cc b/chrome/browser/autocomplete/autocomplete_edit_view_win.cc
index e544f76..8bf5b83 100644
--- a/chrome/browser/autocomplete/autocomplete_edit_view_win.cc
+++ b/chrome/browser/autocomplete/autocomplete_edit_view_win.cc
@@ -37,10 +37,10 @@
#include "chrome/common/gfx/utils.h"
#include "chrome/common/notification_service.h"
#include "chrome/common/win_util.h"
-#include "chrome/views/focus/focus_util_win.h"
#include "googleurl/src/url_util.h"
#include "grit/generated_resources.h"
#include "skia/ext/skia_utils_win.h"
+#include "views/focus/focus_util_win.h"
#pragma comment(lib, "oleacc.lib") // Needed for accessibility support.
diff --git a/chrome/browser/autocomplete/autocomplete_edit_view_win.h b/chrome/browser/autocomplete/autocomplete_edit_view_win.h
index da73d98..6c74cc9 100644
--- a/chrome/browser/autocomplete/autocomplete_edit_view_win.h
+++ b/chrome/browser/autocomplete/autocomplete_edit_view_win.h
@@ -19,7 +19,7 @@
#include "chrome/browser/toolbar_model.h"
#include "chrome/browser/views/autocomplete/autocomplete_popup_contents_view.h"
#include "chrome/common/page_transition_types.h"
-#include "chrome/views/controls/menu/menu.h"
+#include "views/controls/menu/menu.h"
#include "webkit/glue/window_open_disposition.h"
class AutocompletePopupModel;
diff --git a/chrome/browser/autocomplete/autocomplete_popup_view_win.cc b/chrome/browser/autocomplete/autocomplete_popup_view_win.cc
index 10f32b1..98be163 100644
--- a/chrome/browser/autocomplete/autocomplete_popup_view_win.cc
+++ b/chrome/browser/autocomplete/autocomplete_popup_view_win.cc
@@ -30,9 +30,9 @@
#include "chrome/browser/views/location_bar_view.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/notification_service.h"
-#include "chrome/views/view.h"
#include "grit/theme_resources.h"
#include "third_party/icu38/public/common/unicode/ubidi.h"
+#include "views/view.h"
// Padding between text and the star indicator, in pixels.
static const int kStarPadding = 4;
diff --git a/chrome/browser/automation/automation_provider.cc b/chrome/browser/automation/automation_provider.cc
index fe442ba..74eac52 100644
--- a/chrome/browser/automation/automation_provider.cc
+++ b/chrome/browser/automation/automation_provider.cc
@@ -50,8 +50,8 @@
#if defined(OS_WIN)
#include "chrome/browser/views/bookmark_bar_view.h"
-#include "chrome/views/widget/widget_win.h"
-#include "chrome/views/window/window.h"
+#include "views/widget/widget_win.h"
+#include "views/window/window.h"
#endif
using base::Time;
diff --git a/chrome/browser/automation/automation_provider.h b/chrome/browser/automation/automation_provider.h
index 6a64b0c..de84e86 100644
--- a/chrome/browser/automation/automation_provider.h
+++ b/chrome/browser/automation/automation_provider.h
@@ -27,7 +27,7 @@
#include "chrome/common/ipc_sync_channel.h"
#include "chrome/common/notification_observer.h"
#include "chrome/test/automation/automation_messages.h"
-#include "chrome/views/event.h"
+#include "views/event.h"
#if defined(OS_WIN)
// TODO(port): enable these.
diff --git a/chrome/browser/automation/ui_controls.cc b/chrome/browser/automation/ui_controls.cc
index 8a0b349e..e15f1d4 100644
--- a/chrome/browser/automation/ui_controls.cc
+++ b/chrome/browser/automation/ui_controls.cc
@@ -8,7 +8,7 @@
#include "base/message_loop.h"
#include "base/ref_counted.h"
#include "base/task.h"
-#include "chrome/views/view.h"
+#include "views/view.h"
namespace ui_controls {
diff --git a/chrome/browser/back_forward_menu_model_win.h b/chrome/browser/back_forward_menu_model_win.h
index c144862..e1805cb 100644
--- a/chrome/browser/back_forward_menu_model_win.h
+++ b/chrome/browser/back_forward_menu_model_win.h
@@ -8,7 +8,7 @@
#include "base/basictypes.h"
#include "chrome/browser/back_forward_menu_model.h"
-#include "chrome/views/controls/menu/menu.h"
+#include "views/controls/menu/menu.h"
class SkBitmap;
diff --git a/chrome/browser/bookmarks/bookmark_context_menu.cc b/chrome/browser/bookmarks/bookmark_context_menu.cc
index 00935b4..93dd7c0 100644
--- a/chrome/browser/bookmarks/bookmark_context_menu.cc
+++ b/chrome/browser/bookmarks/bookmark_context_menu.cc
@@ -23,7 +23,7 @@
#if defined(OS_WIN)
#include "chrome/browser/tab_contents/tab_contents.h"
#include "chrome/browser/views/bookmark_manager_view.h"
-#include "chrome/views/window/window.h"
+#include "views/window/window.h"
#endif
namespace {
diff --git a/chrome/browser/bookmarks/bookmark_context_menu.h b/chrome/browser/bookmarks/bookmark_context_menu.h
index b015f6c..8aea2f1 100644
--- a/chrome/browser/bookmarks/bookmark_context_menu.h
+++ b/chrome/browser/bookmarks/bookmark_context_menu.h
@@ -13,7 +13,7 @@
// TODO(port): Port this file.
#if defined(OS_WIN)
-#include "chrome/views/controls/menu/chrome_menu.h"
+#include "views/controls/menu/chrome_menu.h"
#elif defined(OS_LINUX)
#include "chrome/browser/gtk/menu_gtk.h"
#else
diff --git a/chrome/browser/bookmarks/bookmark_drop_info.cc b/chrome/browser/bookmarks/bookmark_drop_info.cc
index 0e39cd7..e6032b5 100644
--- a/chrome/browser/bookmarks/bookmark_drop_info.cc
+++ b/chrome/browser/bookmarks/bookmark_drop_info.cc
@@ -9,8 +9,8 @@
#endif
#include "base/basictypes.h"
-#include "chrome/views/event.h"
-#include "chrome/views/view_constants.h"
+#include "views/event.h"
+#include "views/view_constants.h"
BookmarkDropInfo::BookmarkDropInfo(gfx::NativeWindow wnd, int top_margin)
: source_operations_(0),
diff --git a/chrome/browser/bookmarks/bookmark_folder_tree_model.h b/chrome/browser/bookmarks/bookmark_folder_tree_model.h
index aa83756..ce62ed0 100644
--- a/chrome/browser/bookmarks/bookmark_folder_tree_model.h
+++ b/chrome/browser/bookmarks/bookmark_folder_tree_model.h
@@ -6,7 +6,7 @@
#define CHROME_BROWSER_BOOKMARKS_BOOKMARK_FOLDER_TREE_MODEL_H_
#include "chrome/browser/bookmarks/bookmark_model.h"
-#include "chrome/views/controls/tree/tree_node_model.h"
+#include "views/controls/tree/tree_node_model.h"
// The type of nodes created by BookmarkFolderTreeModel.
typedef views::TreeNodeWithValue<BookmarkNode*> FolderNode;
diff --git a/chrome/browser/bookmarks/bookmark_folder_tree_model_unittest.cc b/chrome/browser/bookmarks/bookmark_folder_tree_model_unittest.cc
index 693069d..0fe6ce9 100644
--- a/chrome/browser/bookmarks/bookmark_folder_tree_model_unittest.cc
+++ b/chrome/browser/bookmarks/bookmark_folder_tree_model_unittest.cc
@@ -5,9 +5,9 @@
#include "base/string_util.h"
#include "chrome/browser/bookmarks/bookmark_folder_tree_model.h"
#include "chrome/test/testing_profile.h"
-#include "chrome/views/controls/tree/tree_view.h"
#include "grit/generated_resources.h"
#include "testing/gtest/include/gtest/gtest.h"
+#include "views/controls/tree/tree_view.h"
// Base class for bookmark model tests.
// Initial state of the bookmark model is as follows:
diff --git a/chrome/browser/bookmarks/bookmark_menu_controller_win.h b/chrome/browser/bookmarks/bookmark_menu_controller_win.h
index 1f83233..5263281 100644
--- a/chrome/browser/bookmarks/bookmark_menu_controller_win.h
+++ b/chrome/browser/bookmarks/bookmark_menu_controller_win.h
@@ -10,7 +10,7 @@
#include "chrome/browser/bookmarks/base_bookmark_model_observer.h"
#include "chrome/browser/bookmarks/bookmark_context_menu.h"
#include "chrome/browser/bookmarks/bookmark_drag_data.h"
-#include "chrome/views/controls/menu/chrome_menu.h"
+#include "views/controls/menu/chrome_menu.h"
class BookmarkContextMenu;
class BookmarkNode;
diff --git a/chrome/browser/bookmarks/bookmark_model.h b/chrome/browser/bookmarks/bookmark_model.h
index 7afaee5..e406e27 100644
--- a/chrome/browser/bookmarks/bookmark_model.h
+++ b/chrome/browser/bookmarks/bookmark_model.h
@@ -19,10 +19,10 @@
#include "chrome/browser/history/history.h"
#include "chrome/browser/history/history_types.h"
#include "chrome/common/notification_observer.h"
-#include "chrome/views/controls/tree/tree_node_model.h"
#include "googleurl/src/gurl.h"
#include "skia/include/SkBitmap.h"
#include "testing/gtest/include/gtest/gtest_prod.h"
+#include "views/controls/tree/tree_node_model.h"
class BookmarkEditorView;
class BookmarkModel;
diff --git a/chrome/browser/bookmarks/bookmark_model_unittest.cc b/chrome/browser/bookmarks/bookmark_model_unittest.cc
index 40edbb8..8c1b7c2 100644
--- a/chrome/browser/bookmarks/bookmark_model_unittest.cc
+++ b/chrome/browser/bookmarks/bookmark_model_unittest.cc
@@ -11,8 +11,8 @@
#include "chrome/common/notification_registrar.h"
#include "chrome/common/notification_service.h"
#include "chrome/test/testing_profile.h"
-#include "chrome/views/controls/tree/tree_node_model.h"
#include "testing/gtest/include/gtest/gtest.h"
+#include "views/controls/tree/tree_node_model.h"
using base::Time;
using base::TimeDelta;
diff --git a/chrome/browser/bookmarks/bookmark_table_model.h b/chrome/browser/bookmarks/bookmark_table_model.h
index 4b55759..77ad787 100644
--- a/chrome/browser/bookmarks/bookmark_table_model.h
+++ b/chrome/browser/bookmarks/bookmark_table_model.h
@@ -10,7 +10,7 @@
#include "build/build_config.h"
#if defined(OS_WIN)
-#include "chrome/views/controls/table/table_view.h"
+#include "views/controls/table/table_view.h"
#elif defined(OS_POSIX)
#include "chrome/common/temp_scaffolding_stubs.h"
#endif
diff --git a/chrome/browser/bookmarks/bookmark_utils.cc b/chrome/browser/bookmarks/bookmark_utils.cc
index 201b063..e21e230 100644
--- a/chrome/browser/bookmarks/bookmark_utils.cc
+++ b/chrome/browser/bookmarks/bookmark_utils.cc
@@ -26,10 +26,10 @@
#include "chrome/common/notification_service.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/pref_service.h"
-#include "chrome/views/controls/tree/tree_node_iterator.h"
-#include "chrome/views/event.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
+#include "views/controls/tree/tree_node_iterator.h"
+#include "views/event.h"
using base::Time;
diff --git a/chrome/browser/browser_focus_uitest.cc b/chrome/browser/browser_focus_uitest.cc
index a6021c9..cd46616 100644
--- a/chrome/browser/browser_focus_uitest.cc
+++ b/chrome/browser/browser_focus_uitest.cc
@@ -12,11 +12,11 @@
#include "chrome/browser/views/frame/browser_view.h"
#include "chrome/browser/views/location_bar_view.h"
#include "chrome/common/chrome_paths.h"
-#include "chrome/views/focus/focus_manager.h"
-#include "chrome/views/view.h"
-#include "chrome/views/window/window.h"
#include "chrome/test/in_process_browser_test.h"
#include "chrome/test/ui_test_utils.h"
+#include "views/focus/focus_manager.h"
+#include "views/view.h"
+#include "views/window/window.h"
namespace {
diff --git a/chrome/browser/browser_main.cc b/chrome/browser/browser_main.cc
index 79e6378..9824586 100644
--- a/chrome/browser/browser_main.cc
+++ b/chrome/browser/browser_main.cc
@@ -89,12 +89,12 @@
#include "chrome/installer/util/install_util.h"
#include "chrome/installer/util/shell_util.h"
#include "chrome/installer/util/version.h"
-#include "chrome/views/widget/accelerator_handler.h"
#include "net/base/net_util.h"
#include "net/base/sdch_manager.h"
#include "net/base/winsock_init.h"
#include "net/http/http_network_layer.h"
#include "sandbox/src/sandbox.h"
+#include "views/widget/accelerator_handler.h"
#endif // defined(OS_WIN)
diff --git a/chrome/browser/browser_main_win.cc b/chrome/browser/browser_main_win.cc
index 5dc8c26..28c849b 100644
--- a/chrome/browser/browser_main_win.cc
+++ b/chrome/browser/browser_main_win.cc
@@ -23,11 +23,11 @@
#include "chrome/installer/util/helper.h"
#include "chrome/installer/util/install_util.h"
#include "chrome/installer/util/shell_util.h"
-#include "chrome/views/controls/message_box_view.h"
-#include "chrome/views/widget/accelerator_handler.h"
-#include "chrome/views/window/window.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
+#include "views/controls/message_box_view.h"
+#include "views/widget/accelerator_handler.h"
+#include "views/window/window.h"
// Displays a warning message if the user is running chrome on windows 2000.
// Returns true if the OS is win2000, false otherwise.
diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc
index 72e06f1..a031374 100644
--- a/chrome/browser/browser_process_impl.cc
+++ b/chrome/browser/browser_process_impl.cc
@@ -34,8 +34,8 @@
#include "chrome/browser/automation/automation_provider_list.h"
#include "chrome/browser/icon_manager.h"
#include "chrome/browser/printing/print_job_manager.h"
-#include "chrome/views/focus/view_storage.h"
-#include "chrome/views/widget/accelerator_handler.h"
+#include "views/focus/view_storage.h"
+#include "views/widget/accelerator_handler.h"
#elif defined(OS_POSIX)
// TODO(port): Remove the temporary scaffolding as we port the above headers.
#include "chrome/common/temp_scaffolding_stubs.h"
diff --git a/chrome/browser/debugger/debugger_view.cc b/chrome/browser/debugger/debugger_view.cc
index 225bf4c..865635f 100644
--- a/chrome/browser/debugger/debugger_view.cc
+++ b/chrome/browser/debugger/debugger_view.cc
@@ -22,13 +22,12 @@
#include "chrome/browser/views/standard_layout.h"
#include "chrome/browser/views/tab_contents_container_view.h"
#include "chrome/common/url_constants.h"
-#include "chrome/views/grid_layout.h"
-#include "chrome/views/controls/scrollbar/native_scroll_bar.h"
-#include "chrome/views/controls/scroll_view.h"
-#include "chrome/views/controls/text_field.h"
-#include "chrome/views/view.h"
-
#include "grit/debugger_resources.h"
+#include "views/grid_layout.h"
+#include "views/controls/scrollbar/native_scroll_bar.h"
+#include "views/controls/scroll_view.h"
+#include "views/controls/text_field.h"
+#include "views/view.h"
DebuggerView::DebuggerView(DebuggerWindow* window)
: window_(window), output_ready_(false) {
diff --git a/chrome/browser/debugger/debugger_view.h b/chrome/browser/debugger/debugger_view.h
index 616afce..6d52686 100644
--- a/chrome/browser/debugger/debugger_view.h
+++ b/chrome/browser/debugger/debugger_view.h
@@ -12,8 +12,8 @@
#include "base/gfx/size.h"
#include "chrome/browser/tab_contents/tab_contents_delegate.h"
-#include "chrome/views/view.h"
-#include "chrome/views/controls/text_field.h"
+#include "views/view.h"
+#include "views/controls/text_field.h"
class DebuggerView;
class DebuggerWindow;
diff --git a/chrome/browser/debugger/debugger_window.h b/chrome/browser/debugger/debugger_window.h
index ab916ff..258396f 100644
--- a/chrome/browser/debugger/debugger_window.h
+++ b/chrome/browser/debugger/debugger_window.h
@@ -6,8 +6,8 @@
#define CHROME_BROWSER_DEBUGGER_DEBUGGER_WINDOW_H__
#include "chrome/browser/debugger/debugger_io.h"
-#include "chrome/views/window/window.h"
-#include "chrome/views/window/window_delegate.h"
+#include "views/window/window.h"
+#include "views/window/window_delegate.h"
class DebuggerView;
class ListValue;
diff --git a/chrome/browser/debugger/devtools_view.h b/chrome/browser/debugger/devtools_view.h
index aeb9b07..5fe90e3 100644
--- a/chrome/browser/debugger/devtools_view.h
+++ b/chrome/browser/debugger/devtools_view.h
@@ -10,7 +10,7 @@
#include "base/basictypes.h"
#include "base/gfx/size.h"
#include "chrome/browser/tab_contents/tab_contents_delegate.h"
-#include "chrome/views/view.h"
+#include "views/view.h"
namespace IPC {
class Message;
diff --git a/chrome/browser/debugger/devtools_window_win.cc b/chrome/browser/debugger/devtools_window_win.cc
index 9392a7b..463f1cfe 100644
--- a/chrome/browser/debugger/devtools_window_win.cc
+++ b/chrome/browser/debugger/devtools_window_win.cc
@@ -8,7 +8,7 @@
#include "chrome/browser/debugger/devtools_manager.h"
#include "chrome/browser/debugger/devtools_view.h"
#include "chrome/browser/debugger/devtools_window.h"
-#include "chrome/views/window/window.h"
+#include "views/window/window.h"
#include "grit/generated_resources.h"
// static
diff --git a/chrome/browser/debugger/devtools_window_win.h b/chrome/browser/debugger/devtools_window_win.h
index 066388d..03889a4 100644
--- a/chrome/browser/debugger/devtools_window_win.h
+++ b/chrome/browser/debugger/devtools_window_win.h
@@ -7,7 +7,7 @@
#include "base/basictypes.h"
#include "chrome/browser/debugger/devtools_window.h"
-#include "chrome/views/window/window_delegate.h"
+#include "views/window/window_delegate.h"
namespace views {
class Window;
diff --git a/chrome/browser/download/download_request_dialog_delegate_win.cc b/chrome/browser/download/download_request_dialog_delegate_win.cc
index 677cab7..cbecc7b 100644
--- a/chrome/browser/download/download_request_dialog_delegate_win.cc
+++ b/chrome/browser/download/download_request_dialog_delegate_win.cc
@@ -8,8 +8,8 @@
#include "app/message_box_flags.h"
#include "chrome/browser/tab_contents/constrained_window.h"
#include "chrome/browser/tab_contents/tab_contents.h"
-#include "chrome/views/controls/message_box_view.h"
#include "grit/generated_resources.h"
+#include "views/controls/message_box_view.h"
// static
DownloadRequestDialogDelegate* DownloadRequestDialogDelegate::Create(
diff --git a/chrome/browser/download/download_request_dialog_delegate_win.h b/chrome/browser/download/download_request_dialog_delegate_win.h
index f0167e6..b8edd38 100644
--- a/chrome/browser/download/download_request_dialog_delegate_win.h
+++ b/chrome/browser/download/download_request_dialog_delegate_win.h
@@ -9,7 +9,7 @@
#include "chrome/browser/download/download_request_dialog_delegate.h"
#include "chrome/browser/download/download_request_manager.h"
-#include "chrome/views/window/dialog_delegate.h"
+#include "views/window/dialog_delegate.h"
class ConstrainedWindow;
class MessageBoxView;
diff --git a/chrome/browser/download/download_util.cc b/chrome/browser/download/download_util.cc
index f5589b84..74a5d85 100644
--- a/chrome/browser/download/download_util.cc
+++ b/chrome/browser/download/download_util.cc
@@ -20,13 +20,13 @@
#include "chrome/browser/download/download_item_model.h"
#include "chrome/browser/download/download_manager.h"
#include "chrome/browser/drag_utils.h"
-#include "chrome/views/view.h"
#include "grit/generated_resources.h"
#include "grit/locale_settings.h"
#include "grit/theme_resources.h"
#include "skia/ext/image_operations.h"
-#include "SkPath.h"
-#include "SkShader.h"
+#include "skia/include/SkPath.h"
+#include "skia/include/SkShader.h"
+#include "views/view.h"
namespace download_util {
diff --git a/chrome/browser/download/download_util.h b/chrome/browser/download/download_util.h
index 1b3f777..a8122ce 100644
--- a/chrome/browser/download/download_util.h
+++ b/chrome/browser/download/download_util.h
@@ -14,9 +14,9 @@
#include "base/basictypes.h"
#include "base/task.h"
-#include "chrome/views/controls/menu/menu.h"
-#include "chrome/views/event.h"
-#include "chrome/views/view.h"
+#include "views/controls/menu/menu.h"
+#include "views/event.h"
+#include "views/view.h"
class BaseDownloadItemModel;
class DownloadItem;
diff --git a/chrome/browser/drag_utils.cc b/chrome/browser/drag_utils.cc
index 8bb7949..e40e1d0 100644
--- a/chrome/browser/drag_utils.cc
+++ b/chrome/browser/drag_utils.cc
@@ -19,9 +19,9 @@
#include "base/string_util.h"
#include "chrome/browser/views/bookmark_bar_view.h"
#include "chrome/common/win_util.h"
-#include "chrome/views/controls/button/text_button.h"
#include "googleurl/src/gurl.h"
#include "grit/theme_resources.h"
+#include "views/controls/button/text_button.h"
namespace drag_utils {
diff --git a/chrome/browser/encoding_menu_controller_delegate.h b/chrome/browser/encoding_menu_controller_delegate.h
index 12d9bf4..83d42ec 100644
--- a/chrome/browser/encoding_menu_controller_delegate.h
+++ b/chrome/browser/encoding_menu_controller_delegate.h
@@ -5,7 +5,7 @@
#ifndef CHORME_BROWSER_ENCODING_MENU_CONTROLLER_DELEGATE_H__
#define CHORME_BROWSER_ENCODING_MENU_CONTROLLER_DELEGATE_H__
-#include "chrome/views/controls/menu/menu.h"
+#include "views/controls/menu/menu.h"
class Browser;
class Controller;
diff --git a/chrome/browser/extensions/extension_shelf.h b/chrome/browser/extensions/extension_shelf.h
index cd7340f..60312bd 100644
--- a/chrome/browser/extensions/extension_shelf.h
+++ b/chrome/browser/extensions/extension_shelf.h
@@ -8,7 +8,7 @@
#include "chrome/browser/extensions/extensions_service.h"
#include "app/gfx/chrome_canvas.h"
#include "chrome/common/notification_observer.h"
-#include "chrome/views/view.h"
+#include "views/view.h"
class Browser;
diff --git a/chrome/browser/extensions/extension_view.cc b/chrome/browser/extensions/extension_view.cc
index 8070bf3..f15a7a3 100755
--- a/chrome/browser/extensions/extension_view.cc
+++ b/chrome/browser/extensions/extension_view.cc
@@ -7,11 +7,10 @@
#include "chrome/browser/extensions/extension_host.h"
#include "chrome/browser/renderer_host/render_view_host.h"
#include "chrome/browser/renderer_host/render_widget_host_view.h"
-#include "chrome/views/widget/widget.h"
-
#if defined(OS_WIN)
#include "chrome/browser/renderer_host/render_widget_host_view_win.h"
#endif
+#include "views/widget/widget.h"
ExtensionView::ExtensionView(ExtensionHost* host, Browser* browser,
const GURL& content_url)
diff --git a/chrome/browser/extensions/extension_view.h b/chrome/browser/extensions/extension_view.h
index 7715c5b..5b3efc5 100755
--- a/chrome/browser/extensions/extension_view.h
+++ b/chrome/browser/extensions/extension_view.h
@@ -14,9 +14,9 @@
// TODO(port): Port these files.
#if defined(OS_WIN)
-#include "chrome/views/controls/hwnd_view.h"
+#include "views/controls/hwnd_view.h"
#else
-#include "chrome/views/view.h"
+#include "views/view.h"
#include "chrome/common/temp_scaffolding_stubs.h"
#endif
diff --git a/chrome/browser/external_tab_container.cc b/chrome/browser/external_tab_container.cc
index bf6dfd8..e8ece07 100644
--- a/chrome/browser/external_tab_container.cc
+++ b/chrome/browser/external_tab_container.cc
@@ -16,9 +16,9 @@
#include "chrome/browser/views/tab_contents_container_view.h"
#include "chrome/common/chrome_constants.h"
#include "chrome/common/win_util.h"
-// Included for SetRootViewForHWND.
-#include "chrome/views/widget/widget_win.h"
#include "chrome/test/automation/automation_messages.h"
+// Included for SetRootViewForHWND.
+#include "views/widget/widget_win.h"
static const wchar_t kWindowObjectKey[] = L"ChromeWindowObject";
diff --git a/chrome/browser/external_tab_container.h b/chrome/browser/external_tab_container.h
index a9aab87..b55c84d 100644
--- a/chrome/browser/external_tab_container.h
+++ b/chrome/browser/external_tab_container.h
@@ -16,9 +16,9 @@
#include "chrome/common/chrome_constants.h"
#include "chrome/common/notification_observer.h"
#include "chrome/common/notification_registrar.h"
-#include "chrome/views/focus/focus_manager.h"
-#include "chrome/views/widget/root_view.h"
-#include "chrome/views/widget/widget.h"
+#include "views/focus/focus_manager.h"
+#include "views/widget/root_view.h"
+#include "views/widget/widget.h"
class AutomationProvider;
class TabContents;
diff --git a/chrome/browser/first_run.cc b/chrome/browser/first_run.cc
index 8bb247a..df1687c 100644
--- a/chrome/browser/first_run.cc
+++ b/chrome/browser/first_run.cc
@@ -43,13 +43,10 @@
#include "chrome/installer/util/master_preferences.h"
#include "chrome/installer/util/shell_util.h"
#include "chrome/installer/util/util_constants.h"
-#include "chrome/views/widget/accelerator_handler.h"
-#include "chrome/views/window/window.h"
-
#include "google_update_idl.h"
-
#include "grit/locale_settings.h"
-
+#include "views/widget/accelerator_handler.h"
+#include "views/window/window.h"
namespace {
diff --git a/chrome/browser/google_update.cc b/chrome/browser/google_update.cc
index c6ca0f5..773c105 100644
--- a/chrome/browser/google_update.cc
+++ b/chrome/browser/google_update.cc
@@ -18,7 +18,7 @@
#include "chrome/installer/util/google_update_constants.h"
#include "chrome/installer/util/helper.h"
#include "chrome/installer/util/install_util.h"
-#include "chrome/views/window/window.h"
+#include "views/window/window.h"
#include "google_update_idl_i.c"
using views::Window;
diff --git a/chrome/browser/history/starred_url_database.h b/chrome/browser/history/starred_url_database.h
index 174e1da..6b91d69 100644
--- a/chrome/browser/history/starred_url_database.h
+++ b/chrome/browser/history/starred_url_database.h
@@ -12,8 +12,8 @@
#include "base/file_path.h"
#include "chrome/browser/history/history_types.h"
#include "chrome/browser/history/url_database.h"
-#include "chrome/views/controls/tree/tree_node_model.h"
#include "testing/gtest/include/gtest/gtest_prod.h"
+#include "views/controls/tree/tree_node_model.h"
struct sqlite3;
class SqliteStatementCache;
diff --git a/chrome/browser/importer/importer.cc b/chrome/browser/importer/importer.cc
index d46b4de..c97e9e1 100644
--- a/chrome/browser/importer/importer.cc
+++ b/chrome/browser/importer/importer.cc
@@ -40,7 +40,7 @@
#if defined(OS_WIN)
#include "chrome/browser/views/importer_lock_view.h"
#include "chrome/common/win_util.h"
-#include "chrome/views/window/window.h"
+#include "views/window/window.h"
#endif
// ProfileWriter.
diff --git a/chrome/browser/input_window_dialog_win.cc b/chrome/browser/input_window_dialog_win.cc
index f92d6e5..73f10a3 100644
--- a/chrome/browser/input_window_dialog_win.cc
+++ b/chrome/browser/input_window_dialog_win.cc
@@ -8,11 +8,11 @@
#include "base/message_loop.h"
#include "base/task.h"
#include "chrome/browser/views/standard_layout.h"
-#include "chrome/views/grid_layout.h"
-#include "chrome/views/controls/label.h"
-#include "chrome/views/controls/text_field.h"
-#include "chrome/views/window/dialog_delegate.h"
-#include "chrome/views/window/window.h"
+#include "views/grid_layout.h"
+#include "views/controls/label.h"
+#include "views/controls/text_field.h"
+#include "views/window/dialog_delegate.h"
+#include "views/window/window.h"
#include "grit/generated_resources.h"
// Width to make the text field, in pixels.
diff --git a/chrome/browser/login_prompt.cc b/chrome/browser/login_prompt.cc
index 8ddb96a..49b5da9 100644
--- a/chrome/browser/login_prompt.cc
+++ b/chrome/browser/login_prompt.cc
@@ -19,10 +19,10 @@
#include "chrome/browser/views/login_view.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/notification_service.h"
-#include "chrome/views/window/dialog_delegate.h"
#include "grit/generated_resources.h"
#include "net/base/auth.h"
#include "net/url_request/url_request.h"
+#include "views/window/dialog_delegate.h"
using namespace std;
using views::LoginView;
diff --git a/chrome/browser/renderer_host/render_widget_host.cc b/chrome/browser/renderer_host/render_widget_host.cc
index 7a2122a..cbbbad7 100644
--- a/chrome/browser/renderer_host/render_widget_host.cc
+++ b/chrome/browser/renderer_host/render_widget_host.cc
@@ -13,7 +13,7 @@
#include "chrome/browser/renderer_host/render_widget_host_view.h"
#include "chrome/common/notification_service.h"
#include "chrome/common/render_messages.h"
-#include "chrome/views/view.h"
+#include "views/view.h"
#include "webkit/glue/webcursor.h"
#include "webkit/glue/webtextdirection.h"
diff --git a/chrome/browser/renderer_host/render_widget_host_view_win.cc b/chrome/browser/renderer_host/render_widget_host_view_win.cc
index 31fc946..ee995e0 100644
--- a/chrome/browser/renderer_host/render_widget_host_view_win.cc
+++ b/chrome/browser/renderer_host/render_widget_host_view_win.cc
@@ -27,13 +27,13 @@
#include "chrome/common/plugin_messages.h"
#include "chrome/common/render_messages.h"
#include "chrome/common/win_util.h"
-#include "chrome/views/focus/focus_util_win.h"
-// Included for views::kReflectedMessage - TODO(beng): move this to win_util.h!
-#include "chrome/views/widget/widget_win.h"
#include "grit/webkit_resources.h"
#include "skia/ext/skia_utils_win.h"
#include "third_party/WebKit/WebKit/chromium/public/WebInputEvent.h"
#include "third_party/WebKit/WebKit/chromium/public/win/WebInputEventFactory.h"
+#include "views/focus/focus_util_win.h"
+// Included for views::kReflectedMessage - TODO(beng): move this to win_util.h!
+#include "views/widget/widget_win.h"
#include "webkit/glue/plugins/plugin_constants_win.h"
#include "webkit/glue/plugins/webplugin_delegate_impl.h"
#include "webkit/glue/webcursor.h"
diff --git a/chrome/browser/ssl/ssl_manager.cc b/chrome/browser/ssl/ssl_manager.cc
index 01125a0..9d8da4b 100644
--- a/chrome/browser/ssl/ssl_manager.cc
+++ b/chrome/browser/ssl/ssl_manager.cc
@@ -34,7 +34,7 @@
#if defined(OS_WIN)
// TODO(port): Port these files.
#include "chrome/browser/load_notification_details.h"
-#include "chrome/views/controls/link.h"
+#include "views/controls/link.h"
#else
#include "chrome/common/temp_scaffolding_stubs.h"
#endif
diff --git a/chrome/browser/tab_contents/interstitial_page.cc b/chrome/browser/tab_contents/interstitial_page.cc
index c062977..3c3226b 100644
--- a/chrome/browser/tab_contents/interstitial_page.cc
+++ b/chrome/browser/tab_contents/interstitial_page.cc
@@ -16,9 +16,9 @@
#include "chrome/browser/tab_contents/tab_contents.h"
#include "chrome/browser/tab_contents/tab_contents_view.h"
#include "chrome/common/notification_service.h"
-#include "chrome/views/window/window_delegate.h"
#include "grit/browser_resources.h"
#include "net/base/escape.h"
+#include "views/window/window_delegate.h"
namespace {
diff --git a/chrome/browser/tab_contents/render_view_context_menu_win.h b/chrome/browser/tab_contents/render_view_context_menu_win.h
index 32426b4..bc9578e 100644
--- a/chrome/browser/tab_contents/render_view_context_menu_win.h
+++ b/chrome/browser/tab_contents/render_view_context_menu_win.h
@@ -6,8 +6,8 @@
#define CHROME_BROWSER_TAB_CONTENTS_RENDER_VIEW_CONTEXT_MENU_WIN_H_
#include "chrome/browser/tab_contents/render_view_context_menu.h"
-#include "chrome/views/accelerator.h"
-#include "chrome/views/controls/menu/menu.h"
+#include "views/accelerator.h"
+#include "views/controls/menu/menu.h"
class RenderViewContextMenuWin : public RenderViewContextMenu,
public Menu::Delegate{
diff --git a/chrome/browser/tab_contents/tab_contents.cc b/chrome/browser/tab_contents/tab_contents.cc
index 4582bbe..451d5b5 100644
--- a/chrome/browser/tab_contents/tab_contents.cc
+++ b/chrome/browser/tab_contents/tab_contents.cc
@@ -56,7 +56,7 @@
#include "chrome/browser/tab_contents/infobar_delegate.h"
#include "chrome/browser/views/blocked_popup_container.h"
#include "chrome/browser/views/download_started_animation.h"
-#include "chrome/views/controls/scrollbar/native_scroll_bar.h"
+#include "views/controls/scrollbar/native_scroll_bar.h"
#endif
// Cross-Site Navigations
diff --git a/chrome/browser/tab_contents/tab_contents_view_win.cc b/chrome/browser/tab_contents/tab_contents_view_win.cc
index 79c3b85..887857e 100644
--- a/chrome/browser/tab_contents/tab_contents_view_win.cc
+++ b/chrome/browser/tab_contents/tab_contents_view_win.cc
@@ -24,9 +24,9 @@
#include "chrome/browser/tab_contents/web_drop_target.h"
#include "chrome/browser/views/sad_tab_view.h"
#include "chrome/common/url_constants.h"
-#include "chrome/views/focus/view_storage.h"
-#include "chrome/views/widget/root_view.h"
#include "net/base/net_util.h"
+#include "views/focus/view_storage.h"
+#include "views/widget/root_view.h"
#include "webkit/glue/plugins/webplugin_delegate_impl.h"
#include "webkit/glue/webdropdata.h"
diff --git a/chrome/browser/tab_contents/tab_contents_view_win.h b/chrome/browser/tab_contents/tab_contents_view_win.h
index 001b770..6e36549 100644
--- a/chrome/browser/tab_contents/tab_contents_view_win.h
+++ b/chrome/browser/tab_contents/tab_contents_view_win.h
@@ -8,7 +8,7 @@
#include "base/gfx/size.h"
#include "base/scoped_ptr.h"
#include "chrome/browser/tab_contents/tab_contents_view.h"
-#include "chrome/views/widget/widget_win.h"
+#include "views/widget/widget_win.h"
class SadTabView;
struct WebDropData;
diff --git a/chrome/browser/task_manager.cc b/chrome/browser/task_manager.cc
index ced9fc9..b48f304 100644
--- a/chrome/browser/task_manager.cc
+++ b/chrome/browser/task_manager.cc
@@ -18,19 +18,19 @@
#include "chrome/browser/views/standard_layout.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/pref_service.h"
-#include "chrome/views/accelerator.h"
-#include "chrome/views/background.h"
-#include "chrome/views/controls/button/native_button.h"
-#include "chrome/views/controls/link.h"
-#include "chrome/views/controls/menu/menu.h"
-#include "chrome/views/widget/widget.h"
-#include "chrome/views/window/dialog_delegate.h"
-#include "chrome/views/window/window.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
#include "net/url_request/url_request.h"
#include "net/url_request/url_request_job.h"
+#include "views/accelerator.h"
+#include "views/background.h"
+#include "views/controls/button/native_button.h"
+#include "views/controls/link.h"
+#include "views/controls/menu/menu.h"
+#include "views/widget/widget.h"
+#include "views/window/dialog_delegate.h"
+#include "views/window/window.h"
// The task manager window default size.
static const int kDefaultWidth = 460;
diff --git a/chrome/browser/task_manager.h b/chrome/browser/task_manager.h
index 5538f16..1992fb7 100644
--- a/chrome/browser/task_manager.h
+++ b/chrome/browser/task_manager.h
@@ -19,7 +19,7 @@
#include "chrome/browser/tab_contents/tab_contents.h"
#if defined(OS_WIN)
// TODO(port): Port or produce equivalent.
-#include "chrome/views/controls/table/group_table_view.h"
+#include "views/controls/table/group_table_view.h"
#endif // defined(OS_WIN)
#include "net/url_request/url_request_job_tracker.h"
#include "testing/gtest/include/gtest/gtest_prod.h"
diff --git a/chrome/browser/task_manager_unittest.cc b/chrome/browser/task_manager_unittest.cc
index e72e98c..b262d35 100644
--- a/chrome/browser/task_manager_unittest.cc
+++ b/chrome/browser/task_manager_unittest.cc
@@ -6,10 +6,10 @@
#include <string>
-#include "chrome/views/controls/table/table_view.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "testing/gtest/include/gtest/gtest.h"
+#include "views/controls/table/table_view.h"
namespace {
diff --git a/chrome/browser/views/about_chrome_view.cc b/chrome/browser/views/about_chrome_view.cc
index 0e9b385..faa8744 100644
--- a/chrome/browser/views/about_chrome_view.cc
+++ b/chrome/browser/views/about_chrome_view.cc
@@ -20,13 +20,13 @@
#include "chrome/browser/views/standard_layout.h"
#include "chrome/common/chrome_constants.h"
#include "chrome/installer/util/install_util.h"
-#include "chrome/views/controls/text_field.h"
-#include "chrome/views/controls/throbber.h"
-#include "chrome/views/window/window.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "grit/locale_settings.h"
#include "grit/theme_resources.h"
+#include "views/controls/text_field.h"
+#include "views/controls/throbber.h"
+#include "views/window/window.h"
#include "webkit/glue/webkit_glue.h"
namespace {
diff --git a/chrome/browser/views/about_chrome_view.h b/chrome/browser/views/about_chrome_view.h
index d4cc3fd..7d33641 100644
--- a/chrome/browser/views/about_chrome_view.h
+++ b/chrome/browser/views/about_chrome_view.h
@@ -6,11 +6,11 @@
#define CHROME_BROWSER_VIEWS_ABOUT_CHROME_VIEW_H_
#include "chrome/browser/google_update.h"
-#include "chrome/views/controls/image_view.h"
-#include "chrome/views/controls/label.h"
-#include "chrome/views/controls/link.h"
-#include "chrome/views/view.h"
-#include "chrome/views/window/dialog_delegate.h"
+#include "views/controls/image_view.h"
+#include "views/controls/label.h"
+#include "views/controls/link.h"
+#include "views/view.h"
+#include "views/window/dialog_delegate.h"
namespace views {
class TextField;
diff --git a/chrome/browser/views/about_ipc_dialog.cc b/chrome/browser/views/about_ipc_dialog.cc
index 9304c64..9d11334 100644
--- a/chrome/browser/views/about_ipc_dialog.cc
+++ b/chrome/browser/views/about_ipc_dialog.cc
@@ -25,15 +25,15 @@
#include "chrome/common/devtools_messages.h"
#include "chrome/common/plugin_messages.h"
#include "chrome/common/render_messages.h"
-#include "chrome/views/grid_layout.h"
-#include "chrome/views/controls/button/text_button.h"
-#include "chrome/views/controls/hwnd_view.h"
-#include "chrome/views/widget/root_view.h"
-#include "chrome/views/widget/widget.h"
-#include "chrome/views/window/window.h"
#include "net/url_request/url_request.h"
#include "net/url_request/url_request_job.h"
#include "net/url_request/url_request_job_tracker.h"
+#include "views/grid_layout.h"
+#include "views/controls/button/text_button.h"
+#include "views/controls/hwnd_view.h"
+#include "views/widget/root_view.h"
+#include "views/widget/widget.h"
+#include "views/window/window.h"
namespace {
diff --git a/chrome/browser/views/about_ipc_dialog.h b/chrome/browser/views/about_ipc_dialog.h
index 92cc284..db9d39a 100644
--- a/chrome/browser/views/about_ipc_dialog.h
+++ b/chrome/browser/views/about_ipc_dialog.h
@@ -7,9 +7,9 @@
#include "base/singleton.h"
#include "chrome/common/ipc_logging.h"
-#include "chrome/views/controls/button/button.h"
-#include "chrome/views/controls/table/table_view.h"
-#include "chrome/views/window/dialog_delegate.h"
+#include "views/controls/button/button.h"
+#include "views/controls/table/table_view.h"
+#include "views/window/dialog_delegate.h"
#if defined(OS_WIN) && defined(IPC_MESSAGE_LOG_ENABLED)
diff --git a/chrome/browser/views/about_network_dialog.cc b/chrome/browser/views/about_network_dialog.cc
index 90d59a5..aced9e3 100644
--- a/chrome/browser/views/about_network_dialog.cc
+++ b/chrome/browser/views/about_network_dialog.cc
@@ -8,13 +8,13 @@
#include "base/thread.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/views/standard_layout.h"
-#include "chrome/views/grid_layout.h"
-#include "chrome/views/controls/button/text_button.h"
-#include "chrome/views/controls/text_field.h"
-#include "chrome/views/window/window.h"
#include "net/url_request/url_request.h"
#include "net/url_request/url_request_job.h"
#include "net/url_request/url_request_job_tracker.h"
+#include "views/grid_layout.h"
+#include "views/controls/button/text_button.h"
+#include "views/controls/text_field.h"
+#include "views/window/window.h"
namespace {
diff --git a/chrome/browser/views/about_network_dialog.h b/chrome/browser/views/about_network_dialog.h
index b10cf04..d49da4e 100644
--- a/chrome/browser/views/about_network_dialog.h
+++ b/chrome/browser/views/about_network_dialog.h
@@ -6,8 +6,8 @@
#define CHROME_BROWSER_VIEWS_ABOUT_NETWORK_DIALOG_H_
#include "base/singleton.h"
-#include "chrome/views/controls/button/button.h"
-#include "chrome/views/window/dialog_delegate.h"
+#include "views/controls/button/button.h"
+#include "views/window/dialog_delegate.h"
namespace views {
class TextButton;
diff --git a/chrome/browser/views/autocomplete/autocomplete_popup_contents_view.cc b/chrome/browser/views/autocomplete/autocomplete_popup_contents_view.cc
index 51f59e3..a6c9366 100644
--- a/chrome/browser/views/autocomplete/autocomplete_popup_contents_view.cc
+++ b/chrome/browser/views/autocomplete/autocomplete_popup_contents_view.cc
@@ -16,11 +16,11 @@
#include "chrome/browser/views/autocomplete/autocomplete_popup_win.h"
#include "chrome/common/gfx/color_utils.h"
#include "chrome/common/win_util.h"
-#include "chrome/views/widget/widget.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
#include "skia/include/SkShader.h"
#include "third_party/icu38/public/common/unicode/ubidi.h"
+#include "views/widget/widget.h"
// Colors for various components of the view.
static const SkColor kBackgroundColor =
diff --git a/chrome/browser/views/autocomplete/autocomplete_popup_contents_view.h b/chrome/browser/views/autocomplete/autocomplete_popup_contents_view.h
index 4fd599d..1f4b04a 100644
--- a/chrome/browser/views/autocomplete/autocomplete_popup_contents_view.h
+++ b/chrome/browser/views/autocomplete/autocomplete_popup_contents_view.h
@@ -9,7 +9,7 @@
#include "chrome/browser/autocomplete/autocomplete.h"
#include "chrome/browser/autocomplete/autocomplete_popup_model.h"
#include "chrome/browser/autocomplete/autocomplete_popup_view.h"
-#include "chrome/views/view.h"
+#include "views/view.h"
#include "webkit/glue/window_open_disposition.h"
class AutocompleteEditModel;
diff --git a/chrome/browser/views/autocomplete/autocomplete_popup_win.h b/chrome/browser/views/autocomplete/autocomplete_popup_win.h
index 91d8d88..d77ba7b 100644
--- a/chrome/browser/views/autocomplete/autocomplete_popup_win.h
+++ b/chrome/browser/views/autocomplete/autocomplete_popup_win.h
@@ -5,7 +5,7 @@
#ifndef CHROME_BROWSER_VIEWS_AUTOCOMPLETE_AUTOCOMPLETE_POPUP_WIN_H_
#define CHROME_BROWSER_VIEWS_AUTOCOMPLETE_AUTOCOMPLETE_POPUP_WIN_H_
-#include "chrome/views/widget/widget_win.h"
+#include "views/widget/widget_win.h"
class AutocompleteEditViewWin;
class AutocompletePopupContentsView;
diff --git a/chrome/browser/views/blocked_popup_container.cc b/chrome/browser/views/blocked_popup_container.cc
index 82b9590..abb0f35 100644
--- a/chrome/browser/views/blocked_popup_container.cc
+++ b/chrome/browser/views/blocked_popup_container.cc
@@ -22,11 +22,11 @@
#include "chrome/browser/tab_contents/tab_contents.h"
#include "chrome/common/notification_service.h"
#include "chrome/common/pref_names.h"
-#include "chrome/views/background.h"
-#include "chrome/views/controls/button/image_button.h"
-#include "chrome/views/controls/button/menu_button.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
+#include "views/background.h"
+#include "views/controls/button/image_button.h"
+#include "views/controls/button/menu_button.h"
namespace {
// Menu item ID for the "Notify me when a popup is blocked" checkbox. (All
@@ -316,7 +316,7 @@ void BlockedPopupContainer::OnPopupOpenedFromWhitelistedHost(
void BlockedPopupContainer::LaunchPopupIndex(int index) {
if (static_cast<size_t>(index) >= blocked_popups_.size())
return;
-
+
BlockedPopups::iterator i(blocked_popups_.begin() + index);
TabContents* contents = i->tab_contents;
gfx::Rect bounds(i->bounds);
diff --git a/chrome/browser/views/blocked_popup_container.h b/chrome/browser/views/blocked_popup_container.h
index 80112e5..acd0e13 100644
--- a/chrome/browser/views/blocked_popup_container.h
+++ b/chrome/browser/views/blocked_popup_container.h
@@ -18,10 +18,10 @@
#include "chrome/browser/tab_contents/constrained_window.h"
#include "chrome/browser/tab_contents/tab_contents_delegate.h"
#include "chrome/common/pref_member.h"
-#include "chrome/views/controls/button/button.h"
-#include "chrome/views/controls/menu/menu.h"
-#include "chrome/views/view.h"
-#include "chrome/views/widget/widget_win.h"
+#include "views/controls/button/button.h"
+#include "views/controls/menu/menu.h"
+#include "views/view.h"
+#include "views/widget/widget_win.h"
class BlockedPopupContainer;
class Profile;
@@ -268,7 +268,7 @@ class BlockedPopupContainer : public ConstrainedWindow,
// iterator into |popup_hosts_|. Returns popup_hosts_.end() if |index| is
// invalid.
PopupHosts::const_iterator ConvertHostIndexToIterator(int index) const;
-
+
// If the popup at |i| is the last one associated with its host, removes the
// host from the host list.
void EraseHostIfNeeded(BlockedPopups::iterator i);
diff --git a/chrome/browser/views/bookmark_bar_view.cc b/chrome/browser/views/bookmark_bar_view.cc
index e377397..d54e5ff 100644
--- a/chrome/browser/views/bookmark_bar_view.cc
+++ b/chrome/browser/views/bookmark_bar_view.cc
@@ -33,15 +33,15 @@
#include "chrome/common/pref_names.h"
#include "chrome/common/pref_service.h"
#include "chrome/common/win_util.h"
-#include "chrome/views/controls/button/menu_button.h"
-#include "chrome/views/controls/menu/chrome_menu.h"
-#include "chrome/views/view_constants.h"
-#include "chrome/views/widget/tooltip_manager.h"
-#include "chrome/views/widget/widget.h"
-#include "chrome/views/window/window.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
#include "skia/ext/skia_utils.h"
+#include "views/controls/button/menu_button.h"
+#include "views/controls/menu/chrome_menu.h"
+#include "views/view_constants.h"
+#include "views/widget/tooltip_manager.h"
+#include "views/widget/widget.h"
+#include "views/window/window.h"
using views::CustomButton;
using views::DropTargetEvent;
diff --git a/chrome/browser/views/bookmark_bar_view.h b/chrome/browser/views/bookmark_bar_view.h
index a6c7ca8..f9d3ee0 100644
--- a/chrome/browser/views/bookmark_bar_view.h
+++ b/chrome/browser/views/bookmark_bar_view.h
@@ -10,11 +10,11 @@
#include "chrome/browser/bookmarks/bookmark_menu_controller_win.h"
#include "chrome/browser/bookmarks/bookmark_model.h"
#include "chrome/browser/extensions/extensions_service.h"
-#include "chrome/views/controls/button/menu_button.h"
-#include "chrome/views/controls/label.h"
-#include "chrome/views/controls/menu/menu.h"
-#include "chrome/views/controls/menu/view_menu_delegate.h"
-#include "chrome/views/view.h"
+#include "views/controls/button/menu_button.h"
+#include "views/controls/label.h"
+#include "views/controls/menu/menu.h"
+#include "views/controls/menu/view_menu_delegate.h"
+#include "views/view.h"
#include "skia/include/corecg/SkRect.h"
class Browser;
diff --git a/chrome/browser/views/bookmark_bar_view_test.cc b/chrome/browser/views/bookmark_bar_view_test.cc
index 3fe05c1..73eb686 100644
--- a/chrome/browser/views/bookmark_bar_view_test.cc
+++ b/chrome/browser/views/bookmark_bar_view_test.cc
@@ -13,9 +13,9 @@
#include "chrome/common/pref_service.h"
#include "chrome/test/testing_profile.h"
#include "chrome/test/interactive_ui/view_event_test_base.h"
-#include "chrome/views/controls/button/text_button.h"
-#include "chrome/views/controls/menu/chrome_menu.h"
-#include "chrome/views/window/window.h"
+#include "views/controls/button/text_button.h"
+#include "views/controls/menu/chrome_menu.h"
+#include "views/window/window.h"
namespace {
diff --git a/chrome/browser/views/bookmark_bubble_view.cc b/chrome/browser/views/bookmark_bubble_view.cc
index d731fac..abae95f 100644
--- a/chrome/browser/views/bookmark_bubble_view.cc
+++ b/chrome/browser/views/bookmark_bubble_view.cc
@@ -16,10 +16,10 @@
#include "chrome/browser/views/info_bubble.h"
#include "chrome/browser/views/standard_layout.h"
#include "chrome/common/notification_service.h"
-#include "chrome/views/controls/button/native_button.h"
-#include "chrome/views/controls/text_field.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
+#include "views/controls/button/native_button.h"
+#include "views/controls/text_field.h"
using views::ComboBox;
using views::ColumnSet;
diff --git a/chrome/browser/views/bookmark_bubble_view.h b/chrome/browser/views/bookmark_bubble_view.h
index f94039a..76b3a27 100644
--- a/chrome/browser/views/bookmark_bubble_view.h
+++ b/chrome/browser/views/bookmark_bubble_view.h
@@ -7,11 +7,11 @@
#include "base/gfx/rect.h"
#include "chrome/browser/views/info_bubble.h"
-#include "chrome/views/controls/button/button.h"
-#include "chrome/views/controls/combo_box.h"
-#include "chrome/views/controls/link.h"
-#include "chrome/views/view.h"
#include "googleurl/src/gurl.h"
+#include "views/controls/button/button.h"
+#include "views/controls/combo_box.h"
+#include "views/controls/link.h"
+#include "views/view.h"
class Profile;
diff --git a/chrome/browser/views/bookmark_editor_view.cc b/chrome/browser/views/bookmark_editor_view.cc
index 347ba5d..40472cb 100644
--- a/chrome/browser/views/bookmark_editor_view.cc
+++ b/chrome/browser/views/bookmark_editor_view.cc
@@ -13,17 +13,17 @@
#include "chrome/browser/profile.h"
#include "chrome/browser/net/url_fixer_upper.h"
#include "chrome/browser/views/standard_layout.h"
-#include "chrome/views/background.h"
-#include "chrome/views/focus/focus_manager.h"
-#include "chrome/views/grid_layout.h"
-#include "chrome/views/controls/button/native_button.h"
-#include "chrome/views/controls/label.h"
-#include "chrome/views/widget/widget.h"
-#include "chrome/views/window/window.h"
#include "googleurl/src/gurl.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "grit/locale_settings.h"
+#include "views/background.h"
+#include "views/focus/focus_manager.h"
+#include "views/grid_layout.h"
+#include "views/controls/button/native_button.h"
+#include "views/controls/label.h"
+#include "views/widget/widget.h"
+#include "views/window/window.h"
using views::Button;
using views::ColumnSet;
diff --git a/chrome/browser/views/bookmark_editor_view.h b/chrome/browser/views/bookmark_editor_view.h
index 8414544..e7cba63 100644
--- a/chrome/browser/views/bookmark_editor_view.h
+++ b/chrome/browser/views/bookmark_editor_view.h
@@ -9,12 +9,12 @@
#include "chrome/browser/bookmarks/bookmark_editor.h"
#include "chrome/browser/bookmarks/bookmark_model.h"
-#include "chrome/views/controls/button/button.h"
-#include "chrome/views/controls/menu/menu.h"
-#include "chrome/views/controls/text_field.h"
-#include "chrome/views/controls/tree/tree_node_model.h"
-#include "chrome/views/controls/tree/tree_view.h"
-#include "chrome/views/window/dialog_delegate.h"
+#include "views/controls/button/button.h"
+#include "views/controls/menu/menu.h"
+#include "views/controls/text_field.h"
+#include "views/controls/tree/tree_node_model.h"
+#include "views/controls/tree/tree_view.h"
+#include "views/window/dialog_delegate.h"
namespace views {
class NativeButton;
diff --git a/chrome/browser/views/bookmark_folder_tree_view.cc b/chrome/browser/views/bookmark_folder_tree_view.cc
index 7986d8f..e092670 100644
--- a/chrome/browser/views/bookmark_folder_tree_view.cc
+++ b/chrome/browser/views/bookmark_folder_tree_view.cc
@@ -11,8 +11,8 @@
#include "chrome/browser/bookmarks/bookmark_model.h"
#include "chrome/browser/bookmarks/bookmark_folder_tree_model.h"
#include "chrome/browser/profile.h"
-#include "chrome/views/view_constants.h"
#include "grit/generated_resources.h"
+#include "views/view_constants.h"
void BookmarkFolderTreeView::DropInfo::Scrolled() {
view_->UpdateDropInfo();
diff --git a/chrome/browser/views/bookmark_folder_tree_view.h b/chrome/browser/views/bookmark_folder_tree_view.h
index cfae928..2a47b1b 100644
--- a/chrome/browser/views/bookmark_folder_tree_view.h
+++ b/chrome/browser/views/bookmark_folder_tree_view.h
@@ -9,7 +9,7 @@
#include "chrome/browser/bookmarks/bookmark_drag_data.h"
#include "chrome/browser/bookmarks/bookmark_drop_info.h"
#include "chrome/browser/bookmarks/bookmark_folder_tree_model.h"
-#include "chrome/views/controls/tree/tree_view.h"
+#include "views/controls/tree/tree_view.h"
class BookmarkModel;
class BookmarkNode;
diff --git a/chrome/browser/views/bookmark_manager_view.cc b/chrome/browser/views/bookmark_manager_view.cc
index 4be9ec3..ec28029 100644
--- a/chrome/browser/views/bookmark_manager_view.cc
+++ b/chrome/browser/views/bookmark_manager_view.cc
@@ -26,15 +26,15 @@
#include "chrome/common/pref_names.h"
#include "chrome/common/pref_service.h"
#include "chrome/common/win_util.h"
-#include "chrome/views/grid_layout.h"
-#include "chrome/views/controls/button/menu_button.h"
-#include "chrome/views/controls/label.h"
-#include "chrome/views/controls/single_split_view.h"
-#include "chrome/views/widget/widget.h"
-#include "chrome/views/window/window.h"
#include "grit/generated_resources.h"
#include "grit/locale_settings.h"
#include "skia/ext/skia_utils.h"
+#include "views/grid_layout.h"
+#include "views/controls/button/menu_button.h"
+#include "views/controls/label.h"
+#include "views/controls/single_split_view.h"
+#include "views/widget/widget.h"
+#include "views/window/window.h"
// If non-null, there is an open editor and this is the window it is contained
diff --git a/chrome/browser/views/bookmark_manager_view.h b/chrome/browser/views/bookmark_manager_view.h
index 9f986aa..a624281 100644
--- a/chrome/browser/views/bookmark_manager_view.h
+++ b/chrome/browser/views/bookmark_manager_view.h
@@ -10,12 +10,12 @@
#include "chrome/browser/bookmarks/bookmark_context_menu.h"
#include "chrome/browser/bookmarks/bookmark_model.h"
#include "chrome/browser/shell_dialogs.h"
-#include "chrome/views/controls/menu/view_menu_delegate.h"
-#include "chrome/views/controls/table/table_view.h"
-#include "chrome/views/controls/text_field.h"
-#include "chrome/views/controls/tree/tree_view.h"
-#include "chrome/views/view.h"
-#include "chrome/views/window/window_delegate.h"
+#include "views/controls/menu/view_menu_delegate.h"
+#include "views/controls/table/table_view.h"
+#include "views/controls/text_field.h"
+#include "views/controls/tree/tree_view.h"
+#include "views/view.h"
+#include "views/window/window_delegate.h"
#include "webkit/glue/window_open_disposition.h"
class BookmarkFolderTreeModel;
diff --git a/chrome/browser/views/bookmark_menu_button.cc b/chrome/browser/views/bookmark_menu_button.cc
index e92e5bb..0074e61 100644
--- a/chrome/browser/views/bookmark_menu_button.cc
+++ b/chrome/browser/views/bookmark_menu_button.cc
@@ -11,8 +11,8 @@
#include "chrome/browser/browser.h"
#include "chrome/browser/profile.h"
#include "chrome/browser/view_ids.h"
-#include "chrome/views/widget/widget.h"
#include "grit/theme_resources.h"
+#include "views/widget/widget.h"
BookmarkMenuButton::BookmarkMenuButton(Browser* browser)
: views::MenuButton(NULL, std::wstring(), NULL, false),
diff --git a/chrome/browser/views/bookmark_menu_button.h b/chrome/browser/views/bookmark_menu_button.h
index ed6dc5b..0ebb59f 100644
--- a/chrome/browser/views/bookmark_menu_button.h
+++ b/chrome/browser/views/bookmark_menu_button.h
@@ -8,8 +8,8 @@
#include "base/timer.h"
#include "chrome/browser/bookmarks/bookmark_drag_data.h"
#include "chrome/browser/bookmarks/bookmark_menu_controller_win.h"
-#include "chrome/views/controls/button/menu_button.h"
-#include "chrome/views/controls/menu/view_menu_delegate.h"
+#include "views/controls/button/menu_button.h"
+#include "views/controls/menu/view_menu_delegate.h"
class BookmarkModel;
class Browser;
diff --git a/chrome/browser/views/bookmark_table_view.cc b/chrome/browser/views/bookmark_table_view.cc
index 12d1d9f..c1b4023 100644
--- a/chrome/browser/views/bookmark_table_view.cc
+++ b/chrome/browser/views/bookmark_table_view.cc
@@ -16,8 +16,8 @@
#include "chrome/browser/profile.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/pref_service.h"
-#include "chrome/views/view_constants.h"
#include "grit/generated_resources.h"
+#include "views/view_constants.h"
namespace {
diff --git a/chrome/browser/views/bookmark_table_view.h b/chrome/browser/views/bookmark_table_view.h
index ab9b865..cde2bd0 100644
--- a/chrome/browser/views/bookmark_table_view.h
+++ b/chrome/browser/views/bookmark_table_view.h
@@ -7,8 +7,8 @@
#include "chrome/browser/bookmarks/bookmark_drag_data.h"
#include "chrome/browser/bookmarks/bookmark_drop_info.h"
-#include "chrome/views/controls/menu/menu.h"
-#include "chrome/views/controls/table/table_view.h"
+#include "views/controls/menu/menu.h"
+#include "views/controls/table/table_view.h"
class BookmarkModel;
class BookmarkNode;
diff --git a/chrome/browser/views/bug_report_view.cc b/chrome/browser/views/bug_report_view.cc
index c339eba..7bebdc5 100644
--- a/chrome/browser/views/bug_report_view.cc
+++ b/chrome/browser/views/bug_report_view.cc
@@ -18,16 +18,16 @@
#include "chrome/browser/views/standard_layout.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/pref_service.h"
-#include "chrome/views/controls/button/checkbox.h"
-#include "chrome/views/controls/label.h"
-#include "chrome/views/grid_layout.h"
-#include "chrome/views/window/client_view.h"
-#include "chrome/views/window/window.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "grit/locale_settings.h"
#include "net/base/escape.h"
#include "unicode/locid.h"
+#include "views/controls/button/checkbox.h"
+#include "views/controls/label.h"
+#include "views/grid_layout.h"
+#include "views/window/client_view.h"
+#include "views/window/window.h"
using views::ColumnSet;
using views::GridLayout;
diff --git a/chrome/browser/views/bug_report_view.h b/chrome/browser/views/bug_report_view.h
index d17e569..0688a1dc 100644
--- a/chrome/browser/views/bug_report_view.h
+++ b/chrome/browser/views/bug_report_view.h
@@ -6,11 +6,11 @@
#define CHROME_BROWSER_VIEWS_BUG_REPORT_VIEW_H_
#include "chrome/browser/net/url_fetcher.h"
-#include "chrome/views/controls/combo_box.h"
-#include "chrome/views/controls/text_field.h"
-#include "chrome/views/view.h"
-#include "chrome/views/window/dialog_delegate.h"
#include "googleurl/src/gurl.h"
+#include "views/controls/combo_box.h"
+#include "views/controls/text_field.h"
+#include "views/view.h"
+#include "views/window/dialog_delegate.h"
namespace views {
class Checkbox;
diff --git a/chrome/browser/views/clear_browsing_data.cc b/chrome/browser/views/clear_browsing_data.cc
index 1d9070f..6502cd4 100644
--- a/chrome/browser/views/clear_browsing_data.cc
+++ b/chrome/browser/views/clear_browsing_data.cc
@@ -8,16 +8,16 @@
#include "chrome/browser/profile.h"
#include "chrome/browser/search_engines/template_url_model.h"
#include "chrome/browser/views/standard_layout.h"
-#include "chrome/views/background.h"
-#include "chrome/views/controls/button/checkbox.h"
-#include "chrome/views/controls/label.h"
-#include "chrome/views/controls/throbber.h"
-#include "chrome/views/window/window.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/pref_service.h"
#include "grit/generated_resources.h"
#include "grit/locale_settings.h"
#include "net/url_request/url_request_context.h"
+#include "views/background.h"
+#include "views/controls/button/checkbox.h"
+#include "views/controls/label.h"
+#include "views/controls/throbber.h"
+#include "views/window/window.h"
using base::Time;
using base::TimeDelta;
diff --git a/chrome/browser/views/clear_browsing_data.h b/chrome/browser/views/clear_browsing_data.h
index de4ea31..f51979e 100644
--- a/chrome/browser/views/clear_browsing_data.h
+++ b/chrome/browser/views/clear_browsing_data.h
@@ -6,11 +6,11 @@
#define CHROME_BROWSER_VIEWS_CLEAR_BROWSING_DATA_H__
#include "chrome/browser/browsing_data_remover.h"
-#include "chrome/views/controls/button/button.h"
-#include "chrome/views/controls/combo_box.h"
-#include "chrome/views/controls/label.h"
-#include "chrome/views/view.h"
-#include "chrome/views/window/dialog_delegate.h"
+#include "views/controls/button/button.h"
+#include "views/controls/combo_box.h"
+#include "views/controls/label.h"
+#include "views/view.h"
+#include "views/window/dialog_delegate.h"
namespace views {
class Checkbox;
diff --git a/chrome/browser/views/constrained_window_impl.cc b/chrome/browser/views/constrained_window_impl.cc
index 11ab3b5..142a983 100644
--- a/chrome/browser/views/constrained_window_impl.cc
+++ b/chrome/browser/views/constrained_window_impl.cc
@@ -25,16 +25,16 @@
#include "chrome/common/pref_names.h"
#include "chrome/common/pref_service.h"
#include "chrome/common/win_util.h"
-#include "chrome/views/controls/button/image_button.h"
-#include "chrome/views/controls/hwnd_view.h"
-#include "chrome/views/focus/focus_manager.h"
-#include "chrome/views/window/client_view.h"
-#include "chrome/views/window/non_client_view.h"
-#include "chrome/views/window/window_resources.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
#include "net/base/net_util.h"
+#include "views/controls/button/image_button.h"
+#include "views/controls/hwnd_view.h"
+#include "views/focus/focus_manager.h"
+#include "views/window/client_view.h"
+#include "views/window/non_client_view.h"
+#include "views/window/window_resources.h"
using base::TimeDelta;
diff --git a/chrome/browser/views/constrained_window_impl.h b/chrome/browser/views/constrained_window_impl.h
index a4ff2bd..bb29031 100644
--- a/chrome/browser/views/constrained_window_impl.h
+++ b/chrome/browser/views/constrained_window_impl.h
@@ -8,7 +8,7 @@
#include "base/gfx/rect.h"
#include "chrome/browser/tab_contents/constrained_window.h"
#include "chrome/browser/tab_contents/tab_contents_delegate.h"
-#include "chrome/views/window/window_win.h"
+#include "views/window/window_win.h"
class ConstrainedTabContentsWindowDelegate;
class ConstrainedWindowAnimation;
diff --git a/chrome/browser/views/constrained_window_impl_interactive_uitest.cc b/chrome/browser/views/constrained_window_impl_interactive_uitest.cc
index 7990d21..3faf68a 100644
--- a/chrome/browser/views/constrained_window_impl_interactive_uitest.cc
+++ b/chrome/browser/views/constrained_window_impl_interactive_uitest.cc
@@ -14,9 +14,9 @@
#include "chrome/test/automation/tab_proxy.h"
#include "chrome/test/automation/window_proxy.h"
#include "chrome/test/ui/ui_test.h"
-#include "chrome/views/event.h"
#include "grit/generated_resources.h"
#include "net/base/net_util.h"
+#include "views/event.h"
class InteractiveConstrainedWindowTest : public UITest {
protected:
diff --git a/chrome/browser/views/dom_view.h b/chrome/browser/views/dom_view.h
index cf60430..da26bc4 100644
--- a/chrome/browser/views/dom_view.h
+++ b/chrome/browser/views/dom_view.h
@@ -9,8 +9,8 @@
#define CHROME_BROWSER_VIEWS_DOM_VIEW_H_
#include "base/scoped_ptr.h"
-#include "chrome/views/controls/hwnd_view.h"
#include "googleurl/src/gurl.h"
+#include "views/controls/hwnd_view.h"
class Profile;
class SiteInstance;
diff --git a/chrome/browser/views/download_item_view.cc b/chrome/browser/views/download_item_view.cc
index 17a6108..4f1d349 100644
--- a/chrome/browser/views/download_item_view.cc
+++ b/chrome/browser/views/download_item_view.cc
@@ -17,12 +17,12 @@
#include "chrome/browser/views/download_shelf_view.h"
#include "chrome/common/gfx/text_elider.h"
#include "chrome/common/win_util.h"
-#include "chrome/views/controls/button/native_button.h"
-#include "chrome/views/controls/menu/menu.h"
-#include "chrome/views/widget/root_view.h"
-#include "chrome/views/widget/widget.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
+#include "views/controls/button/native_button.h"
+#include "views/controls/menu/menu.h"
+#include "views/widget/root_view.h"
+#include "views/widget/widget.h"
using base::TimeDelta;
diff --git a/chrome/browser/views/download_item_view.h b/chrome/browser/views/download_item_view.h
index c5df73d..264d98d 100644
--- a/chrome/browser/views/download_item_view.h
+++ b/chrome/browser/views/download_item_view.h
@@ -27,9 +27,9 @@
#include "chrome/browser/cancelable_request.h"
#include "chrome/browser/download/download_manager.h"
#include "chrome/browser/icon_manager.h"
-#include "chrome/views/event.h"
-#include "chrome/views/controls/button/button.h"
-#include "chrome/views/view.h"
+#include "views/event.h"
+#include "views/controls/button/button.h"
+#include "views/view.h"
namespace views {
class Label;
diff --git a/chrome/browser/views/download_shelf_view.cc b/chrome/browser/views/download_shelf_view.cc
index 9b97983..e2fd9f6 100644
--- a/chrome/browser/views/download_shelf_view.cc
+++ b/chrome/browser/views/download_shelf_view.cc
@@ -15,11 +15,11 @@
#include "chrome/browser/tab_contents/navigation_entry.h"
#include "chrome/browser/tab_contents/tab_contents.h"
#include "chrome/browser/views/download_item_view.h"
-#include "chrome/views/background.h"
-#include "chrome/views/controls/button/image_button.h"
-#include "chrome/views/controls/image_view.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
+#include "views/background.h"
+#include "views/controls/button/image_button.h"
+#include "views/controls/image_view.h"
// Max number of download views we'll contain. Any time a view is added and
// we already have this many download views, one is removed.
diff --git a/chrome/browser/views/download_shelf_view.h b/chrome/browser/views/download_shelf_view.h
index 5de3d34..325439f 100644
--- a/chrome/browser/views/download_shelf_view.h
+++ b/chrome/browser/views/download_shelf_view.h
@@ -7,8 +7,8 @@
#include "app/slide_animation.h"
#include "chrome/browser/download/download_shelf.h"
-#include "chrome/views/controls/button/button.h"
-#include "chrome/views/controls/link.h"
+#include "views/controls/button/button.h"
+#include "views/controls/link.h"
namespace views {
class ImageButton;
diff --git a/chrome/browser/views/download_started_animation.cc b/chrome/browser/views/download_started_animation.cc
index b6ec708..3fddcd4 100644
--- a/chrome/browser/views/download_started_animation.cc
+++ b/chrome/browser/views/download_started_animation.cc
@@ -7,8 +7,8 @@
#include "app/resource_bundle.h"
#include "chrome/browser/tab_contents/tab_contents.h"
#include "chrome/common/notification_service.h"
-#include "chrome/views/widget/widget_win.h"
#include "grit/theme_resources.h"
+#include "views/widget/widget_win.h"
// How long to spend moving downwards and fading out after waiting.
static const int kMoveTimeMs = 600;
diff --git a/chrome/browser/views/download_started_animation.h b/chrome/browser/views/download_started_animation.h
index 162560d..ec84244 100644
--- a/chrome/browser/views/download_started_animation.h
+++ b/chrome/browser/views/download_started_animation.h
@@ -8,7 +8,7 @@
#include "app/animation.h"
#include "base/gfx/rect.h"
#include "chrome/common/notification_registrar.h"
-#include "chrome/views/controls/image_view.h"
+#include "views/controls/image_view.h"
namespace views {
class WidgetWin;
diff --git a/chrome/browser/views/edit_keyword_controller.cc b/chrome/browser/views/edit_keyword_controller.cc
index c481d69..c18e94f 100644
--- a/chrome/browser/views/edit_keyword_controller.cc
+++ b/chrome/browser/views/edit_keyword_controller.cc
@@ -14,14 +14,14 @@
#include "chrome/browser/search_engines/template_url_model.h"
#include "chrome/browser/views/keyword_editor_view.h"
#include "chrome/browser/views/standard_layout.h"
-#include "chrome/views/controls/label.h"
-#include "chrome/views/controls/image_view.h"
-#include "chrome/views/controls/table/table_view.h"
-#include "chrome/views/grid_layout.h"
-#include "chrome/views/window/window.h"
#include "googleurl/src/gurl.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
+#include "views/controls/label.h"
+#include "views/controls/image_view.h"
+#include "views/controls/table/table_view.h"
+#include "views/grid_layout.h"
+#include "views/window/window.h"
using views::GridLayout;
using views::ImageView;
diff --git a/chrome/browser/views/edit_keyword_controller.h b/chrome/browser/views/edit_keyword_controller.h
index e9a8f36..36e9370 100644
--- a/chrome/browser/views/edit_keyword_controller.h
+++ b/chrome/browser/views/edit_keyword_controller.h
@@ -10,10 +10,10 @@
#ifndef CHROME_BROWSER_VIEWS_EDIT_KEYWORD_CONTROLLER_H_
#define CHROME_BROWSER_VIEWS_EDIT_KEYWORD_CONTROLLER_H_
-#include <Windows.h>
+#include <windows.h>
-#include "chrome/views/controls/text_field.h"
-#include "chrome/views/window/dialog_delegate.h"
+#include "views/controls/text_field.h"
+#include "views/window/dialog_delegate.h"
namespace views {
class Label;
diff --git a/chrome/browser/views/event_utils.cc b/chrome/browser/views/event_utils.cc
index 989deab..06b9f0d 100644
--- a/chrome/browser/views/event_utils.cc
+++ b/chrome/browser/views/event_utils.cc
@@ -4,7 +4,7 @@
#include "chrome/browser/views/event_utils.h"
-#include "chrome/views/event.h"
+#include "views/event.h"
using views::Event;
diff --git a/chrome/browser/views/external_protocol_dialog.cc b/chrome/browser/views/external_protocol_dialog.cc
index 2d60738..2feb0d7 100644
--- a/chrome/browser/views/external_protocol_dialog.cc
+++ b/chrome/browser/views/external_protocol_dialog.cc
@@ -14,10 +14,10 @@
#include "chrome/browser/external_protocol_handler.h"
#include "chrome/browser/tab_contents/tab_util.h"
#include "chrome/browser/tab_contents/tab_contents.h"
-#include "chrome/views/controls/message_box_view.h"
-#include "chrome/views/window/window.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
+#include "views/controls/message_box_view.h"
+#include "views/window/window.h"
namespace {
diff --git a/chrome/browser/views/external_protocol_dialog.h b/chrome/browser/views/external_protocol_dialog.h
index 548c54e..d74df51 100644
--- a/chrome/browser/views/external_protocol_dialog.h
+++ b/chrome/browser/views/external_protocol_dialog.h
@@ -6,8 +6,8 @@
#define CHROME_BROWSER_EXTERNAL_PROTOCOL_DIALOG_H__
#include "base/time.h"
-#include "chrome/views/window/dialog_delegate.h"
#include "googleurl/src/gurl.h"
+#include "views/window/dialog_delegate.h"
class MessageBoxView;
class TabContents;
diff --git a/chrome/browser/views/find_bar_view.cc b/chrome/browser/views/find_bar_view.cc
index 1ca1c22..246857f 100644
--- a/chrome/browser/views/find_bar_view.cc
+++ b/chrome/browser/views/find_bar_view.cc
@@ -14,12 +14,12 @@
#include "chrome/browser/tab_contents/tab_contents.h"
#include "chrome/browser/views/find_bar_win.h"
#include "chrome/browser/view_ids.h"
-#include "chrome/views/background.h"
-#include "chrome/views/controls/button/image_button.h"
-#include "chrome/views/controls/label.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
#include "skia/include/SkGradientShader.h"
+#include "views/background.h"
+#include "views/controls/button/image_button.h"
+#include "views/controls/label.h"
// The amount of whitespace to have before the find button.
static const int kWhiteSpaceAfterMatchCountLabel = 3;
diff --git a/chrome/browser/views/find_bar_view.h b/chrome/browser/views/find_bar_view.h
index 970c21b..9987118 100644
--- a/chrome/browser/views/find_bar_view.h
+++ b/chrome/browser/views/find_bar_view.h
@@ -7,8 +7,8 @@
#include "base/gfx/size.h"
#include "chrome/browser/find_notification_details.h"
-#include "chrome/views/controls/button/button.h"
-#include "chrome/views/controls/text_field.h"
+#include "views/controls/button/button.h"
+#include "views/controls/text_field.h"
class FindBarWin;
diff --git a/chrome/browser/views/find_bar_win.cc b/chrome/browser/views/find_bar_win.cc
index 7ada890..0a56f61 100644
--- a/chrome/browser/views/find_bar_win.cc
+++ b/chrome/browser/views/find_bar_win.cc
@@ -14,11 +14,11 @@
#include "chrome/browser/views/frame/browser_view.h"
#include "chrome/browser/tab_contents/tab_contents.h"
#include "chrome/browser/tab_contents/tab_contents_view.h"
-#include "chrome/views/focus/external_focus_tracker.h"
-#include "chrome/views/focus/view_storage.h"
-#include "chrome/views/controls/scrollbar/native_scroll_bar.h"
-#include "chrome/views/widget/root_view.h"
-#include "chrome/views/widget/widget_win.h"
+#include "views/focus/external_focus_tracker.h"
+#include "views/focus/view_storage.h"
+#include "views/controls/scrollbar/native_scroll_bar.h"
+#include "views/widget/root_view.h"
+#include "views/widget/widget_win.h"
// The minimum space between the FindInPage window and the search result.
static const int kMinFindWndDistanceFromSelection = 5;
diff --git a/chrome/browser/views/find_bar_win.h b/chrome/browser/views/find_bar_win.h
index 1073e76..182f65e 100644
--- a/chrome/browser/views/find_bar_win.h
+++ b/chrome/browser/views/find_bar_win.h
@@ -9,7 +9,7 @@
#include "base/gfx/rect.h"
#include "chrome/browser/find_bar.h"
#include "chrome/browser/renderer_host/render_view_host_delegate.h"
-#include "chrome/views/widget/widget_win.h"
+#include "views/widget/widget_win.h"
class BrowserView;
class FindBarController;
diff --git a/chrome/browser/views/find_bar_win_interactive_uitest.cc b/chrome/browser/views/find_bar_win_interactive_uitest.cc
index ddc0f17..21d2db0 100644
--- a/chrome/browser/views/find_bar_win_interactive_uitest.cc
+++ b/chrome/browser/views/find_bar_win_interactive_uitest.cc
@@ -4,12 +4,12 @@
#include "chrome/browser/view_ids.h"
-#include "chrome/views/view.h"
#include "chrome/test/automation/browser_proxy.h"
#include "chrome/test/automation/window_proxy.h"
#include "chrome/test/automation/tab_proxy.h"
#include "chrome/test/ui/ui_test.h"
#include "net/url_request/url_request_unittest.h"
+#include "views/view.h"
namespace {
diff --git a/chrome/browser/views/first_run_bubble.cc b/chrome/browser/views/first_run_bubble.cc
index e487b5f..61bcdb2 100644
--- a/chrome/browser/views/first_run_bubble.cc
+++ b/chrome/browser/views/first_run_bubble.cc
@@ -14,14 +14,14 @@
#include "chrome/browser/profile.h"
#include "chrome/browser/search_engines/template_url_model.h"
#include "chrome/browser/views/standard_layout.h"
-#include "chrome/views/event.h"
-#include "chrome/views/controls/button/native_button.h"
-#include "chrome/views/controls/label.h"
-#include "chrome/views/focus/focus_manager.h"
-#include "chrome/views/window/window.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "grit/locale_settings.h"
+#include "views/event.h"
+#include "views/controls/button/native_button.h"
+#include "views/controls/label.h"
+#include "views/focus/focus_manager.h"
+#include "views/window/window.h"
namespace {
diff --git a/chrome/browser/views/first_run_customize_view.cc b/chrome/browser/views/first_run_customize_view.cc
index 190a89a..1ac1eb7 100644
--- a/chrome/browser/views/first_run_customize_view.cc
+++ b/chrome/browser/views/first_run_customize_view.cc
@@ -10,16 +10,16 @@
#include "chrome/browser/first_run.h"
#include "chrome/browser/metrics/user_metrics.h"
#include "chrome/browser/views/standard_layout.h"
-#include "chrome/views/controls/button/checkbox.h"
-#include "chrome/views/controls/combo_box.h"
-#include "chrome/views/controls/image_view.h"
-#include "chrome/views/controls/label.h"
-#include "chrome/views/controls/throbber.h"
-#include "chrome/views/window/window.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "grit/locale_settings.h"
#include "grit/theme_resources.h"
+#include "views/controls/button/checkbox.h"
+#include "views/controls/combo_box.h"
+#include "views/controls/image_view.h"
+#include "views/controls/label.h"
+#include "views/controls/throbber.h"
+#include "views/window/window.h"
FirstRunCustomizeView::FirstRunCustomizeView(Profile* profile,
ImporterHost* importer_host,
diff --git a/chrome/browser/views/first_run_customize_view.h b/chrome/browser/views/first_run_customize_view.h
index b394254..d7e12b576 100644
--- a/chrome/browser/views/first_run_customize_view.h
+++ b/chrome/browser/views/first_run_customize_view.h
@@ -6,10 +6,10 @@
#define CHROME_BROWSER_VIEWS_FIRST_RUN_CUSTOMIZE_VIEW_H_
#include "chrome/browser/views/first_run_view_base.h"
-#include "chrome/views/controls/button/button.h"
-#include "chrome/views/controls/combo_box.h"
-#include "chrome/views/view.h"
-#include "chrome/views/window/dialog_delegate.h"
+#include "views/controls/button/button.h"
+#include "views/controls/combo_box.h"
+#include "views/view.h"
+#include "views/window/dialog_delegate.h"
namespace views {
class Checkbox;
diff --git a/chrome/browser/views/first_run_view.cc b/chrome/browser/views/first_run_view.cc
index e5e14a5..866b114 100644
--- a/chrome/browser/views/first_run_view.cc
+++ b/chrome/browser/views/first_run_view.cc
@@ -11,16 +11,16 @@
#include "chrome/browser/metrics/user_metrics.h"
#include "chrome/browser/views/first_run_customize_view.h"
#include "chrome/browser/views/standard_layout.h"
-#include "chrome/views/controls/button/checkbox.h"
-#include "chrome/views/controls/image_view.h"
-#include "chrome/views/controls/label.h"
-#include "chrome/views/controls/throbber.h"
-#include "chrome/views/controls/separator.h"
-#include "chrome/views/window/window.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "grit/locale_settings.h"
#include "grit/theme_resources.h"
+#include "views/controls/button/checkbox.h"
+#include "views/controls/image_view.h"
+#include "views/controls/label.h"
+#include "views/controls/throbber.h"
+#include "views/controls/separator.h"
+#include "views/window/window.h"
namespace {
diff --git a/chrome/browser/views/first_run_view.h b/chrome/browser/views/first_run_view.h
index 267756b..54f8515 100644
--- a/chrome/browser/views/first_run_view.h
+++ b/chrome/browser/views/first_run_view.h
@@ -7,9 +7,9 @@
#include "chrome/browser/views/first_run_view_base.h"
#include "chrome/browser/views/first_run_customize_view.h"
-#include "chrome/views/controls/link.h"
-#include "chrome/views/view.h"
-#include "chrome/views/window/dialog_delegate.h"
+#include "views/controls/link.h"
+#include "views/view.h"
+#include "views/window/dialog_delegate.h"
namespace views {
class Label;
diff --git a/chrome/browser/views/first_run_view_base.cc b/chrome/browser/views/first_run_view_base.cc
index cba6080..5a3788a 100644
--- a/chrome/browser/views/first_run_view_base.cc
+++ b/chrome/browser/views/first_run_view_base.cc
@@ -18,17 +18,17 @@
#include "chrome/common/chrome_switches.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/pref_service.h"
-#include "chrome/views/background.h"
-#include "chrome/views/controls/button/checkbox.h"
-#include "chrome/views/controls/image_view.h"
-#include "chrome/views/controls/label.h"
-#include "chrome/views/controls/throbber.h"
-#include "chrome/views/controls/separator.h"
-#include "chrome/views/window/client_view.h"
-#include "chrome/views/window/window.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
+#include "views/background.h"
+#include "views/controls/button/checkbox.h"
+#include "views/controls/image_view.h"
+#include "views/controls/label.h"
+#include "views/controls/throbber.h"
+#include "views/controls/separator.h"
+#include "views/window/client_view.h"
+#include "views/window/window.h"
FirstRunViewBase::FirstRunViewBase(Profile* profile)
: preferred_width_(0),
diff --git a/chrome/browser/views/first_run_view_base.h b/chrome/browser/views/first_run_view_base.h
index 365f6dd..2e19947 100644
--- a/chrome/browser/views/first_run_view_base.h
+++ b/chrome/browser/views/first_run_view_base.h
@@ -6,8 +6,8 @@
#define CHROME_BROWSER_VIEWS_FIRST_RUN_VIEW_BASE_H_
#include "chrome/browser/importer/importer.h"
-#include "chrome/views/view.h"
-#include "chrome/views/window/dialog_delegate.h"
+#include "views/view.h"
+#include "views/window/dialog_delegate.h"
namespace views {
class Checkbox;
diff --git a/chrome/browser/views/frame/browser_frame.cc b/chrome/browser/views/frame/browser_frame.cc
index f8e0ed3..60187d8 100644
--- a/chrome/browser/views/frame/browser_frame.cc
+++ b/chrome/browser/views/frame/browser_frame.cc
@@ -14,8 +14,8 @@
#include "chrome/browser/views/frame/glass_browser_frame_view.h"
#include "chrome/browser/views/frame/opaque_browser_frame_view.h"
#include "chrome/common/win_util.h"
-#include "chrome/views/window/window_delegate.h"
#include "grit/theme_resources.h"
+#include "views/window/window_delegate.h"
// static
static const int kClientEdgeThickness = 3;
diff --git a/chrome/browser/views/frame/browser_frame.h b/chrome/browser/views/frame/browser_frame.h
index f90451a..140f25e 100644
--- a/chrome/browser/views/frame/browser_frame.h
+++ b/chrome/browser/views/frame/browser_frame.h
@@ -5,7 +5,7 @@
#ifndef CHROME_BROWSER_VIEWS_FRAME_BROWSER_FRAME_
#define CHROME_BROWSER_VIEWS_FRAME_BROWSER_FRAME_
-#include "chrome/views/window/window_win.h"
+#include "views/window/window_win.h"
class AeroGlassNonClientView;
class BrowserView;
diff --git a/chrome/browser/views/frame/browser_root_view.h b/chrome/browser/views/frame/browser_root_view.h
index 9753a17..a0460793 100644
--- a/chrome/browser/views/frame/browser_root_view.h
+++ b/chrome/browser/views/frame/browser_root_view.h
@@ -5,7 +5,7 @@
#ifndef CHROME_BROWSER_VIEWS_FRAME_BROWSER_ROOT_VIEW_H
#define CHROME_BROWSER_VIEWS_FRAME_BROWSER_ROOT_VIEW_H
-#include "chrome/views/widget/root_view.h"
+#include "views/widget/root_view.h"
class OSExchangeData;
class TabStrip;
diff --git a/chrome/browser/views/frame/browser_view.cc b/chrome/browser/views/frame/browser_view.cc
index 694c109..90c6d3a 100644
--- a/chrome/browser/views/frame/browser_view.cc
+++ b/chrome/browser/views/frame/browser_view.cc
@@ -55,16 +55,16 @@
#include "chrome/common/pref_names.h"
#include "chrome/common/pref_service.h"
#include "chrome/common/win_util.h"
-#include "chrome/views/controls/scrollbar/native_scroll_bar.h"
-#include "chrome/views/fill_layout.h"
-#include "chrome/views/view.h"
-#include "chrome/views/widget/root_view.h"
-#include "chrome/views/window/non_client_view.h"
-#include "chrome/views/window/window_win.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
#include "grit/webkit_resources.h"
+#include "views/controls/scrollbar/native_scroll_bar.h"
+#include "views/fill_layout.h"
+#include "views/view.h"
+#include "views/widget/root_view.h"
+#include "views/window/non_client_view.h"
+#include "views/window/window_win.h"
using base::TimeDelta;
diff --git a/chrome/browser/views/frame/browser_view.h b/chrome/browser/views/frame/browser_view.h
index a636883..3146ade 100644
--- a/chrome/browser/views/frame/browser_view.h
+++ b/chrome/browser/views/frame/browser_view.h
@@ -11,8 +11,8 @@
#include "chrome/browser/hang_monitor/hung_window_detector.h"
#include "chrome/browser/tabs/tab_strip_model.h"
#include "chrome/browser/views/frame/browser_frame.h"
-#include "chrome/views/window/client_view.h"
-#include "chrome/views/window/window_delegate.h"
+#include "views/window/client_view.h"
+#include "views/window/window_delegate.h"
// NOTE: For more information about the objects and files in this directory,
// view: http://dev.chromium.org/developers/design-documents/browser-window
diff --git a/chrome/browser/views/frame/glass_browser_frame_view.cc b/chrome/browser/views/frame/glass_browser_frame_view.cc
index 49488ba..bbebd3a 100644
--- a/chrome/browser/views/frame/glass_browser_frame_view.cc
+++ b/chrome/browser/views/frame/glass_browser_frame_view.cc
@@ -8,9 +8,9 @@
#include "app/resource_bundle.h"
#include "chrome/browser/views/frame/browser_view.h"
#include "chrome/browser/views/tabs/tab_strip.h"
-#include "chrome/views/window/client_view.h"
-#include "chrome/views/window/window_resources.h"
#include "grit/theme_resources.h"
+#include "views/window/client_view.h"
+#include "views/window/window_resources.h"
// An enumeration of bitmap resources used by this window.
enum {
diff --git a/chrome/browser/views/frame/glass_browser_frame_view.h b/chrome/browser/views/frame/glass_browser_frame_view.h
index b6aa5f9..d110fe9 100644
--- a/chrome/browser/views/frame/glass_browser_frame_view.h
+++ b/chrome/browser/views/frame/glass_browser_frame_view.h
@@ -6,8 +6,8 @@
#define CHROME_BROWSER_VIEWS_FRAME_GLASS_BROWSER_FRAME_VIEW_H_
#include "chrome/browser/views/frame/browser_frame.h"
-#include "chrome/views/controls/button/button.h"
-#include "chrome/views/window/non_client_view.h"
+#include "views/controls/button/button.h"
+#include "views/window/non_client_view.h"
class BrowserView;
class GlassBrowserWindowResources;
diff --git a/chrome/browser/views/frame/opaque_browser_frame_view.cc b/chrome/browser/views/frame/opaque_browser_frame_view.cc
index 4958b13..a132119 100644
--- a/chrome/browser/views/frame/opaque_browser_frame_view.cc
+++ b/chrome/browser/views/frame/opaque_browser_frame_view.cc
@@ -13,12 +13,12 @@
#include "chrome/browser/views/frame/browser_view.h"
#include "chrome/browser/views/tabs/tab_strip.h"
#include "chrome/common/win_util.h"
-#include "chrome/views/controls/button/image_button.h"
-#include "chrome/views/widget/root_view.h"
-#include "chrome/views/window/window_resources.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
+#include "views/controls/button/image_button.h"
+#include "views/widget/root_view.h"
+#include "views/window/window_resources.h"
// An enumeration of bitmap resources used by this window.
enum {
diff --git a/chrome/browser/views/frame/opaque_browser_frame_view.h b/chrome/browser/views/frame/opaque_browser_frame_view.h
index 88d44e4..1e917e9 100644
--- a/chrome/browser/views/frame/opaque_browser_frame_view.h
+++ b/chrome/browser/views/frame/opaque_browser_frame_view.h
@@ -7,8 +7,8 @@
#include "chrome/browser/views/frame/browser_frame.h"
#include "chrome/browser/views/tab_icon_view.h"
-#include "chrome/views/controls/button/button.h"
-#include "chrome/views/window/non_client_view.h"
+#include "views/controls/button/button.h"
+#include "views/window/non_client_view.h"
class BrowserView;
class ChromeFont;
diff --git a/chrome/browser/views/fullscreen_exit_bubble.cc b/chrome/browser/views/fullscreen_exit_bubble.cc
index ad534f5..ff491a0 100644
--- a/chrome/browser/views/fullscreen_exit_bubble.cc
+++ b/chrome/browser/views/fullscreen_exit_bubble.cc
@@ -9,8 +9,8 @@
#include "app/l10n_util_win.h"
#include "app/resource_bundle.h"
#include "chrome/app/chrome_dll_resource.h"
-#include "chrome/views/widget/root_view.h"
#include "grit/generated_resources.h"
+#include "views/widget/root_view.h"
// FullscreenExitView ----------------------------------------------------------
diff --git a/chrome/browser/views/fullscreen_exit_bubble.h b/chrome/browser/views/fullscreen_exit_bubble.h
index 59825d3..dca2cb8 100644
--- a/chrome/browser/views/fullscreen_exit_bubble.h
+++ b/chrome/browser/views/fullscreen_exit_bubble.h
@@ -8,8 +8,8 @@
#include "app/slide_animation.h"
#include "base/scoped_ptr.h"
#include "chrome/browser/command_updater.h"
-#include "chrome/views/controls/link.h"
-#include "chrome/views/widget/widget_win.h"
+#include "views/controls/link.h"
+#include "views/widget/widget_win.h"
// FullscreenExitBubble is responsible for showing a bubble atop the screen in
// fullscreen mode, telling users how to exit and providing a click target.
diff --git a/chrome/browser/views/go_button.h b/chrome/browser/views/go_button.h
index 61b528e..818999c 100644
--- a/chrome/browser/views/go_button.h
+++ b/chrome/browser/views/go_button.h
@@ -7,7 +7,7 @@
#include "base/basictypes.h"
#include "base/task.h"
-#include "chrome/views/controls/button/image_button.h"
+#include "views/controls/button/image_button.h"
class Browser;
class LocationBarView;
diff --git a/chrome/browser/views/html_dialog_view.cc b/chrome/browser/views/html_dialog_view.cc
index 4a30c10..1e9569c 100644
--- a/chrome/browser/views/html_dialog_view.cc
+++ b/chrome/browser/views/html_dialog_view.cc
@@ -6,8 +6,8 @@
#include "chrome/browser/browser.h"
#include "chrome/browser/tab_contents/tab_contents.h"
-#include "chrome/views/widget/root_view.h"
-#include "chrome/views/window/window.h"
+#include "views/widget/root_view.h"
+#include "views/window/window.h"
////////////////////////////////////////////////////////////////////////////////
// HtmlDialogView, public:
diff --git a/chrome/browser/views/html_dialog_view.h b/chrome/browser/views/html_dialog_view.h
index 0043252..d9edf50 100644
--- a/chrome/browser/views/html_dialog_view.h
+++ b/chrome/browser/views/html_dialog_view.h
@@ -11,7 +11,7 @@
#include "chrome/browser/dom_ui/html_dialog_ui.h"
#include "chrome/browser/tab_contents/tab_contents_delegate.h"
#include "chrome/browser/views/dom_view.h"
-#include "chrome/views/window/window_delegate.h"
+#include "views/window/window_delegate.h"
class Browser;
namespace views {
diff --git a/chrome/browser/views/hung_renderer_view.cc b/chrome/browser/views/hung_renderer_view.cc
index 593b312..bb13f3e 100644
--- a/chrome/browser/views/hung_renderer_view.cc
+++ b/chrome/browser/views/hung_renderer_view.cc
@@ -14,17 +14,17 @@
#include "chrome/common/chrome_constants.h"
#include "chrome/common/logging_chrome.h"
#include "chrome/common/result_codes.h"
-#include "chrome/views/grid_layout.h"
-#include "chrome/views/controls/button/native_button.h"
-#include "chrome/views/controls/image_view.h"
-#include "chrome/views/controls/label.h"
-#include "chrome/views/controls/table/group_table_view.h"
-#include "chrome/views/window/client_view.h"
-#include "chrome/views/window/dialog_delegate.h"
-#include "chrome/views/window/window.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
+#include "views/grid_layout.h"
+#include "views/controls/button/native_button.h"
+#include "views/controls/image_view.h"
+#include "views/controls/label.h"
+#include "views/controls/table/group_table_view.h"
+#include "views/window/client_view.h"
+#include "views/window/dialog_delegate.h"
+#include "views/window/window.h"
class HungRendererDialogView;
diff --git a/chrome/browser/views/hwnd_html_view.cc b/chrome/browser/views/hwnd_html_view.cc
index 6856f57..bbda2c3 100644
--- a/chrome/browser/views/hwnd_html_view.cc
+++ b/chrome/browser/views/hwnd_html_view.cc
@@ -8,8 +8,8 @@
#include "chrome/browser/renderer_host/render_widget_host_view_win.h"
#include "chrome/browser/renderer_host/render_view_host_delegate.h"
#include "chrome/browser/tab_contents/site_instance.h"
-#include "chrome/views/widget/widget.h"
-#include "chrome/views/widget/widget_win.h"
+#include "views/widget/widget.h"
+#include "views/widget/widget_win.h"
HWNDHtmlView::HWNDHtmlView(const GURL& content_url,
RenderViewHostDelegate* delegate,
diff --git a/chrome/browser/views/hwnd_html_view.h b/chrome/browser/views/hwnd_html_view.h
index 275c891..699b67f 100644
--- a/chrome/browser/views/hwnd_html_view.h
+++ b/chrome/browser/views/hwnd_html_view.h
@@ -6,8 +6,8 @@
#define CHROME_BROWSER_VIEWS_HWND_HTML_VIEW_H_
#include "googleurl/src/gurl.h"
-#include "chrome/views/controls/hwnd_view.h"
#include "skia/include/SkBitmap.h"
+#include "views/controls/hwnd_view.h"
class RenderViewHost;
class RenderViewHostDelegate;
diff --git a/chrome/browser/views/importer_lock_view.cc b/chrome/browser/views/importer_lock_view.cc
index e1224d4..e2fc249 100644
--- a/chrome/browser/views/importer_lock_view.cc
+++ b/chrome/browser/views/importer_lock_view.cc
@@ -7,11 +7,11 @@
#include "app/l10n_util.h"
#include "chrome/browser/importer/importer.h"
#include "chrome/browser/views/standard_layout.h"
-#include "chrome/views/controls/label.h"
-#include "chrome/views/window/window.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "grit/locale_settings.h"
+#include "views/controls/label.h"
+#include "views/window/window.h"
using views::ColumnSet;
using views::GridLayout;
diff --git a/chrome/browser/views/importer_lock_view.h b/chrome/browser/views/importer_lock_view.h
index 7b17e78..337b381 100644
--- a/chrome/browser/views/importer_lock_view.h
+++ b/chrome/browser/views/importer_lock_view.h
@@ -5,8 +5,8 @@
#ifndef CHROME_BROWSER_VIEWS_IMPORTER_LOCK_VIEW_H__
#define CHROME_BROWSER_VIEWS_IMPORTER_LOCK_VIEW_H__
-#include "chrome/views/view.h"
-#include "chrome/views/window/dialog_delegate.h"
+#include "views/view.h"
+#include "views/window/dialog_delegate.h"
namespace views {
class Label;
diff --git a/chrome/browser/views/importer_view.cc b/chrome/browser/views/importer_view.cc
index baa7387..7f03c3b 100644
--- a/chrome/browser/views/importer_view.cc
+++ b/chrome/browser/views/importer_view.cc
@@ -7,12 +7,12 @@
#include "app/l10n_util.h"
#include "chrome/browser/browser_list.h"
#include "chrome/browser/views/standard_layout.h"
-#include "chrome/views/controls/button/checkbox.h"
-#include "chrome/views/controls/label.h"
-#include "chrome/views/grid_layout.h"
-#include "chrome/views/window/window.h"
#include "grit/generated_resources.h"
#include "grit/locale_settings.h"
+#include "views/controls/button/checkbox.h"
+#include "views/controls/label.h"
+#include "views/grid_layout.h"
+#include "views/window/window.h"
using views::ColumnSet;
using views::GridLayout;
diff --git a/chrome/browser/views/importer_view.h b/chrome/browser/views/importer_view.h
index 903764f..7ce6f62 100644
--- a/chrome/browser/views/importer_view.h
+++ b/chrome/browser/views/importer_view.h
@@ -6,10 +6,10 @@
#define CHROME_BROWSER_VIEWS_IMPORTER_VIEW_H__
#include "chrome/browser/importer/importer.h"
-#include "chrome/views/controls/button/native_button.h"
-#include "chrome/views/controls/combo_box.h"
-#include "chrome/views/view.h"
-#include "chrome/views/window/dialog_delegate.h"
+#include "views/controls/button/native_button.h"
+#include "views/controls/combo_box.h"
+#include "views/view.h"
+#include "views/window/dialog_delegate.h"
namespace views {
class Checkbox;
diff --git a/chrome/browser/views/importing_progress_view.cc b/chrome/browser/views/importing_progress_view.cc
index b2b41d0..2c917d2 100644
--- a/chrome/browser/views/importing_progress_view.cc
+++ b/chrome/browser/views/importing_progress_view.cc
@@ -6,13 +6,13 @@
#include "app/l10n_util.h"
#include "chrome/browser/views/standard_layout.h"
-#include "chrome/views/grid_layout.h"
-#include "chrome/views/controls/label.h"
-#include "chrome/views/controls/throbber.h"
-#include "chrome/views/window/window.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "grit/locale_settings.h"
+#include "views/grid_layout.h"
+#include "views/controls/label.h"
+#include "views/controls/throbber.h"
+#include "views/window/window.h"
////////////////////////////////////////////////////////////////////////////////
// ImportingProgressView, public:
diff --git a/chrome/browser/views/importing_progress_view.h b/chrome/browser/views/importing_progress_view.h
index 3de6cfc..da3afbd 100644
--- a/chrome/browser/views/importing_progress_view.h
+++ b/chrome/browser/views/importing_progress_view.h
@@ -6,9 +6,9 @@
#define CHROME_BROWSER_VIEWS_IMPORTING_PROGRESS_VIEW_H_
#include "chrome/browser/importer/importer.h"
-#include "chrome/views/view.h"
-#include "chrome/views/window/dialog_delegate.h"
-#include "chrome/views/window/window.h"
+#include "views/view.h"
+#include "views/window/dialog_delegate.h"
+#include "views/window/window.h"
namespace views {
class CheckmarkThrobber;
diff --git a/chrome/browser/views/info_bubble.cc b/chrome/browser/views/info_bubble.cc
index 38e36f75..674141c 100644
--- a/chrome/browser/views/info_bubble.cc
+++ b/chrome/browser/views/info_bubble.cc
@@ -13,9 +13,9 @@
#include "chrome/common/notification_service.h"
#include "chrome/common/notification_type.h"
#include "chrome/common/win_util.h"
-#include "chrome/views/widget/root_view.h"
-#include "chrome/views/window/window.h"
#include "grit/theme_resources.h"
+#include "views/widget/root_view.h"
+#include "views/window/window.h"
using views::View;
diff --git a/chrome/browser/views/info_bubble.h b/chrome/browser/views/info_bubble.h
index 235a2b6..7368235 100644
--- a/chrome/browser/views/info_bubble.h
+++ b/chrome/browser/views/info_bubble.h
@@ -6,8 +6,8 @@
#define CHROME_BROWSER_VIEWS_INFO_BUBBLE_H_
#include "app/slide_animation.h"
-#include "chrome/views/view.h"
-#include "chrome/views/widget/widget_win.h"
+#include "views/view.h"
+#include "views/widget/widget_win.h"
// InfoBubble is used to display an arbitrary view above all other windows.
// Think of InfoBubble as a tooltip that allows you to embed an arbitrary view
diff --git a/chrome/browser/views/infobars/infobar_container.h b/chrome/browser/views/infobars/infobar_container.h
index dba3149..6cf02fa 100644
--- a/chrome/browser/views/infobars/infobar_container.h
+++ b/chrome/browser/views/infobars/infobar_container.h
@@ -6,7 +6,7 @@
#define CHROME_BROWSER_VIEWS_INFOBARS_INFOBAR_CONTAINER_H_
#include "chrome/common/notification_observer.h"
-#include "chrome/views/view.h"
+#include "views/view.h"
class BrowserView;
class InfoBarDelegate;
diff --git a/chrome/browser/views/infobars/infobars.cc b/chrome/browser/views/infobars/infobars.cc
index c22fa5c..4a04040 100644
--- a/chrome/browser/views/infobars/infobars.cc
+++ b/chrome/browser/views/infobars/infobars.cc
@@ -11,15 +11,15 @@
#include "base/message_loop.h"
#include "chrome/browser/views/event_utils.h"
#include "chrome/browser/views/infobars/infobar_container.h"
-#include "chrome/views/background.h"
-#include "chrome/views/controls/button/image_button.h"
-#include "chrome/views/controls/button/native_button.h"
-#include "chrome/views/controls/image_view.h"
-#include "chrome/views/controls/label.h"
-#include "chrome/views/focus/external_focus_tracker.h"
-#include "chrome/views/widget/widget.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
+#include "views/background.h"
+#include "views/controls/button/image_button.h"
+#include "views/controls/button/native_button.h"
+#include "views/controls/image_view.h"
+#include "views/controls/label.h"
+#include "views/focus/external_focus_tracker.h"
+#include "views/widget/widget.h"
// static
const double InfoBar::kTargetHeight = 37.0;
diff --git a/chrome/browser/views/infobars/infobars.h b/chrome/browser/views/infobars/infobars.h
index 2daefa9..4b468a8 100644
--- a/chrome/browser/views/infobars/infobars.h
+++ b/chrome/browser/views/infobars/infobars.h
@@ -7,8 +7,8 @@
#include "app/animation.h"
#include "chrome/browser/tab_contents/infobar_delegate.h"
-#include "chrome/views/controls/button/button.h"
-#include "chrome/views/controls/link.h"
+#include "views/controls/button/button.h"
+#include "views/controls/link.h"
class InfoBarContainer;
class SlideAnimation;
diff --git a/chrome/browser/views/jsmessage_box_dialog.cc b/chrome/browser/views/jsmessage_box_dialog.cc
index fab95a4..336a427 100644
--- a/chrome/browser/views/jsmessage_box_dialog.cc
+++ b/chrome/browser/views/jsmessage_box_dialog.cc
@@ -8,9 +8,9 @@
#include "app/message_box_flags.h"
#include "chrome/browser/app_modal_dialog.h"
#include "chrome/browser/tab_contents/tab_contents.h"
-#include "chrome/views/controls/message_box_view.h"
-#include "chrome/views/window/window.h"
#include "grit/generated_resources.h"
+#include "views/controls/message_box_view.h"
+#include "views/window/window.h"
JavascriptMessageBoxDialog::JavascriptMessageBoxDialog(
AppModalDialog* parent,
diff --git a/chrome/browser/views/jsmessage_box_dialog.h b/chrome/browser/views/jsmessage_box_dialog.h
index cd64c9a..41f7e31 100644
--- a/chrome/browser/views/jsmessage_box_dialog.h
+++ b/chrome/browser/views/jsmessage_box_dialog.h
@@ -8,7 +8,7 @@
#include <string>
#include "chrome/browser/app_modal_dialog.h"
-#include "chrome/views/window/dialog_delegate.h"
+#include "views/window/dialog_delegate.h"
class MessageBoxView;
class TabContents;
diff --git a/chrome/browser/views/keyword_editor_view.cc b/chrome/browser/views/keyword_editor_view.cc
index f650ba2..bfb90dc 100644
--- a/chrome/browser/views/keyword_editor_view.cc
+++ b/chrome/browser/views/keyword_editor_view.cc
@@ -20,18 +20,18 @@
#include "chrome/browser/views/standard_layout.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/pref_service.h"
-#include "chrome/views/background.h"
-#include "chrome/views/grid_layout.h"
-#include "chrome/views/controls/button/native_button.h"
-#include "chrome/views/controls/text_field.h"
-#include "chrome/views/widget/widget.h"
-#include "chrome/views/window/dialog_delegate.h"
-#include "chrome/views/window/window.h"
#include "googleurl/src/gurl.h"
#include "grit/generated_resources.h"
#include "grit/locale_settings.h"
#include "grit/theme_resources.h"
#include "skia/include/SkBitmap.h"
+#include "views/background.h"
+#include "views/grid_layout.h"
+#include "views/controls/button/native_button.h"
+#include "views/controls/text_field.h"
+#include "views/widget/widget.h"
+#include "views/window/dialog_delegate.h"
+#include "views/window/window.h"
using views::GridLayout;
using views::NativeButton;
diff --git a/chrome/browser/views/keyword_editor_view.h b/chrome/browser/views/keyword_editor_view.h
index 7d2a95f..ef8b456 100644
--- a/chrome/browser/views/keyword_editor_view.h
+++ b/chrome/browser/views/keyword_editor_view.h
@@ -9,10 +9,10 @@
#include <map>
#include "chrome/browser/search_engines/template_url_model.h"
-#include "chrome/views/controls/button/button.h"
-#include "chrome/views/controls/table/table_view.h"
-#include "chrome/views/view.h"
-#include "chrome/views/window/dialog_delegate.h"
+#include "views/controls/button/button.h"
+#include "views/controls/table/table_view.h"
+#include "views/view.h"
+#include "views/window/dialog_delegate.h"
namespace views {
class Label;
diff --git a/chrome/browser/views/location_bar_view.cc b/chrome/browser/views/location_bar_view.cc
index 61a409f..7683626 100644
--- a/chrome/browser/views/location_bar_view.cc
+++ b/chrome/browser/views/location_bar_view.cc
@@ -27,12 +27,12 @@
#include "chrome/browser/views/first_run_bubble.h"
#include "chrome/browser/views/page_info_window.h"
#include "chrome/common/win_util.h"
-#include "chrome/views/background.h"
-#include "chrome/views/border.h"
-#include "chrome/views/widget/root_view.h"
-#include "chrome/views/widget/widget.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
+#include "views/background.h"
+#include "views/border.h"
+#include "views/widget/root_view.h"
+#include "views/widget/widget.h"
using views::View;
diff --git a/chrome/browser/views/location_bar_view.h b/chrome/browser/views/location_bar_view.h
index 6d690d0..a6ea987 100644
--- a/chrome/browser/views/location_bar_view.h
+++ b/chrome/browser/views/location_bar_view.h
@@ -17,10 +17,10 @@
#include "chrome/browser/tab_contents/tab_contents.h"
#include "chrome/browser/toolbar_model.h"
#include "chrome/browser/views/info_bubble.h"
-#include "chrome/views/controls/hwnd_view.h"
-#include "chrome/views/controls/image_view.h"
-#include "chrome/views/controls/label.h"
-#include "chrome/views/painter.h"
+#include "views/controls/hwnd_view.h"
+#include "views/controls/image_view.h"
+#include "views/controls/label.h"
+#include "views/painter.h"
class AutocompletePopupPositioner;
class CommandUpdater;
diff --git a/chrome/browser/views/login_view.cc b/chrome/browser/views/login_view.cc
index cef889a..150e447 100644
--- a/chrome/browser/views/login_view.cc
+++ b/chrome/browser/views/login_view.cc
@@ -9,11 +9,11 @@
#include "app/l10n_util.h"
#include "base/message_loop.h"
#include "chrome/browser/views/standard_layout.h"
-#include "chrome/views/grid_layout.h"
-#include "chrome/views/controls/label.h"
-#include "chrome/views/controls/text_field.h"
-#include "chrome/views/widget/root_view.h"
#include "grit/generated_resources.h"
+#include "views/grid_layout.h"
+#include "views/controls/label.h"
+#include "views/controls/text_field.h"
+#include "views/widget/root_view.h"
namespace views {
diff --git a/chrome/browser/views/login_view.h b/chrome/browser/views/login_view.h
index 36e2591..fa0a837 100644
--- a/chrome/browser/views/login_view.h
+++ b/chrome/browser/views/login_view.h
@@ -6,7 +6,7 @@
#define CHROME_BROWSER_VIEWS_LOGIN_VIEW_H__
#include "base/task.h"
-#include "chrome/views/view.h"
+#include "views/view.h"
namespace views {
class Label;
diff --git a/chrome/browser/views/new_profile_dialog.cc b/chrome/browser/views/new_profile_dialog.cc
index 1c5faa6..9b3b5fa 100644
--- a/chrome/browser/views/new_profile_dialog.cc
+++ b/chrome/browser/views/new_profile_dialog.cc
@@ -11,13 +11,13 @@
#include "base/logging.h"
#include "base/file_util.h"
#include "chrome/browser/user_data_manager.h"
-#include "chrome/views/controls/message_box_view.h"
-#include "chrome/views/controls/text_field.h"
-#include "chrome/views/view.h"
-#include "chrome/views/window/window.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "grit/locale_settings.h"
+#include "views/controls/message_box_view.h"
+#include "views/controls/text_field.h"
+#include "views/view.h"
+#include "views/window/window.h"
// static
void NewProfileDialog::RunDialog() {
diff --git a/chrome/browser/views/new_profile_dialog.h b/chrome/browser/views/new_profile_dialog.h
index 4564ec2..863b2ad 100644
--- a/chrome/browser/views/new_profile_dialog.h
+++ b/chrome/browser/views/new_profile_dialog.h
@@ -11,8 +11,8 @@
#include "base/basictypes.h"
#include "base/message_loop.h"
#include "chrome/browser/shell_dialogs.h"
-#include "chrome/views/controls/text_field.h"
-#include "chrome/views/window/dialog_delegate.h"
+#include "views/controls/text_field.h"
+#include "views/window/dialog_delegate.h"
class MessageBoxView;
namespace views {
diff --git a/chrome/browser/views/options/advanced_contents_view.cc b/chrome/browser/views/options/advanced_contents_view.cc
index c3ef712..fb2862b 100644
--- a/chrome/browser/views/options/advanced_contents_view.cc
+++ b/chrome/browser/views/options/advanced_contents_view.cc
@@ -33,17 +33,17 @@
#include "chrome/common/pref_member.h"
#include "chrome/common/pref_names.h"
#include "chrome/installer/util/google_update_settings.h"
-#include "chrome/views/background.h"
-#include "chrome/views/controls/button/checkbox.h"
-#include "chrome/views/controls/combo_box.h"
-#include "chrome/views/controls/scroll_view.h"
-#include "chrome/views/grid_layout.h"
-#include "chrome/views/widget/widget.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "grit/locale_settings.h"
#include "net/base/ssl_config_service.h"
#include "net/base/cookie_policy.h"
+#include "views/background.h"
+#include "views/controls/button/checkbox.h"
+#include "views/controls/combo_box.h"
+#include "views/controls/scroll_view.h"
+#include "views/grid_layout.h"
+#include "views/widget/widget.h"
using views::GridLayout;
using views::ColumnSet;
diff --git a/chrome/browser/views/options/advanced_page_view.cc b/chrome/browser/views/options/advanced_page_view.cc
index 5e84ef3e..7b0e1c9 100644
--- a/chrome/browser/views/options/advanced_page_view.cc
+++ b/chrome/browser/views/options/advanced_page_view.cc
@@ -14,15 +14,15 @@
#include "chrome/common/chrome_constants.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/pref_service.h"
-#include "chrome/views/controls/message_box_view.h"
-#include "chrome/views/controls/button/native_button.h"
-#include "chrome/views/controls/scroll_view.h"
-#include "chrome/views/grid_layout.h"
-#include "chrome/views/window/dialog_delegate.h"
-#include "chrome/views/window/window.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "grit/locale_settings.h"
+#include "views/controls/message_box_view.h"
+#include "views/controls/button/native_button.h"
+#include "views/controls/scroll_view.h"
+#include "views/grid_layout.h"
+#include "views/window/dialog_delegate.h"
+#include "views/window/window.h"
namespace {
diff --git a/chrome/browser/views/options/advanced_page_view.h b/chrome/browser/views/options/advanced_page_view.h
index 1a9119e..63f0ede 100644
--- a/chrome/browser/views/options/advanced_page_view.h
+++ b/chrome/browser/views/options/advanced_page_view.h
@@ -6,7 +6,7 @@
#define CHROME_BROWSER_VIEWS_OPTIONS_ADVANCED_PAGE_VIEW_H_
#include "chrome/browser/views/options/options_page_view.h"
-#include "chrome/views/controls/button/button.h"
+#include "views/controls/button/button.h"
class AdvancedOptionsListModel;
class AdvancedScrollViewContainer;
diff --git a/chrome/browser/views/options/content_page_view.cc b/chrome/browser/views/options/content_page_view.cc
index f289f09..955ea3e 100644
--- a/chrome/browser/views/options/content_page_view.cc
+++ b/chrome/browser/views/options/content_page_view.cc
@@ -22,14 +22,14 @@
#include "chrome/browser/views/standard_layout.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/pref_service.h"
-#include "chrome/views/controls/button/radio_button.h"
-#include "chrome/views/controls/text_field.h"
-#include "chrome/views/grid_layout.h"
-#include "chrome/views/widget/widget.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
#include "skia/ext/skia_utils_win.h"
#include "skia/include/SkBitmap.h"
+#include "views/controls/button/radio_button.h"
+#include "views/controls/text_field.h"
+#include "views/grid_layout.h"
+#include "views/widget/widget.h"
namespace {
diff --git a/chrome/browser/views/options/content_page_view.h b/chrome/browser/views/options/content_page_view.h
index 7102f63..7d96e00 100644
--- a/chrome/browser/views/options/content_page_view.h
+++ b/chrome/browser/views/options/content_page_view.h
@@ -8,8 +8,8 @@
#include "chrome/browser/views/options/options_page_view.h"
#include "chrome/browser/shell_dialogs.h"
#include "chrome/common/pref_member.h"
-#include "chrome/views/controls/button/button.h"
-#include "chrome/views/view.h"
+#include "views/controls/button/button.h"
+#include "views/view.h"
namespace views {
class Checkbox;
diff --git a/chrome/browser/views/options/cookies_view.cc b/chrome/browser/views/options/cookies_view.cc
index b539aec..012e6ab 100644
--- a/chrome/browser/views/options/cookies_view.cc
+++ b/chrome/browser/views/options/cookies_view.cc
@@ -15,17 +15,17 @@
#include "chrome/browser/views/standard_layout.h"
#include "chrome/common/gfx/color_utils.h"
#include "chrome/common/win_util.h"
-#include "chrome/views/border.h"
-#include "chrome/views/grid_layout.h"
-#include "chrome/views/controls/label.h"
-#include "chrome/views/controls/button/native_button.h"
-#include "chrome/views/controls/text_field.h"
-#include "chrome/views/controls/table/table_view.h"
#include "grit/generated_resources.h"
#include "grit/locale_settings.h"
#include "grit/theme_resources.h"
#include "net/base/cookie_monster.h"
#include "net/url_request/url_request_context.h"
+#include "views/border.h"
+#include "views/grid_layout.h"
+#include "views/controls/label.h"
+#include "views/controls/button/native_button.h"
+#include "views/controls/text_field.h"
+#include "views/controls/table/table_view.h"
// static
views::Window* CookiesView::instance_ = NULL;
diff --git a/chrome/browser/views/options/cookies_view.h b/chrome/browser/views/options/cookies_view.h
index c05bce7..f2bc98a 100644
--- a/chrome/browser/views/options/cookies_view.h
+++ b/chrome/browser/views/options/cookies_view.h
@@ -6,12 +6,12 @@
#define CHROME_BROWSER_VIEWS_OPTIONS_COOKIES_VIEW_H_
#include "base/task.h"
-#include "chrome/views/controls/button/button.h"
-#include "chrome/views/controls/table/table_view.h"
-#include "chrome/views/controls/text_field.h"
-#include "chrome/views/view.h"
-#include "chrome/views/window/dialog_delegate.h"
-#include "chrome/views/window/window.h"
+#include "views/controls/button/button.h"
+#include "views/controls/table/table_view.h"
+#include "views/controls/text_field.h"
+#include "views/view.h"
+#include "views/window/dialog_delegate.h"
+#include "views/window/window.h"
namespace views {
class Label;
diff --git a/chrome/browser/views/options/exceptions_page_view.cc b/chrome/browser/views/options/exceptions_page_view.cc
index 65c38f9..6492640 100644
--- a/chrome/browser/views/options/exceptions_page_view.cc
+++ b/chrome/browser/views/options/exceptions_page_view.cc
@@ -10,10 +10,10 @@
#include "chrome/browser/views/standard_layout.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/pref_service.h"
-#include "chrome/views/background.h"
-#include "chrome/views/controls/button/native_button.h"
-#include "chrome/views/grid_layout.h"
#include "grit/generated_resources.h"
+#include "views/background.h"
+#include "views/controls/button/native_button.h"
+#include "views/grid_layout.h"
using views::ColumnSet;
using views::GridLayout;
diff --git a/chrome/browser/views/options/fonts_languages_window_view.cc b/chrome/browser/views/options/fonts_languages_window_view.cc
index 6219f87..cf26d1f 100644
--- a/chrome/browser/views/options/fonts_languages_window_view.cc
+++ b/chrome/browser/views/options/fonts_languages_window_view.cc
@@ -12,10 +12,10 @@
#include "chrome/common/chrome_constants.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/pref_service.h"
-#include "chrome/views/window/window.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "grit/locale_settings.h"
+#include "views/window/window.h"
// static
static FontsLanguagesWindowView* instance_ = NULL;
diff --git a/chrome/browser/views/options/fonts_languages_window_view.h b/chrome/browser/views/options/fonts_languages_window_view.h
index 5d0fae3..e33d74a 100644
--- a/chrome/browser/views/options/fonts_languages_window_view.h
+++ b/chrome/browser/views/options/fonts_languages_window_view.h
@@ -5,10 +5,10 @@
#ifndef CHROME_BROWSER_FONTS_LANGUAGE_WINDOW_H__
#define CHROME_BROWSER_FONTS_LANGUAGE_WINDOW_H__
-#include "chrome/views/controls/tabbed_pane.h"
-#include "chrome/views/view.h"
-#include "chrome/views/window/dialog_delegate.h"
-#include "chrome/views/window/window.h"
+#include "views/controls/tabbed_pane.h"
+#include "views/view.h"
+#include "views/window/dialog_delegate.h"
+#include "views/window/window.h"
class Profile;
class FontsPageView;
diff --git a/chrome/browser/views/options/fonts_page_view.cc b/chrome/browser/views/options/fonts_page_view.cc
index fb1c57a..7e497c0 100644
--- a/chrome/browser/views/options/fonts_page_view.cc
+++ b/chrome/browser/views/options/fonts_page_view.cc
@@ -24,14 +24,14 @@
#include "chrome/browser/views/standard_layout.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/pref_service.h"
-#include "chrome/views/controls/button/native_button.h"
-#include "chrome/views/controls/text_field.h"
-#include "chrome/views/grid_layout.h"
-#include "chrome/views/widget/widget.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
#include "grit/locale_settings.h"
#include "skia/include/SkBitmap.h"
+#include "views/controls/button/native_button.h"
+#include "views/controls/text_field.h"
+#include "views/grid_layout.h"
+#include "views/widget/widget.h"
namespace {
diff --git a/chrome/browser/views/options/fonts_page_view.h b/chrome/browser/views/options/fonts_page_view.h
index a47f9ec..0b54c18 100644
--- a/chrome/browser/views/options/fonts_page_view.h
+++ b/chrome/browser/views/options/fonts_page_view.h
@@ -8,9 +8,9 @@
#include "chrome/browser/views/options/options_page_view.h"
#include "chrome/browser/shell_dialogs.h"
#include "chrome/common/pref_member.h"
-#include "chrome/views/controls/combo_box.h"
-#include "chrome/views/controls/button/button.h"
-#include "chrome/views/view.h"
+#include "views/controls/combo_box.h"
+#include "views/controls/button/button.h"
+#include "views/view.h"
namespace views {
diff --git a/chrome/browser/views/options/general_page_view.cc b/chrome/browser/views/options/general_page_view.cc
index bf7c4a7..505d85a 100644
--- a/chrome/browser/views/options/general_page_view.cc
+++ b/chrome/browser/views/options/general_page_view.cc
@@ -29,15 +29,15 @@
#include "chrome/common/pref_names.h"
#include "chrome/common/pref_service.h"
#include "chrome/common/url_constants.h"
-#include "chrome/views/controls/button/radio_button.h"
-#include "chrome/views/controls/label.h"
-#include "chrome/views/controls/table/table_view.h"
-#include "chrome/views/controls/text_field.h"
-#include "chrome/views/grid_layout.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
#include "skia/include/SkBitmap.h"
+#include "views/controls/button/radio_button.h"
+#include "views/controls/label.h"
+#include "views/controls/table/table_view.h"
+#include "views/controls/text_field.h"
+#include "views/grid_layout.h"
namespace {
diff --git a/chrome/browser/views/options/general_page_view.h b/chrome/browser/views/options/general_page_view.h
index 4887e1b..800cd04 100644
--- a/chrome/browser/views/options/general_page_view.h
+++ b/chrome/browser/views/options/general_page_view.h
@@ -8,9 +8,9 @@
#include "chrome/browser/views/options/options_page_view.h"
#include "chrome/browser/views/shelf_item_dialog.h"
#include "chrome/common/pref_member.h"
-#include "chrome/views/controls/combo_box.h"
-#include "chrome/views/controls/button/button.h"
-#include "chrome/views/view.h"
+#include "views/controls/combo_box.h"
+#include "views/controls/button/button.h"
+#include "views/view.h"
namespace views {
class Checkbox;
diff --git a/chrome/browser/views/options/language_combobox_model.h b/chrome/browser/views/options/language_combobox_model.h
index a3dfac6..c102902 100644
--- a/chrome/browser/views/options/language_combobox_model.h
+++ b/chrome/browser/views/options/language_combobox_model.h
@@ -6,7 +6,7 @@
#define CHROME_BROWSER_VIEWS_OPTIONS_LANGUAGE_COMBOBOX_MODEL_H_
#include "chrome/browser/profile.h"
-#include "chrome/views/controls/combo_box.h"
+#include "views/controls/combo_box.h"
///////////////////////////////////////////////////////////////////////////////
// LanguageComboboxModel
diff --git a/chrome/browser/views/options/languages_page_view.cc b/chrome/browser/views/options/languages_page_view.cc
index 4752c80..c3b6a29 100644
--- a/chrome/browser/views/options/languages_page_view.cc
+++ b/chrome/browser/views/options/languages_page_view.cc
@@ -24,18 +24,18 @@
#include "chrome/browser/views/standard_layout.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/pref_service.h"
-#include "chrome/views/controls/button/radio_button.h"
-#include "chrome/views/controls/combo_box.h"
-#include "chrome/views/controls/tabbed_pane.h"
-#include "chrome/views/controls/text_field.h"
-#include "chrome/views/grid_layout.h"
-#include "chrome/views/widget/widget.h"
-#include "chrome/views/window/window.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
#include "skia/include/SkBitmap.h"
#include "unicode/uloc.h"
+#include "views/controls/button/radio_button.h"
+#include "views/controls/combo_box.h"
+#include "views/controls/tabbed_pane.h"
+#include "views/controls/text_field.h"
+#include "views/grid_layout.h"
+#include "views/widget/widget.h"
+#include "views/window/window.h"
static const char* const accept_language_list[] = {
"af", // Afrikaans
diff --git a/chrome/browser/views/options/languages_page_view.h b/chrome/browser/views/options/languages_page_view.h
index 1da0a88..308df34 100644
--- a/chrome/browser/views/options/languages_page_view.h
+++ b/chrome/browser/views/options/languages_page_view.h
@@ -7,10 +7,10 @@
#include "chrome/browser/views/options/options_page_view.h"
#include "chrome/common/pref_member.h"
-#include "chrome/views/controls/combo_box.h"
-#include "chrome/views/controls/button/button.h"
-#include "chrome/views/controls/table/table_view.h"
-#include "chrome/views/view.h"
+#include "views/controls/combo_box.h"
+#include "views/controls/button/button.h"
+#include "views/controls/table/table_view.h"
+#include "views/view.h"
namespace views {
class Checkbox;
diff --git a/chrome/browser/views/options/options_group_view.cc b/chrome/browser/views/options/options_group_view.cc
index 7985a41..fa7d3cd 100644
--- a/chrome/browser/views/options/options_group_view.cc
+++ b/chrome/browser/views/options/options_group_view.cc
@@ -13,11 +13,11 @@
#include "app/resource_bundle.h"
#include "base/gfx/native_theme.h"
#include "chrome/browser/views/standard_layout.h"
-#include "chrome/views/grid_layout.h"
-#include "chrome/views/controls/label.h"
-#include "chrome/views/controls/separator.h"
#include "grit/locale_settings.h"
#include "grit/generated_resources.h"
+#include "views/grid_layout.h"
+#include "views/controls/label.h"
+#include "views/controls/separator.h"
static const int kLeftColumnWidthChars = 20;
static const int kOptionsGroupViewColumnSpacing = 30;
diff --git a/chrome/browser/views/options/options_group_view.h b/chrome/browser/views/options/options_group_view.h
index 8620030..1cabd1d 100644
--- a/chrome/browser/views/options/options_group_view.h
+++ b/chrome/browser/views/options/options_group_view.h
@@ -5,7 +5,7 @@
#ifndef CHROME_BROWSER_VIEWS_OPTIONS_OPTIONS_GROUP_VIEW_H__
#define CHROME_BROWSER_VIEWS_OPTIONS_OPTIONS_GROUP_VIEW_H__
-#include "chrome/views/view.h"
+#include "views/view.h"
namespace views {
class Label;
diff --git a/chrome/browser/views/options/options_page_view.cc b/chrome/browser/views/options/options_page_view.cc
index ed303ad..f0d5dfb 100644
--- a/chrome/browser/views/options/options_page_view.cc
+++ b/chrome/browser/views/options/options_page_view.cc
@@ -8,7 +8,7 @@
#include "chrome/browser/metrics/user_metrics.h"
#include "chrome/common/notification_service.h"
#include "chrome/common/pref_service.h"
-#include "chrome/views/widget/widget.h"
+#include "views/widget/widget.h"
///////////////////////////////////////////////////////////////////////////////
// OptionsPageView
diff --git a/chrome/browser/views/options/options_page_view.h b/chrome/browser/views/options/options_page_view.h
index 6c7c4fd..c902e14e 100644
--- a/chrome/browser/views/options/options_page_view.h
+++ b/chrome/browser/views/options/options_page_view.h
@@ -8,8 +8,8 @@
#include "chrome/browser/options_window.h"
#include "chrome/browser/profile.h"
#include "chrome/common/notification_observer.h"
-#include "chrome/views/controls/link.h"
-#include "chrome/views/controls/button/native_button.h"
+#include "views/controls/link.h"
+#include "views/controls/button/native_button.h"
class PrefService;
diff --git a/chrome/browser/views/options/options_window_view.cc b/chrome/browser/views/options/options_window_view.cc
index 15f4181..6bdd1f0 100644
--- a/chrome/browser/views/options/options_window_view.cc
+++ b/chrome/browser/views/options/options_window_view.cc
@@ -18,13 +18,13 @@
#include "chrome/personalization/personalization.h"
#include "chrome/personalization/views/user_data_page_view.h"
#endif
-#include "chrome/views/controls/tabbed_pane.h"
-#include "chrome/views/widget/root_view.h"
-#include "chrome/views/window/dialog_delegate.h"
-#include "chrome/views/window/window.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "grit/locale_settings.h"
+#include "views/controls/tabbed_pane.h"
+#include "views/widget/root_view.h"
+#include "views/window/dialog_delegate.h"
+#include "views/window/window.h"
///////////////////////////////////////////////////////////////////////////////
// OptionsWindowView
diff --git a/chrome/browser/views/options/passwords_exceptions_window_view.h b/chrome/browser/views/options/passwords_exceptions_window_view.h
index e3e8705..8170f90 100644
--- a/chrome/browser/views/options/passwords_exceptions_window_view.h
+++ b/chrome/browser/views/options/passwords_exceptions_window_view.h
@@ -5,10 +5,10 @@
#ifndef CHROME_BROWSER_VIEWS_OPTIONS_PASSWORDS_EXCEPTIONS_WINDOW_VIEW_H_
#define CHROME_BROWSER_VIEWS_OPTIONS_PASSWORDS_EXCEPTIONS_WINDOW_VIEW_H_
-#include "chrome/views/controls/tabbed_pane.h"
-#include "chrome/views/view.h"
-#include "chrome/views/window/dialog_delegate.h"
-#include "chrome/views/window/window.h"
+#include "views/controls/tabbed_pane.h"
+#include "views/view.h"
+#include "views/window/dialog_delegate.h"
+#include "views/window/window.h"
class Profile;
class PasswordsPageView;
diff --git a/chrome/browser/views/options/passwords_page_view.cc b/chrome/browser/views/options/passwords_page_view.cc
index 04c13f4..f7f02cd 100644
--- a/chrome/browser/views/options/passwords_page_view.cc
+++ b/chrome/browser/views/options/passwords_page_view.cc
@@ -10,10 +10,10 @@
#include "chrome/browser/views/standard_layout.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/pref_service.h"
-#include "chrome/views/background.h"
-#include "chrome/views/controls/button/native_button.h"
-#include "chrome/views/grid_layout.h"
#include "grit/generated_resources.h"
+#include "views/background.h"
+#include "views/controls/button/native_button.h"
+#include "views/grid_layout.h"
using views::ColumnSet;
using views::GridLayout;
diff --git a/chrome/browser/views/options/passwords_page_view.h b/chrome/browser/views/options/passwords_page_view.h
index b585159..a7a30b5 100644
--- a/chrome/browser/views/options/passwords_page_view.h
+++ b/chrome/browser/views/options/passwords_page_view.h
@@ -12,11 +12,11 @@
#include "chrome/browser/views/options/options_page_view.h"
#include "chrome/browser/webdata/web_data_service.h"
#include "chrome/common/gfx/text_elider.h"
-#include "chrome/views/controls/button/native_button.h"
-#include "chrome/views/controls/label.h"
-#include "chrome/views/controls/table/table_view.h"
-#include "chrome/views/window/dialog_delegate.h"
-#include "chrome/views/window/window.h"
+#include "views/controls/button/native_button.h"
+#include "views/controls/label.h"
+#include "views/controls/table/table_view.h"
+#include "views/window/dialog_delegate.h"
+#include "views/window/window.h"
#include "webkit/glue/password_form.h"
class Profile;
diff --git a/chrome/browser/views/page_info_window.cc b/chrome/browser/views/page_info_window.cc
index 059ec52..ad37f7b 100644
--- a/chrome/browser/views/page_info_window.cc
+++ b/chrome/browser/views/page_info_window.cc
@@ -20,18 +20,18 @@
#include "chrome/common/pref_names.h"
#include "chrome/common/pref_service.h"
#include "chrome/common/win_util.h"
-#include "chrome/views/background.h"
-#include "chrome/views/grid_layout.h"
-#include "chrome/views/controls/button/native_button.h"
-#include "chrome/views/controls/image_view.h"
-#include "chrome/views/controls/label.h"
-#include "chrome/views/controls/separator.h"
#include "grit/generated_resources.h"
#include "grit/locale_settings.h"
#include "grit/theme_resources.h"
#include "net/base/cert_status_flags.h"
#include "net/base/x509_certificate.h"
#include "skia/include/SkColor.h"
+#include "views/background.h"
+#include "views/grid_layout.h"
+#include "views/controls/button/native_button.h"
+#include "views/controls/image_view.h"
+#include "views/controls/label.h"
+#include "views/controls/separator.h"
using base::Time;
diff --git a/chrome/browser/views/page_info_window.h b/chrome/browser/views/page_info_window.h
index 35b2ee0..6a27558 100644
--- a/chrome/browser/views/page_info_window.h
+++ b/chrome/browser/views/page_info_window.h
@@ -6,10 +6,10 @@
#define CHROME_BROWSER_VIEWS_PAGE_INFO_WINDOW_H__
#include "chrome/browser/tab_contents/navigation_entry.h"
-#include "chrome/views/controls/button/button.h"
-#include "chrome/views/window/dialog_delegate.h"
-#include "chrome/views/window/window.h"
#include "googleurl/src/gurl.h"
+#include "views/controls/button/button.h"
+#include "views/window/dialog_delegate.h"
+#include "views/window/window.h"
// The page info window displays information regarding the current page,
// including security information.
diff --git a/chrome/browser/views/repost_form_warning_view.cc b/chrome/browser/views/repost_form_warning_view.cc
index 13618fd..4c91b20 100644
--- a/chrome/browser/views/repost_form_warning_view.cc
+++ b/chrome/browser/views/repost_form_warning_view.cc
@@ -9,9 +9,9 @@
#include "chrome/browser/browser_list.h"
#include "chrome/browser/tab_contents/navigation_controller.h"
#include "chrome/common/notification_service.h"
-#include "chrome/views/controls/message_box_view.h"
-#include "chrome/views/window/window.h"
#include "grit/generated_resources.h"
+#include "views/controls/message_box_view.h"
+#include "views/window/window.h"
// Implementation of function declared in
// browser/tab_contents/repost_form_warning.h
diff --git a/chrome/browser/views/repost_form_warning_view.h b/chrome/browser/views/repost_form_warning_view.h
index 809b7b5..a7da41c 100644
--- a/chrome/browser/views/repost_form_warning_view.h
+++ b/chrome/browser/views/repost_form_warning_view.h
@@ -6,7 +6,7 @@
#define CHROME_BROWSER_VIEWS_REPOST_FORM_WARNING_VIEW_H_
#include "chrome/common/notification_observer.h"
-#include "chrome/views/window/dialog_delegate.h"
+#include "views/window/dialog_delegate.h"
class MessageBoxView;
class NavigationController;
diff --git a/chrome/browser/views/restart_message_box.cc b/chrome/browser/views/restart_message_box.cc
index bffbb82..3d4ffae 100644
--- a/chrome/browser/views/restart_message_box.cc
+++ b/chrome/browser/views/restart_message_box.cc
@@ -6,10 +6,10 @@
#include "app/l10n_util.h"
#include "app/message_box_flags.h"
-#include "chrome/views/controls/message_box_view.h"
-#include "chrome/views/window/window.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
+#include "views/controls/message_box_view.h"
+#include "views/window/window.h"
////////////////////////////////////////////////////////////////////////////////
// RestartMessageBox, public:
diff --git a/chrome/browser/views/restart_message_box.h b/chrome/browser/views/restart_message_box.h
index 8180de4..5394e69 100644
--- a/chrome/browser/views/restart_message_box.h
+++ b/chrome/browser/views/restart_message_box.h
@@ -6,7 +6,7 @@
#define CHROME_BROWSER_VIEWS_RESTART_MESSAGE_BOX_H_
#include "base/basictypes.h"
-#include "chrome/views/window/dialog_delegate.h"
+#include "views/window/dialog_delegate.h"
class MessageBoxView;
diff --git a/chrome/browser/views/sad_tab_view.h b/chrome/browser/views/sad_tab_view.h
index 8605c1d..2053fba 100644
--- a/chrome/browser/views/sad_tab_view.h
+++ b/chrome/browser/views/sad_tab_view.h
@@ -7,7 +7,7 @@
#include "app/gfx/chrome_font.h"
#include "base/basictypes.h"
-#include "chrome/views/view.h"
+#include "views/view.h"
class SkBitmap;
diff --git a/chrome/browser/views/select_profile_dialog.cc b/chrome/browser/views/select_profile_dialog.cc
index 2a2af8b..074fec6 100644
--- a/chrome/browser/views/select_profile_dialog.cc
+++ b/chrome/browser/views/select_profile_dialog.cc
@@ -12,15 +12,15 @@
#include "chrome/browser/user_data_manager.h"
#include "chrome/browser/views/new_profile_dialog.h"
#include "chrome/browser/views/standard_layout.h"
-#include "chrome/views/controls/combo_box.h"
-#include "chrome/views/controls/label.h"
-#include "chrome/views/controls/message_box_view.h"
-#include "chrome/views/grid_layout.h"
-#include "chrome/views/view.h"
-#include "chrome/views/window/window.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "grit/locale_settings.h"
+#include "views/controls/combo_box.h"
+#include "views/controls/label.h"
+#include "views/controls/message_box_view.h"
+#include "views/grid_layout.h"
+#include "views/view.h"
+#include "views/window/window.h"
using views::ColumnSet;
using views::GridLayout;
diff --git a/chrome/browser/views/select_profile_dialog.h b/chrome/browser/views/select_profile_dialog.h
index 723efb2..2e2d328 100644
--- a/chrome/browser/views/select_profile_dialog.h
+++ b/chrome/browser/views/select_profile_dialog.h
@@ -15,8 +15,8 @@
#include "base/ref_counted.h"
#include "chrome/browser/shell_dialogs.h"
#include "chrome/browser/user_data_manager.h"
-#include "chrome/views/controls/combo_box.h"
-#include "chrome/views/window/dialog_delegate.h"
+#include "views/controls/combo_box.h"
+#include "views/window/dialog_delegate.h"
class SelectProfileDialogHelper;
namespace views {
diff --git a/chrome/browser/views/shelf_item_dialog.cc b/chrome/browser/views/shelf_item_dialog.cc
index fdfae82..70c4e71 100644
--- a/chrome/browser/views/shelf_item_dialog.cc
+++ b/chrome/browser/views/shelf_item_dialog.cc
@@ -16,16 +16,16 @@
#include "chrome/common/gfx/text_elider.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/pref_service.h"
-#include "chrome/views/background.h"
-#include "chrome/views/controls/label.h"
-#include "chrome/views/controls/text_field.h"
-#include "chrome/views/focus/focus_manager.h"
-#include "chrome/views/grid_layout.h"
-#include "chrome/views/widget/widget.h"
#include "grit/generated_resources.h"
#include "grit/locale_settings.h"
#include "grit/theme_resources.h"
#include "net/base/net_util.h"
+#include "views/background.h"
+#include "views/controls/label.h"
+#include "views/controls/text_field.h"
+#include "views/focus/focus_manager.h"
+#include "views/grid_layout.h"
+#include "views/widget/widget.h"
using base::Time;
using base::TimeDelta;
diff --git a/chrome/browser/views/shelf_item_dialog.h b/chrome/browser/views/shelf_item_dialog.h
index e1c932e..5e49625 100644
--- a/chrome/browser/views/shelf_item_dialog.h
+++ b/chrome/browser/views/shelf_item_dialog.h
@@ -7,12 +7,12 @@
#include "chrome/browser/cancelable_request.h"
#include "chrome/browser/history/history.h"
-#include "chrome/views/controls/button/native_button.h"
-#include "chrome/views/controls/table/table_view.h"
-#include "chrome/views/controls/text_field.h"
-#include "chrome/views/view.h"
-#include "chrome/views/window/dialog_delegate.h"
-#include "chrome/views/window/window.h"
+#include "views/controls/button/native_button.h"
+#include "views/controls/table/table_view.h"
+#include "views/controls/text_field.h"
+#include "views/view.h"
+#include "views/window/dialog_delegate.h"
+#include "views/window/window.h"
namespace views {
class Button;
diff --git a/chrome/browser/views/standard_layout.h b/chrome/browser/views/standard_layout.h
index 3c3d5b63..d72c7f3 100644
--- a/chrome/browser/views/standard_layout.h
+++ b/chrome/browser/views/standard_layout.h
@@ -5,7 +5,7 @@
#ifndef CHROME_BROWSER_VIEWS_STANDARD_LAYOUT_H__
#define CHROME_BROWSER_VIEWS_STANDARD_LAYOUT_H__
-#include "chrome/views/grid_layout.h"
+#include "views/grid_layout.h"
//
// This file contains some constants we use to implement our standard panel
diff --git a/chrome/browser/views/star_toggle.h b/chrome/browser/views/star_toggle.h
index 1475ab4..08d1791 100644
--- a/chrome/browser/views/star_toggle.h
+++ b/chrome/browser/views/star_toggle.h
@@ -5,8 +5,8 @@
#ifndef CHROME_BROWSER_VIEWS_STAR_TOGGLE_H_
#define CHROME_BROWSER_VIEWS_STAR_TOGGLE_H_
-#include "chrome/views/view.h"
-#include "chrome/views/event.h"
+#include "views/view.h"
+#include "views/event.h"
class SkBitmap;
diff --git a/chrome/browser/views/status_bubble_views.cc b/chrome/browser/views/status_bubble_views.cc
index 38eebbd..d44c967 100644
--- a/chrome/browser/views/status_bubble_views.cc
+++ b/chrome/browser/views/status_bubble_views.cc
@@ -13,16 +13,16 @@
#include "app/resource_bundle.h"
#include "base/string_util.h"
#include "chrome/common/gfx/text_elider.h"
-#include "chrome/views/controls/label.h"
-#include "chrome/views/widget/root_view.h"
-#include "chrome/views/widget/widget_win.h"
#include "googleurl/src/gurl.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
#include "net/base/net_util.h"
-#include "SkPaint.h"
-#include "SkPath.h"
-#include "SkRect.h"
+#include "skia/include/SkPaint.h"
+#include "skia/include/SkPath.h"
+#include "skia/include/corecg/SkRect.h"
+#include "views/controls/label.h"
+#include "views/widget/root_view.h"
+#include "views/widget/widget_win.h"
// The color of the background bubble.
static const SkColor kBubbleColor = SkColorSetRGB(222, 234, 248);
diff --git a/chrome/browser/views/status_bubble_views.h b/chrome/browser/views/status_bubble_views.h
index 4985d51..cdda382 100644
--- a/chrome/browser/views/status_bubble_views.h
+++ b/chrome/browser/views/status_bubble_views.h
@@ -7,8 +7,8 @@
#include "base/gfx/rect.h"
#include "chrome/browser/status_bubble.h"
-#include "chrome/views/widget/widget.h"
-#include "chrome/views/widget/widget_win.h"
+#include "views/widget/widget.h"
+#include "views/widget/widget_win.h"
class GURL;
diff --git a/chrome/browser/views/tab_contents_container_view.cc b/chrome/browser/views/tab_contents_container_view.cc
index 4a3311d..cb08fcb 100644
--- a/chrome/browser/views/tab_contents_container_view.cc
+++ b/chrome/browser/views/tab_contents_container_view.cc
@@ -15,8 +15,8 @@
#include "chrome/browser/tab_contents/tab_contents.h"
#include "chrome/browser/view_ids.h"
#include "chrome/common/notification_service.h"
-#include "chrome/views/widget/root_view.h"
-#include "chrome/views/widget/widget.h"
+#include "views/widget/root_view.h"
+#include "views/widget/widget.h"
using views::FocusTraversable;
using views::FocusManager;
diff --git a/chrome/browser/views/tab_contents_container_view.h b/chrome/browser/views/tab_contents_container_view.h
index 6840460..cc901ba 100644
--- a/chrome/browser/views/tab_contents_container_view.h
+++ b/chrome/browser/views/tab_contents_container_view.h
@@ -13,8 +13,8 @@ class RenderViewHost;
class TabContents;
#include "chrome/common/notification_registrar.h"
-#include "chrome/views/controls/hwnd_view.h"
-#include "chrome/views/focus/focus_manager.h"
+#include "views/controls/hwnd_view.h"
+#include "views/focus/focus_manager.h"
// This View contains the TabContents.
// It takes care of linking the TabContents to the browser RootView so that the
diff --git a/chrome/browser/views/tab_icon_view.h b/chrome/browser/views/tab_icon_view.h
index d210ba4..2860699 100644
--- a/chrome/browser/views/tab_icon_view.h
+++ b/chrome/browser/views/tab_icon_view.h
@@ -5,7 +5,7 @@
#ifndef CHROME_BROWSER_VIEW_TAB_ICON_VIEW_H_
#define CHROME_BROWSER_VIEW_TAB_ICON_VIEW_H_
-#include "chrome/views/view.h"
+#include "views/view.h"
class SkBitmap;
class TabContents;
diff --git a/chrome/browser/views/tabs/dragged_tab_controller.cc b/chrome/browser/views/tabs/dragged_tab_controller.cc
index c53622f..56ed9c7 100644
--- a/chrome/browser/views/tabs/dragged_tab_controller.cc
+++ b/chrome/browser/views/tabs/dragged_tab_controller.cc
@@ -21,10 +21,10 @@
#include "chrome/browser/views/tabs/tab_strip.h"
#include "chrome/browser/tab_contents/tab_contents.h"
#include "chrome/common/notification_service.h"
-#include "chrome/views/event.h"
-#include "chrome/views/widget/root_view.h"
#include "grit/theme_resources.h"
#include "skia/include/SkBitmap.h"
+#include "views/event.h"
+#include "views/widget/root_view.h"
static const int kHorizontalMoveThreshold = 16; // pixels
diff --git a/chrome/browser/views/tabs/dragged_tab_view.cc b/chrome/browser/views/tabs/dragged_tab_view.cc
index 90e6d23..1977f56 100644
--- a/chrome/browser/views/tabs/dragged_tab_view.cc
+++ b/chrome/browser/views/tabs/dragged_tab_view.cc
@@ -9,8 +9,8 @@
#include "chrome/browser/tabs/tab_strip_model.h"
#include "chrome/browser/views/tabs/hwnd_photobooth.h"
#include "chrome/browser/views/tabs/tab_renderer.h"
-#include "chrome/views/widget/widget_win.h"
#include "skia/include/SkShader.h"
+#include "views/widget/widget_win.h"
const int kTransparentAlpha = 200;
const int kOpaqueAlpha = 255;
diff --git a/chrome/browser/views/tabs/dragged_tab_view.h b/chrome/browser/views/tabs/dragged_tab_view.h
index 5802ec2..1b55654 100644
--- a/chrome/browser/views/tabs/dragged_tab_view.h
+++ b/chrome/browser/views/tabs/dragged_tab_view.h
@@ -9,8 +9,8 @@
#include "base/gfx/point.h"
#include "base/gfx/size.h"
#include "base/task.h"
-#include "chrome/views/view.h"
#include "skia/include/SkBitmap.h"
+#include "views/view.h"
namespace views {
class WidgetWin;
diff --git a/chrome/browser/views/tabs/hwnd_photobooth.cc b/chrome/browser/views/tabs/hwnd_photobooth.cc
index ba825b0..8d59592 100644
--- a/chrome/browser/views/tabs/hwnd_photobooth.cc
+++ b/chrome/browser/views/tabs/hwnd_photobooth.cc
@@ -6,8 +6,8 @@
#include "base/gfx/point.h"
#include "chrome/browser/tab_contents/tab_contents.h"
#include "chrome/browser/views/tabs/hwnd_photobooth.h"
-#include "chrome/views/widget/widget_win.h"
#include "skia/include/SkBitmap.h"
+#include "views/widget/widget_win.h"
namespace {
diff --git a/chrome/browser/views/tabs/tab.cc b/chrome/browser/views/tabs/tab.cc
index f2193dc..3975604 100644
--- a/chrome/browser/views/tabs/tab.cc
+++ b/chrome/browser/views/tabs/tab.cc
@@ -9,10 +9,10 @@
#include "app/l10n_util.h"
#include "app/resource_bundle.h"
#include "base/gfx/size.h"
-#include "chrome/views/controls/menu/chrome_menu.h"
-#include "chrome/views/widget/tooltip_manager.h"
-#include "chrome/views/widget/widget.h"
#include "grit/generated_resources.h"
+#include "views/controls/menu/chrome_menu.h"
+#include "views/widget/tooltip_manager.h"
+#include "views/widget/widget.h"
const std::string Tab::kTabClassName = "browser/tabs/Tab";
diff --git a/chrome/browser/views/tabs/tab_dragging_test.cc b/chrome/browser/views/tabs/tab_dragging_test.cc
index 94ea24d..18226a1 100644
--- a/chrome/browser/views/tabs/tab_dragging_test.cc
+++ b/chrome/browser/views/tabs/tab_dragging_test.cc
@@ -13,9 +13,9 @@
#include "chrome/test/automation/browser_proxy.h"
#include "chrome/test/automation/window_proxy.h"
#include "chrome/test/ui/ui_test.h"
-#include "chrome/views/event.h"
#include "googleurl/src/gurl.h"
#include "net/base/net_util.h"
+#include "views/event.h"
class TabDraggingTest : public UITest {
diff --git a/chrome/browser/views/tabs/tab_renderer.cc b/chrome/browser/views/tabs/tab_renderer.cc
index ca69bdd..9bb88ae 100644
--- a/chrome/browser/views/tabs/tab_renderer.cc
+++ b/chrome/browser/views/tabs/tab_renderer.cc
@@ -15,12 +15,12 @@
#include "chrome/browser/tab_contents/tab_contents.h"
#include "chrome/browser/tabs/tab_strip_model.h"
#include "chrome/common/win_util.h"
-#include "chrome/views/widget/widget.h"
-#include "chrome/views/window/non_client_view.h"
-#include "chrome/views/window/window.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
#include "skia/ext/image_operations.h"
+#include "views/widget/widget.h"
+#include "views/window/non_client_view.h"
+#include "views/window/window.h"
static const int kLeftPadding = 16;
static const int kTopPadding = 6;
diff --git a/chrome/browser/views/tabs/tab_renderer.h b/chrome/browser/views/tabs/tab_renderer.h
index 67c4639..f498c2a 100644
--- a/chrome/browser/views/tabs/tab_renderer.h
+++ b/chrome/browser/views/tabs/tab_renderer.h
@@ -9,9 +9,9 @@
#include "app/slide_animation.h"
#include "app/throb_animation.h"
#include "base/gfx/point.h"
-#include "chrome/views/controls/button/image_button.h"
-#include "chrome/views/controls/menu/menu.h"
-#include "chrome/views/view.h"
+#include "views/controls/button/image_button.h"
+#include "views/controls/menu/menu.h"
+#include "views/view.h"
class TabContents;
diff --git a/chrome/browser/views/tabs/tab_strip.cc b/chrome/browser/views/tabs/tab_strip.cc
index 5f41cc8..365e000 100644
--- a/chrome/browser/views/tabs/tab_strip.cc
+++ b/chrome/browser/views/tabs/tab_strip.cc
@@ -23,12 +23,12 @@
#include "chrome/browser/tab_contents/tab_contents.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/win_util.h"
-#include "chrome/views/controls/image_view.h"
-#include "chrome/views/painter.h"
-#include "chrome/views/window/non_client_view.h"
-#include "chrome/views/window/window.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
+#include "views/controls/image_view.h"
+#include "views/painter.h"
+#include "views/window/non_client_view.h"
+#include "views/window/window.h"
#undef min
#undef max
diff --git a/chrome/browser/views/tabs/tab_strip.h b/chrome/browser/views/tabs/tab_strip.h
index 8e10b5e..1c52a45 100644
--- a/chrome/browser/views/tabs/tab_strip.h
+++ b/chrome/browser/views/tabs/tab_strip.h
@@ -8,10 +8,10 @@
#include "base/gfx/point.h"
#include "chrome/browser/tabs/tab_strip_model.h"
#include "chrome/browser/views/tabs/tab.h"
-#include "chrome/views/controls/button/image_button.h"
-#include "chrome/views/controls/menu/menu.h"
-#include "chrome/views/view.h"
-#include "chrome/views/widget/widget_win.h"
+#include "views/controls/button/image_button.h"
+#include "views/controls/menu/menu.h"
+#include "views/view.h"
+#include "views/widget/widget_win.h"
class DraggedTabController;
class ScopedMouseCloseWidthCalculator;
diff --git a/chrome/browser/views/toolbar_star_toggle.h b/chrome/browser/views/toolbar_star_toggle.h
index efd3bd3..f63cffc7 100644
--- a/chrome/browser/views/toolbar_star_toggle.h
+++ b/chrome/browser/views/toolbar_star_toggle.h
@@ -7,7 +7,7 @@
#include "base/time.h"
#include "chrome/browser/views/info_bubble.h"
-#include "chrome/views/controls/button/image_button.h"
+#include "views/controls/button/image_button.h"
class BrowserToolbarView;
class GURL;
diff --git a/chrome/browser/views/toolbar_view.cc b/chrome/browser/views/toolbar_view.cc
index 6d0f02b..f4657eb 100644
--- a/chrome/browser/views/toolbar_view.cc
+++ b/chrome/browser/views/toolbar_view.cc
@@ -42,17 +42,17 @@
#ifdef CHROME_PERSONALIZATION
#include "chrome/personalization/personalization.h"
#endif
-#include "chrome/views/background.h"
-#include "chrome/views/controls/button/button_dropdown.h"
-#include "chrome/views/controls/hwnd_view.h"
-#include "chrome/views/controls/label.h"
-#include "chrome/views/widget/tooltip_manager.h"
-#include "chrome/views/window/non_client_view.h"
-#include "chrome/views/window/window.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
#include "net/base/net_util.h"
+#include "views/background.h"
+#include "views/controls/button/button_dropdown.h"
+#include "views/controls/hwnd_view.h"
+#include "views/controls/label.h"
+#include "views/widget/tooltip_manager.h"
+#include "views/window/non_client_view.h"
+#include "views/window/window.h"
static const int kControlHorizOffset = 4;
static const int kControlVertOffset = 6;
diff --git a/chrome/browser/views/toolbar_view.h b/chrome/browser/views/toolbar_view.h
index ca2502a..c5a9f83 100644
--- a/chrome/browser/views/toolbar_view.h
+++ b/chrome/browser/views/toolbar_view.h
@@ -18,10 +18,10 @@
#include "chrome/browser/views/go_button.h"
#include "chrome/browser/views/location_bar_view.h"
#include "chrome/common/pref_member.h"
-#include "chrome/views/controls/button/menu_button.h"
-#include "chrome/views/controls/menu/menu.h"
-#include "chrome/views/controls/menu/view_menu_delegate.h"
-#include "chrome/views/view.h"
+#include "views/controls/button/menu_button.h"
+#include "views/controls/menu/menu.h"
+#include "views/controls/menu/view_menu_delegate.h"
+#include "views/view.h"
class Browser;
class Profile;
diff --git a/chrome/browser/views/uninstall_dialog.cc b/chrome/browser/views/uninstall_dialog.cc
index f9b2c04..f54fbc8 100644
--- a/chrome/browser/views/uninstall_dialog.cc
+++ b/chrome/browser/views/uninstall_dialog.cc
@@ -8,9 +8,9 @@
#include "app/message_box_flags.h"
#include "base/message_loop.h"
#include "chrome/common/result_codes.h"
-#include "chrome/views/controls/message_box_view.h"
-#include "chrome/views/window/window.h"
#include "grit/chromium_strings.h"
+#include "views/controls/message_box_view.h"
+#include "views/window/window.h"
// static
void UninstallDialog::ShowUninstallDialog(int& user_selection) {
diff --git a/chrome/browser/views/uninstall_dialog.h b/chrome/browser/views/uninstall_dialog.h
index bf9a6c9..6987cb2 100644
--- a/chrome/browser/views/uninstall_dialog.h
+++ b/chrome/browser/views/uninstall_dialog.h
@@ -6,7 +6,7 @@
#define CHROME_BROWSER_VIEWS_UNINSTALL_DIALOG_H_
#include "base/basictypes.h"
-#include "chrome/views/window/dialog_delegate.h"
+#include "views/window/dialog_delegate.h"
class MessageBoxView;
diff --git a/chrome/browser/views/user_data_dir_dialog.cc b/chrome/browser/views/user_data_dir_dialog.cc
index 00aef5f..c6b17f3 100644
--- a/chrome/browser/views/user_data_dir_dialog.cc
+++ b/chrome/browser/views/user_data_dir_dialog.cc
@@ -6,11 +6,11 @@
#include "app/message_box_flags.h"
#include "base/logging.h"
#include "chrome/browser/views/user_data_dir_dialog.h"
-#include "chrome/views/controls/message_box_view.h"
-#include "chrome/views/widget/widget.h"
-#include "chrome/views/window/window.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
+#include "views/controls/message_box_view.h"
+#include "views/widget/widget.h"
+#include "views/window/window.h"
// static
std::wstring UserDataDirDialog::RunUserDataDirDialog(
diff --git a/chrome/browser/views/user_data_dir_dialog.h b/chrome/browser/views/user_data_dir_dialog.h
index 7408132..5e658c23 100644
--- a/chrome/browser/views/user_data_dir_dialog.h
+++ b/chrome/browser/views/user_data_dir_dialog.h
@@ -11,7 +11,7 @@
#include "base/basictypes.h"
#include "base/message_loop.h"
#include "chrome/browser/shell_dialogs.h"
-#include "chrome/views/window/dialog_delegate.h"
+#include "views/window/dialog_delegate.h"
class MessageBoxView;
namespace views {
diff --git a/chrome/chrome.gyp b/chrome/chrome.gyp
index 83ed025..f9dd449 100644
--- a/chrome/chrome.gyp
+++ b/chrome/chrome.gyp
@@ -2557,12 +2557,12 @@
'test/test_notification_tracker.h',
'test/v8_unit_test.cc',
'test/v8_unit_test.h',
- 'views/controls/label_unittest.cc',
- 'views/controls/table/table_view_unittest.cc',
- 'views/controls/tree/tree_node_iterator_unittest.cc',
- 'views/focus/focus_manager_unittest.cc',
- 'views/grid_layout_unittest.cc',
- 'views/view_unittest.cc',
+ '../views/controls/label_unittest.cc',
+ '../views/controls/table/table_view_unittest.cc',
+ '../views/controls/tree/tree_node_iterator_unittest.cc',
+ '../views/focus/focus_manager_unittest.cc',
+ '../views/grid_layout_unittest.cc',
+ '../views/view_unittest.cc',
],
'conditions': [
['OS=="linux"', {
@@ -2651,11 +2651,11 @@
'../app/os_exchange_data_unittest.cc',
'test/browser_with_test_window_test.cc',
'test/browser_with_test_window_test.h',
- 'views/controls/label_unittest.cc',
- 'views/controls/table/table_view_unittest.cc',
- 'views/focus/focus_manager_unittest.cc',
- 'views/grid_layout_unittest.cc',
- 'views/view_unittest.cc',
+ '../views/controls/label_unittest.cc',
+ '../views/controls/table/table_view_unittest.cc',
+ '../views/focus/focus_manager_unittest.cc',
+ '../views/grid_layout_unittest.cc',
+ '../views/view_unittest.cc',
],
}],
],
@@ -2850,154 +2850,154 @@
],
'sources': [
# All .cc, .h under views, except unittests
- 'views/accelerator.cc',
- 'views/accelerator.h',
- 'views/accessibility/view_accessibility.cc',
- 'views/accessibility/view_accessibility.h',
- 'views/accessibility/view_accessibility_wrapper.cc',
- 'views/accessibility/view_accessibility_wrapper.h',
- 'views/background.cc',
- 'views/background.h',
- 'views/border.cc',
- 'views/border.h',
- 'views/controls/button/button.cc',
- 'views/controls/button/button.h',
- 'views/controls/button/button_dropdown.cc',
- 'views/controls/button/button_dropdown.h',
- 'views/controls/button/checkbox.cc',
- 'views/controls/button/checkbox.h',
- 'views/controls/button/custom_button.cc',
- 'views/controls/button/custom_button.h',
- 'views/controls/button/image_button.cc',
- 'views/controls/button/image_button.h',
- 'views/controls/button/menu_button.cc',
- 'views/controls/button/menu_button.h',
- 'views/controls/button/native_button.cc',
- 'views/controls/button/native_button.h',
- 'views/controls/button/native_button_win.cc',
- 'views/controls/button/native_button_win.h',
- 'views/controls/button/native_button_wrapper.h',
- 'views/controls/button/radio_button.cc',
- 'views/controls/button/radio_button.h',
- 'views/controls/button/text_button.cc',
- 'views/controls/button/text_button.h',
- 'views/controls/combo_box.cc',
- 'views/controls/combo_box.h',
- 'views/controls/hwnd_view.cc',
- 'views/controls/hwnd_view.h',
- 'views/controls/image_view.cc',
- 'views/controls/image_view.h',
- 'views/controls/label.cc',
- 'views/controls/label.h',
- 'views/controls/link.cc',
- 'views/controls/link.h',
- 'views/controls/menu/chrome_menu.cc',
- 'views/controls/menu/chrome_menu.h',
- 'views/controls/menu/controller.h',
- 'views/controls/menu/menu.cc',
- 'views/controls/menu/menu.h',
- 'views/controls/menu/view_menu_delegate.h',
- 'views/controls/message_box_view.cc',
- 'views/controls/message_box_view.h',
- 'views/controls/native_control.cc',
- 'views/controls/native_control.h',
- 'views/controls/native_control_win.cc',
- 'views/controls/native_control_win.h',
- 'views/controls/native_view_host.cc',
- 'views/controls/native_view_host.h',
- 'views/controls/scroll_view.cc',
- 'views/controls/scroll_view.h',
- 'views/controls/scrollbar/bitmap_scroll_bar.cc',
- 'views/controls/scrollbar/bitmap_scroll_bar.h',
- 'views/controls/scrollbar/native_scroll_bar.cc',
- 'views/controls/scrollbar/native_scroll_bar.h',
- 'views/controls/scrollbar/scroll_bar.cc',
- 'views/controls/scrollbar/scroll_bar.h',
- 'views/controls/separator.cc',
- 'views/controls/separator.h',
- 'views/controls/single_split_view.cc',
- 'views/controls/single_split_view.h',
- 'views/controls/tabbed_pane.cc',
- 'views/controls/tabbed_pane.h',
- 'views/controls/table/group_table_view.cc',
- 'views/controls/table/group_table_view.h',
- 'views/controls/table/table_view.cc',
- 'views/controls/table/table_view.h',
- 'views/controls/text_field.cc',
- 'views/controls/text_field.h',
- 'views/controls/throbber.cc',
- 'views/controls/throbber.h',
- 'views/controls/tree/tree_model.h',
- 'views/controls/tree/tree_node_iterator.h',
- 'views/controls/tree/tree_node_model.h',
- 'views/controls/tree/tree_view.cc',
- 'views/controls/tree/tree_view.h',
- 'views/event.cc',
- 'views/event.h',
- 'views/event_gtk.cc',
- 'views/event_win.cc',
- 'views/fill_layout.cc',
- 'views/fill_layout.h',
- 'views/focus/external_focus_tracker.cc',
- 'views/focus/external_focus_tracker.h',
- 'views/focus/focus_manager.cc',
- 'views/focus/focus_manager.h',
- 'views/focus/focus_util_win.cc',
- 'views/focus/focus_util_win.h',
- 'views/focus/view_storage.cc',
- 'views/focus/view_storage.h',
- 'views/grid_layout.cc',
- 'views/grid_layout.h',
- 'views/layout_manager.cc',
- 'views/layout_manager.h',
- 'views/painter.cc',
- 'views/painter.h',
- 'views/repeat_controller.cc',
- 'views/repeat_controller.h',
- 'views/view.cc',
- 'views/view.h',
- 'views/view_constants.cc',
- 'views/view_constants.h',
- 'views/view_gtk.cc',
- 'views/view_win.cc',
- 'views/widget/accelerator_handler.cc',
- 'views/widget/accelerator_handler.h',
- 'views/widget/aero_tooltip_manager.cc',
- 'views/widget/aero_tooltip_manager.h',
- 'views/widget/root_view.cc',
- 'views/widget/root_view.h',
- 'views/widget/root_view_drop_target.cc',
- 'views/widget/root_view_drop_target.h',
- 'views/widget/root_view_gtk.cc',
- 'views/widget/root_view_win.cc',
- 'views/widget/tooltip_manager.cc',
- 'views/widget/tooltip_manager.h',
- 'views/widget/widget.h',
- 'views/widget/widget_gtk.cc',
- 'views/widget/widget_gtk.h',
- 'views/widget/widget_win.cc',
- 'views/widget/widget_win.h',
- 'views/window/client_view.cc',
- 'views/window/client_view.h',
- 'views/window/custom_frame_view.cc',
- 'views/window/custom_frame_view.h',
- 'views/window/dialog_client_view.cc',
- 'views/window/dialog_client_view.h',
- 'views/window/dialog_delegate.cc',
- 'views/window/dialog_delegate.h',
- 'views/window/hit_test.h',
- 'views/window/native_frame_view.cc',
- 'views/window/native_frame_view.h',
- 'views/window/non_client_view.cc',
- 'views/window/non_client_view.h',
- 'views/window/window.h',
- 'views/window/window_delegate.cc',
- 'views/window/window_delegate.h',
- 'views/window/window_gtk.cc',
- 'views/window/window_gtk.h',
- 'views/window/window_resources.h',
- 'views/window/window_win.cc',
- 'views/window/window_win.h',
+ '../views/accelerator.cc',
+ '../views/accelerator.h',
+ '../views/accessibility/view_accessibility.cc',
+ '../views/accessibility/view_accessibility.h',
+ '../views/accessibility/view_accessibility_wrapper.cc',
+ '../views/accessibility/view_accessibility_wrapper.h',
+ '../views/background.cc',
+ '../views/background.h',
+ '../views/border.cc',
+ '../views/border.h',
+ '../views/controls/button/button.cc',
+ '../views/controls/button/button.h',
+ '../views/controls/button/button_dropdown.cc',
+ '../views/controls/button/button_dropdown.h',
+ '../views/controls/button/checkbox.cc',
+ '../views/controls/button/checkbox.h',
+ '../views/controls/button/custom_button.cc',
+ '../views/controls/button/custom_button.h',
+ '../views/controls/button/image_button.cc',
+ '../views/controls/button/image_button.h',
+ '../views/controls/button/menu_button.cc',
+ '../views/controls/button/menu_button.h',
+ '../views/controls/button/native_button.cc',
+ '../views/controls/button/native_button.h',
+ '../views/controls/button/native_button_win.cc',
+ '../views/controls/button/native_button_win.h',
+ '../views/controls/button/native_button_wrapper.h',
+ '../views/controls/button/radio_button.cc',
+ '../views/controls/button/radio_button.h',
+ '../views/controls/button/text_button.cc',
+ '../views/controls/button/text_button.h',
+ '../views/controls/combo_box.cc',
+ '../views/controls/combo_box.h',
+ '../views/controls/hwnd_view.cc',
+ '../views/controls/hwnd_view.h',
+ '../views/controls/image_view.cc',
+ '../views/controls/image_view.h',
+ '../views/controls/label.cc',
+ '../views/controls/label.h',
+ '../views/controls/link.cc',
+ '../views/controls/link.h',
+ '../views/controls/menu/chrome_menu.cc',
+ '../views/controls/menu/chrome_menu.h',
+ '../views/controls/menu/controller.h',
+ '../views/controls/menu/menu.cc',
+ '../views/controls/menu/menu.h',
+ '../views/controls/menu/view_menu_delegate.h',
+ '../views/controls/message_box_view.cc',
+ '../views/controls/message_box_view.h',
+ '../views/controls/native_control.cc',
+ '../views/controls/native_control.h',
+ '../views/controls/native_control_win.cc',
+ '../views/controls/native_control_win.h',
+ '../views/controls/native_view_host.cc',
+ '../views/controls/native_view_host.h',
+ '../views/controls/scroll_view.cc',
+ '../views/controls/scroll_view.h',
+ '../views/controls/scrollbar/bitmap_scroll_bar.cc',
+ '../views/controls/scrollbar/bitmap_scroll_bar.h',
+ '../views/controls/scrollbar/native_scroll_bar.cc',
+ '../views/controls/scrollbar/native_scroll_bar.h',
+ '../views/controls/scrollbar/scroll_bar.cc',
+ '../views/controls/scrollbar/scroll_bar.h',
+ '../views/controls/separator.cc',
+ '../views/controls/separator.h',
+ '../views/controls/single_split_view.cc',
+ '../views/controls/single_split_view.h',
+ '../views/controls/tabbed_pane.cc',
+ '../views/controls/tabbed_pane.h',
+ '../views/controls/table/group_table_view.cc',
+ '../views/controls/table/group_table_view.h',
+ '../views/controls/table/table_view.cc',
+ '../views/controls/table/table_view.h',
+ '../views/controls/text_field.cc',
+ '../views/controls/text_field.h',
+ '../views/controls/throbber.cc',
+ '../views/controls/throbber.h',
+ '../views/controls/tree/tree_model.h',
+ '../views/controls/tree/tree_node_iterator.h',
+ '../views/controls/tree/tree_node_model.h',
+ '../views/controls/tree/tree_view.cc',
+ '../views/controls/tree/tree_view.h',
+ '../views/event.cc',
+ '../views/event.h',
+ '../views/event_gtk.cc',
+ '../views/event_win.cc',
+ '../views/fill_layout.cc',
+ '../views/fill_layout.h',
+ '../views/focus/external_focus_tracker.cc',
+ '../views/focus/external_focus_tracker.h',
+ '../views/focus/focus_manager.cc',
+ '../views/focus/focus_manager.h',
+ '../views/focus/focus_util_win.cc',
+ '../views/focus/focus_util_win.h',
+ '../views/focus/view_storage.cc',
+ '../views/focus/view_storage.h',
+ '../views/grid_layout.cc',
+ '../views/grid_layout.h',
+ '../views/layout_manager.cc',
+ '../views/layout_manager.h',
+ '../views/painter.cc',
+ '../views/painter.h',
+ '../views/repeat_controller.cc',
+ '../views/repeat_controller.h',
+ '../views/view.cc',
+ '../views/view.h',
+ '../views/view_constants.cc',
+ '../views/view_constants.h',
+ '../views/view_gtk.cc',
+ '../views/view_win.cc',
+ '../views/widget/accelerator_handler.cc',
+ '../views/widget/accelerator_handler.h',
+ '../views/widget/aero_tooltip_manager.cc',
+ '../views/widget/aero_tooltip_manager.h',
+ '../views/widget/root_view.cc',
+ '../views/widget/root_view.h',
+ '../views/widget/root_view_drop_target.cc',
+ '../views/widget/root_view_drop_target.h',
+ '../views/widget/root_view_gtk.cc',
+ '../views/widget/root_view_win.cc',
+ '../views/widget/tooltip_manager.cc',
+ '../views/widget/tooltip_manager.h',
+ '../views/widget/widget.h',
+ '../views/widget/widget_gtk.cc',
+ '../views/widget/widget_gtk.h',
+ '../views/widget/widget_win.cc',
+ '../views/widget/widget_win.h',
+ '../views/window/client_view.cc',
+ '../views/window/client_view.h',
+ '../views/window/custom_frame_view.cc',
+ '../views/window/custom_frame_view.h',
+ '../views/window/dialog_client_view.cc',
+ '../views/window/dialog_client_view.h',
+ '../views/window/dialog_delegate.cc',
+ '../views/window/dialog_delegate.h',
+ '../views/window/hit_test.h',
+ '../views/window/native_frame_view.cc',
+ '../views/window/native_frame_view.h',
+ '../views/window/non_client_view.cc',
+ '../views/window/non_client_view.h',
+ '../views/window/window.h',
+ '../views/window/window_delegate.cc',
+ '../views/window/window_delegate.h',
+ '../views/window/window_gtk.cc',
+ '../views/window/window_gtk.h',
+ '../views/window/window_resources.h',
+ '../views/window/window_win.cc',
+ '../views/window/window_win.h',
],
'conditions': [
['OS=="linux"', {
@@ -3005,44 +3005,44 @@
'../build/linux/system.gyp:gtk',
],
'sources!': [
- 'views/accelerator.cc',
- 'views/accessibility/accessible_wrapper.cc',
- 'views/accessibility/view_accessibility.cc',
- 'views/controls/scrollbar/bitmap_scroll_bar.cc',
- 'views/controls/button/button_dropdown.cc',
- 'views/controls/button/checkbox.cc',
- 'views/controls/button/image_button.cc',
- 'views/controls/button/menu_button.cc',
- 'views/controls/combo_box.cc',
- 'views/controls/hwnd_view.cc',
- 'views/controls/link.cc',
- 'views/controls/menu/chrome_menu.cc',
- 'views/controls/menu/menu.cc',
- 'views/controls/message_box_view.cc',
- 'views/controls/scroll_view.cc',
- 'views/controls/table/group_table_view.cc',
- 'views/focus/external_focus_tracker.cc',
- 'views/focus/focus_manager.cc',
- 'views/controls/button/native_button.cc',
- 'views/controls/native_control.cc',
- 'views/controls/scrollbar/native_scroll_bar.cc',
- 'views/controls/button/radio_button.cc',
- 'views/resize_corner.cc',
- 'views/controls/separator.cc',
- 'views/controls/single_split_view.cc',
- 'views/controls/tabbed_pane.cc',
- 'views/controls/table/table_view.cc',
- 'views/controls/text_field.cc',
- 'views/controls/tree/tree_view.cc',
- 'views/event_win.cc',
- 'views/widget/accelerator_handler.cc',
- 'views/widget/aero_tooltip_manager.cc',
- 'views/widget/root_view_drop_target.cc',
- 'views/widget/tooltip_manager.cc',
- 'views/window/dialog_delegate.cc',
- 'views/window/dialog_client_view.cc',
- 'views/window/hit_test.cc',
- 'views/window/native_frame_view.cc',
+ '../views/accelerator.cc',
+ '../views/accessibility/accessible_wrapper.cc',
+ '../views/accessibility/view_accessibility.cc',
+ '../views/controls/scrollbar/bitmap_scroll_bar.cc',
+ '../views/controls/button/button_dropdown.cc',
+ '../views/controls/button/checkbox.cc',
+ '../views/controls/button/image_button.cc',
+ '../views/controls/button/menu_button.cc',
+ '../views/controls/combo_box.cc',
+ '../views/controls/hwnd_view.cc',
+ '../views/controls/link.cc',
+ '../views/controls/menu/chrome_menu.cc',
+ '../views/controls/menu/menu.cc',
+ '../views/controls/message_box_view.cc',
+ '../views/controls/scroll_view.cc',
+ '../views/controls/table/group_table_view.cc',
+ '../views/focus/external_focus_tracker.cc',
+ '../views/focus/focus_manager.cc',
+ '../views/controls/button/native_button.cc',
+ '../views/controls/native_control.cc',
+ '../views/controls/scrollbar/native_scroll_bar.cc',
+ '../views/controls/button/radio_button.cc',
+ '../views/resize_corner.cc',
+ '../views/controls/separator.cc',
+ '../views/controls/single_split_view.cc',
+ '../views/controls/tabbed_pane.cc',
+ '../views/controls/table/table_view.cc',
+ '../views/controls/text_field.cc',
+ '../views/controls/tree/tree_view.cc',
+ '../views/event_win.cc',
+ '../views/widget/accelerator_handler.cc',
+ '../views/widget/aero_tooltip_manager.cc',
+ '../views/widget/root_view_drop_target.cc',
+ '../views/widget/tooltip_manager.cc',
+ '../views/window/dialog_delegate.cc',
+ '../views/window/dialog_client_view.cc',
+ '../views/window/hit_test.cc',
+ '../views/window/native_frame_view.cc',
],
}],
['OS=="win"', {
@@ -3057,43 +3057,43 @@
},],
['OS=="linux"', {
'sources!': [
- 'views/accelerator.cc',
- 'views/accessibility/accessible_wrapper.cc',
- 'views/accessibility/view_accessibility.cc',
- 'views/accessibility/view_accessibility_wrapper.cc',
- 'views/controls/scrollbar/bitmap_scroll_bar.cc',
- 'views/controls/button/image_button.cc',
- 'views/controls/button/button_dropdown.cc',
- 'views/controls/button/checkbox.cc',
- 'views/controls/menu/chrome_menu.cc',
- 'views/controls/combo_box.cc',
- 'views/focus/focus_manager.cc',
- 'views/controls/table/group_table_view.cc',
- 'views/controls/hwnd_view.cc',
- 'views/controls/link.cc',
- 'views/controls/menu/menu.cc',
- 'views/controls/button/menu_button.cc',
- 'views/controls/message_box_view.cc',
- 'views/controls/button/native_button.cc',
- 'views/controls/native_control.cc',
- 'views/controls/scrollbar/native_scroll_bar.cc',
- 'views/controls/button/radio_button.cc',
- 'views/resize_corner.cc',
- 'views/controls/separator.cc',
- 'views/controls/single_split_view.cc',
- 'views/controls/tabbed_pane.cc',
- 'views/controls/table/table_view.cc',
- 'views/controls/text_field.cc',
- 'views/controls/tree/tree_view.cc',
- 'views/widget/accelerator_handler.cc',
- 'views/widget/aero_tooltip_manager.cc',
- 'views/widget/root_view_drop_target.cc',
- 'views/widget/tooltip_manager.cc',
- 'views/widget/widget_win.cc',
- 'views/window/dialog_delegate.cc',
- 'views/window/dialog_client_view.cc',
- 'views/window/native_frame_view.cc',
- 'views/window/window_win.cc',
+ '../views/accelerator.cc',
+ '../views/accessibility/accessible_wrapper.cc',
+ '../views/accessibility/view_accessibility.cc',
+ '../views/accessibility/view_accessibility_wrapper.cc',
+ '../views/controls/scrollbar/bitmap_scroll_bar.cc',
+ '../views/controls/button/image_button.cc',
+ '../views/controls/button/button_dropdown.cc',
+ '../views/controls/button/checkbox.cc',
+ '../views/controls/menu/chrome_menu.cc',
+ '../views/controls/combo_box.cc',
+ '../views/focus/focus_manager.cc',
+ '../views/controls/table/group_table_view.cc',
+ '../views/controls/hwnd_view.cc',
+ '../views/controls/link.cc',
+ '../views/controls/menu/menu.cc',
+ '../views/controls/button/menu_button.cc',
+ '../views/controls/message_box_view.cc',
+ '../views/controls/button/native_button.cc',
+ '../views/controls/native_control.cc',
+ '../views/controls/scrollbar/native_scroll_bar.cc',
+ '../views/controls/button/radio_button.cc',
+ '../views/resize_corner.cc',
+ '../views/controls/separator.cc',
+ '../views/controls/single_split_view.cc',
+ '../views/controls/tabbed_pane.cc',
+ '../views/controls/table/table_view.cc',
+ '../views/controls/text_field.cc',
+ '../views/controls/tree/tree_view.cc',
+ '../views/widget/accelerator_handler.cc',
+ '../views/widget/aero_tooltip_manager.cc',
+ '../views/widget/root_view_drop_target.cc',
+ '../views/widget/tooltip_manager.cc',
+ '../views/widget/widget_win.cc',
+ '../views/window/dialog_delegate.cc',
+ '../views/window/dialog_client_view.cc',
+ '../views/window/native_frame_view.cc',
+ '../views/window/window_win.cc',
],
}],
],
diff --git a/chrome/chrome.sln b/chrome/chrome.sln
index 85475a0..60bb624 100644
--- a/chrome/chrome.sln
+++ b/chrome/chrome.sln
@@ -6,57 +6,57 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Browser", "Browser", "{9755
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "browser", "browser\browser.vcproj", "{5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}"
ProjectSection(ProjectDependencies) = postProject
- {0B469837-3D46-484A-AFB3-C5A6C68730B9} = {0B469837-3D46-484A-AFB3-C5A6C68730B9}
- {4052059A-D72B-4183-B5C2-9D1B099E9E35} = {4052059A-D72B-4183-B5C2-9D1B099E9E35}
- {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942} = {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}
- {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE} = {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE} = {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE}
+ {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942} = {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}
+ {4052059A-D72B-4183-B5C2-9D1B099E9E35} = {4052059A-D72B-4183-B5C2-9D1B099E9E35}
+ {0B469837-3D46-484A-AFB3-C5A6C68730B9} = {0B469837-3D46-484A-AFB3-C5A6C68730B9}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "renderer", "renderer\renderer.vcproj", "{9301A569-5D2B-4D11-9332-B1E30AEACB8D}"
ProjectSection(ProjectDependencies) = postProject
- {6AE76406-B03B-11DD-94B1-80B556D89593} = {6AE76406-B03B-11DD-94B1-80B556D89593}
- {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE} = {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE} = {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE}
+ {6AE76406-B03B-11DD-94B1-80B556D89593} = {6AE76406-B03B-11DD-94B1-80B556D89593}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ipc_tests", "common\ipc_tests.vcproj", "{B92AE829-E1CD-4781-824A-DCB1603A1672}"
ProjectSection(ProjectDependencies) = postProject
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
- {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
- {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
{BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
+ {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
+ {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "common", "common\common.vcproj", "{899F1280-3441-4D1F-BA04-CCD6208D9146}"
ProjectSection(ProjectDependencies) = postProject
- {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE} = {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE} = {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE}
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WebKit (readonly)", "WebKit (readonly)", "{1088577A-0C49-4DE0-85CD-B68AD0BE55AA}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WebCore", "..\webkit\build\WebCore\WebCore.vcproj", "{1C16337B-ACF3-4D03-AA90-851C5B5EADA6}"
ProjectSection(ProjectDependencies) = postProject
- {1444235E-0E97-4C80-A73E-EE73F3706C32} = {1444235E-0E97-4C80-A73E-EE73F3706C32}
- {2E2D3301-2EC4-4C0F-B889-87073B30F673} = {2E2D3301-2EC4-4C0F-B889-87073B30F673}
- {2F7EDFA2-EE27-4D83-8454-9EFBD5779203} = {2F7EDFA2-EE27-4D83-8454-9EFBD5779203}
{6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9} = {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9}
+ {2F7EDFA2-EE27-4D83-8454-9EFBD5779203} = {2F7EDFA2-EE27-4D83-8454-9EFBD5779203}
+ {2E2D3301-2EC4-4C0F-B889-87073B30F673} = {2E2D3301-2EC4-4C0F-B889-87073B30F673}
+ {1444235E-0E97-4C80-A73E-EE73F3706C32} = {1444235E-0E97-4C80-A73E-EE73F3706C32}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Port", "..\webkit\build\port\port.vcproj", "{5597AD47-3494-4750-A235-4F9C2F864700}"
ProjectSection(ProjectDependencies) = postProject
- {2E2D3301-2EC4-4C0F-B889-87073B30F673} = {2E2D3301-2EC4-4C0F-B889-87073B30F673}
{2F7EDFA2-EE27-4D83-8454-9EFBD5779203} = {2F7EDFA2-EE27-4D83-8454-9EFBD5779203}
+ {2E2D3301-2EC4-4C0F-B889-87073B30F673} = {2E2D3301-2EC4-4C0F-B889-87073B30F673}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Glue", "..\webkit\glue\glue.vcproj", "{C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09}"
ProjectSection(ProjectDependencies) = postProject
- {0B469837-3D46-484A-AFB3-C5A6C68730B9} = {0B469837-3D46-484A-AFB3-C5A6C68730B9}
- {1444235E-0E97-4C80-A73E-EE73F3706C32} = {1444235E-0E97-4C80-A73E-EE73F3706C32}
- {2E2D3301-2EC4-4C0F-B889-87073B30F673} = {2E2D3301-2EC4-4C0F-B889-87073B30F673}
- {2F7EDFA2-EE27-4D83-8454-9EFBD5779203} = {2F7EDFA2-EE27-4D83-8454-9EFBD5779203}
{60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
+ {2F7EDFA2-EE27-4D83-8454-9EFBD5779203} = {2F7EDFA2-EE27-4D83-8454-9EFBD5779203}
+ {2E2D3301-2EC4-4C0F-B889-87073B30F673} = {2E2D3301-2EC4-4C0F-B889-87073B30F673}
+ {1444235E-0E97-4C80-A73E-EE73F3706C32} = {1444235E-0E97-4C80-A73E-EE73F3706C32}
+ {0B469837-3D46-484A-AFB3-C5A6C68730B9} = {0B469837-3D46-484A-AFB3-C5A6C68730B9}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "skia", "..\skia\skia.vcproj", "{CD9CA56E-4E94-444C-87D4-58CA1E6F300D}"
@@ -66,12 +66,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WTF", "..\webkit\build\Java
{2E2D3301-2EC4-4C0F-B889-87073B30F673} = {2E2D3301-2EC4-4C0F-B889-87073B30F673}
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "views", "views\views.vcproj", "{6F9258E5-294F-47B2-919D-17FFE7A8B751}"
- ProjectSection(ProjectDependencies) = postProject
- {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE} = {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE}
- {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
- EndProjectSection
-EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sqlite", "..\third_party\sqlite\sqlite.vcproj", "{6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9}"
ProjectSection(ProjectDependencies) = postProject
{8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
@@ -88,8 +82,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "automation", "test\automati
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "icuuc", "..\third_party\icu38\icuuc.vcproj", "{8C27D792-2648-4F5E-9ED0-374276327308}"
ProjectSection(ProjectDependencies) = postProject
- {A0D94973-D355-47A5-A1E2-3456F321F010} = {A0D94973-D355-47A5-A1E2-3456F321F010}
{F22022F0-2D3B-5610-4E80-C674A8E01C5A} = {F22022F0-2D3B-5610-4E80-C674A8E01C5A}
+ {A0D94973-D355-47A5-A1E2-3456F321F010} = {A0D94973-D355-47A5-A1E2-3456F321F010}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "icudata", "..\third_party\icu38\icudata.vcproj", "{A0D94973-D355-47A5-A1E2-3456F321F010}"
@@ -106,12 +100,12 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ffmpeg", "..\third_party\ff
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "image_diff", "tools\test\image_diff\image_diff.vcproj", "{50B079C7-CD01-42D3-B8C4-9F8D9322E822}"
ProjectSection(ProjectDependencies) = postProject
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
- {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
- {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
- {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
- {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
{CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
+ {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
+ {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
+ {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
+ {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Breakpad", "Breakpad", "{873D095E-150E-4262-8C41-2D8ED02F0F57}"
@@ -135,52 +129,52 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "chrome_strings", "app\chrom
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "V8Bindings", "..\webkit\build\V8Bindings\V8Bindings.vcproj", "{625A8F11-2B4E-45B4-BD99-C6D629C606C0}"
ProjectSection(ProjectDependencies) = postProject
- {2E2D3301-2EC4-4C0F-B889-87073B30F673} = {2E2D3301-2EC4-4C0F-B889-87073B30F673}
{2F7EDFA2-EE27-4D83-8454-9EFBD5779203} = {2F7EDFA2-EE27-4D83-8454-9EFBD5779203}
+ {2E2D3301-2EC4-4C0F-B889-87073B30F673} = {2E2D3301-2EC4-4C0F-B889-87073B30F673}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "chrome_dll", "app\chrome_dll.vcproj", "{C0A7EE2C-2A6D-45BE-BA78-6D006FDF52D9}"
ProjectSection(ProjectDependencies) = postProject
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
- {1C16337B-ACF3-4D03-AA90-851C5B5EADA6} = {1C16337B-ACF3-4D03-AA90-851C5B5EADA6}
- {20A560A0-2CD0-4D9E-A58B-1F24B99C087A} = {20A560A0-2CD0-4D9E-A58B-1F24B99C087A}
- {21E22961-22BF-4493-BD3A-868F93DA5179} = {21E22961-22BF-4493-BD3A-868F93DA5179}
- {238CE175-76CE-4A25-A676-69D115885601} = {238CE175-76CE-4A25-A676-69D115885601}
- {2A70CBF0-847E-4E3A-B926-542A656DC7FE} = {2A70CBF0-847E-4E3A-B926-542A656DC7FE}
- {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
- {4631946D-7D5F-44BD-A5A8-504C0A7033BE} = {4631946D-7D5F-44BD-A5A8-504C0A7033BE}
- {49909552-0B0C-4C14-8CF6-DB8A2ADE0934} = {49909552-0B0C-4C14-8CF6-DB8A2ADE0934}
- {5597AD47-3494-4750-A235-4F9C2F864700} = {5597AD47-3494-4750-A235-4F9C2F864700}
- {57823D8C-A317-4713-9125-2C91FDFD12D6} = {57823D8C-A317-4713-9125-2C91FDFD12D6}
- {5916D37D-8C97-424F-A904-74E52594C2D6} = {5916D37D-8C97-424F-A904-74E52594C2D6}
- {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA} = {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}
- {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65} = {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65}
- {625A8F11-2B4E-45B4-BD99-C6D629C606C0} = {625A8F11-2B4E-45B4-BD99-C6D629C606C0}
- {6AE76406-B03B-11DD-94B1-80B556D89593} = {6AE76406-B03B-11DD-94B1-80B556D89593}
- {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9} = {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9}
- {6F9258E5-294F-47B2-919D-17FFE7A8B751} = {6F9258E5-294F-47B2-919D-17FFE7A8B751}
- {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
- {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
- {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
- {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
- {9301A569-5D2B-4D11-9332-B1E30AEACB8D} = {9301A569-5D2B-4D11-9332-B1E30AEACB8D}
- {9E5416B9-B91B-4029-93F4-102C1AD5CAF4} = {9E5416B9-B91B-4029-93F4-102C1AD5CAF4}
- {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6} = {AA8A5A85-592B-4357-BC60-E0E91E026AF6}
- {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE} = {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE}
- {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
- {C564F145-9172-42C3-BFCB-60FDEA124321} = {C564F145-9172-42C3-BFCB-60FDEA124321}
- {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09} = {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09}
- {C78D02D0-A366-4EC6-A248-AA8E64C4BA18} = {C78D02D0-A366-4EC6-A248-AA8E64C4BA18}
- {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
- {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E} = {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E}
- {D703D7A0-EDC1-4FE6-9E22-56154155B24E} = {D703D7A0-EDC1-4FE6-9E22-56154155B24E}
- {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
- {EFBB1436-A63F-4CD8-9E99-B89226E782EC} = {EFBB1436-A63F-4CD8-9E99-B89226E782EC}
- {F4F4BCAA-EA59-445C-A119-3E6C29647A51} = {F4F4BCAA-EA59-445C-A119-3E6C29647A51}
- {F54ABC59-5C00-414A-A9BA-BAF26D1699F0} = {F54ABC59-5C00-414A-A9BA-BAF26D1699F0}
- {FA537565-7B03-4FFC-AF15-F7A979B72E22} = {FA537565-7B03-4FFC-AF15-F7A979B72E22}
{FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED} = {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED}
+ {FA537565-7B03-4FFC-AF15-F7A979B72E22} = {FA537565-7B03-4FFC-AF15-F7A979B72E22}
+ {F54ABC59-5C00-414A-A9BA-BAF26D1699F0} = {F54ABC59-5C00-414A-A9BA-BAF26D1699F0}
+ {F4F4BCAA-EA59-445C-A119-3E6C29647A51} = {F4F4BCAA-EA59-445C-A119-3E6C29647A51}
+ {EFBB1436-A63F-4CD8-9E99-B89226E782EC} = {EFBB1436-A63F-4CD8-9E99-B89226E782EC}
+ {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
+ {D703D7A0-EDC1-4FE6-9E22-56154155B24E} = {D703D7A0-EDC1-4FE6-9E22-56154155B24E}
+ {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E} = {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E}
+ {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
+ {C78D02D0-A366-4EC6-A248-AA8E64C4BA18} = {C78D02D0-A366-4EC6-A248-AA8E64C4BA18}
+ {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09} = {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09}
+ {C564F145-9172-42C3-BFCB-60FDEA124321} = {C564F145-9172-42C3-BFCB-60FDEA124321}
+ {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
+ {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE} = {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE}
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6} = {AA8A5A85-592B-4357-BC60-E0E91E026AF6}
+ {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
+ {9E5416B9-B91B-4029-93F4-102C1AD5CAF4} = {9E5416B9-B91B-4029-93F4-102C1AD5CAF4}
+ {9301A569-5D2B-4D11-9332-B1E30AEACB8D} = {9301A569-5D2B-4D11-9332-B1E30AEACB8D}
+ {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
+ {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
+ {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
+ {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
+ {6F9258E5-294F-47B2-919D-17FFE7A8B751} = {6F9258E5-294F-47B2-919D-17FFE7A8B751}
+ {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9} = {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9}
+ {6AE76406-B03B-11DD-94B1-80B556D89593} = {6AE76406-B03B-11DD-94B1-80B556D89593}
+ {625A8F11-2B4E-45B4-BD99-C6D629C606C0} = {625A8F11-2B4E-45B4-BD99-C6D629C606C0}
+ {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65} = {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65}
+ {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA} = {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}
+ {5916D37D-8C97-424F-A904-74E52594C2D6} = {5916D37D-8C97-424F-A904-74E52594C2D6}
+ {57823D8C-A317-4713-9125-2C91FDFD12D6} = {57823D8C-A317-4713-9125-2C91FDFD12D6}
+ {5597AD47-3494-4750-A235-4F9C2F864700} = {5597AD47-3494-4750-A235-4F9C2F864700}
+ {49909552-0B0C-4C14-8CF6-DB8A2ADE0934} = {49909552-0B0C-4C14-8CF6-DB8A2ADE0934}
+ {4631946D-7D5F-44BD-A5A8-504C0A7033BE} = {4631946D-7D5F-44BD-A5A8-504C0A7033BE}
+ {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
+ {2A70CBF0-847E-4E3A-B926-542A656DC7FE} = {2A70CBF0-847E-4E3A-B926-542A656DC7FE}
+ {238CE175-76CE-4A25-A676-69D115885601} = {238CE175-76CE-4A25-A676-69D115885601}
+ {21E22961-22BF-4493-BD3A-868F93DA5179} = {21E22961-22BF-4493-BD3A-868F93DA5179}
+ {20A560A0-2CD0-4D9E-A58B-1F24B99C087A} = {20A560A0-2CD0-4D9E-A58B-1F24B99C087A}
+ {1C16337B-ACF3-4D03-AA90-851C5B5EADA6} = {1C16337B-ACF3-4D03-AA90-851C5B5EADA6}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bzip2", "..\third_party\bzip2\bzip2.vcproj", "{2A70CBF0-847E-4E3A-B926-542A656DC7FE}"
@@ -189,35 +183,35 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "npapi_layout_test_plugin",
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_shell", "..\webkit\tools\test_shell\test_shell.vcproj", "{FA39524D-3067-4141-888D-28A86C66F2B9}"
ProjectSection(ProjectDependencies) = postProject
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
- {1C16337B-ACF3-4D03-AA90-851C5B5EADA6} = {1C16337B-ACF3-4D03-AA90-851C5B5EADA6}
- {21E22961-22BF-4493-BD3A-868F93DA5179} = {21E22961-22BF-4493-BD3A-868F93DA5179}
- {238CE175-76CE-4A25-A676-69D115885601} = {238CE175-76CE-4A25-A676-69D115885601}
- {2A70CBF0-847E-4E3A-B926-542A656DC7FE} = {2A70CBF0-847E-4E3A-B926-542A656DC7FE}
- {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
- {3E03D462-780D-4C4D-B22E-5E095E6CF110} = {3E03D462-780D-4C4D-B22E-5E095E6CF110}
- {49909552-0B0C-4C14-8CF6-DB8A2ADE0934} = {49909552-0B0C-4C14-8CF6-DB8A2ADE0934}
- {5597AD47-3494-4750-A235-4F9C2F864700} = {5597AD47-3494-4750-A235-4F9C2F864700}
- {5916D37D-8C97-424F-A904-74E52594C2D6} = {5916D37D-8C97-424F-A904-74E52594C2D6}
- {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65} = {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65}
- {625A8F11-2B4E-45B4-BD99-C6D629C606C0} = {625A8F11-2B4E-45B4-BD99-C6D629C606C0}
- {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
- {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
- {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
- {9E5416B9-B91B-4029-93F4-102C1AD5CAF4} = {9E5416B9-B91B-4029-93F4-102C1AD5CAF4}
- {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6} = {AA8A5A85-592B-4357-BC60-E0E91E026AF6}
- {B55CA863-B374-4BAF-95AC-539E4FA4C90C} = {B55CA863-B374-4BAF-95AC-539E4FA4C90C}
- {BE6D5659-A8D5-4890-A42C-090DD10EF62C} = {BE6D5659-A8D5-4890-A42C-090DD10EF62C}
- {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
- {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
- {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09} = {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09}
- {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
- {EC8B7909-62AF-470D-A75D-E1D89C837142} = {EC8B7909-62AF-470D-A75D-E1D89C837142}
- {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
- {F4F4BCAA-EA59-445C-A119-3E6C29647A51} = {F4F4BCAA-EA59-445C-A119-3E6C29647A51}
- {F54ABC59-5C00-414A-A9BA-BAF26D1699F0} = {F54ABC59-5C00-414A-A9BA-BAF26D1699F0}
{FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED} = {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED}
+ {F54ABC59-5C00-414A-A9BA-BAF26D1699F0} = {F54ABC59-5C00-414A-A9BA-BAF26D1699F0}
+ {F4F4BCAA-EA59-445C-A119-3E6C29647A51} = {F4F4BCAA-EA59-445C-A119-3E6C29647A51}
+ {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
+ {EC8B7909-62AF-470D-A75D-E1D89C837142} = {EC8B7909-62AF-470D-A75D-E1D89C837142}
+ {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
+ {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09} = {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09}
+ {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
+ {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
+ {BE6D5659-A8D5-4890-A42C-090DD10EF62C} = {BE6D5659-A8D5-4890-A42C-090DD10EF62C}
+ {B55CA863-B374-4BAF-95AC-539E4FA4C90C} = {B55CA863-B374-4BAF-95AC-539E4FA4C90C}
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6} = {AA8A5A85-592B-4357-BC60-E0E91E026AF6}
+ {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
+ {9E5416B9-B91B-4029-93F4-102C1AD5CAF4} = {9E5416B9-B91B-4029-93F4-102C1AD5CAF4}
+ {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
+ {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
+ {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
+ {625A8F11-2B4E-45B4-BD99-C6D629C606C0} = {625A8F11-2B4E-45B4-BD99-C6D629C606C0}
+ {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65} = {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65}
+ {5916D37D-8C97-424F-A904-74E52594C2D6} = {5916D37D-8C97-424F-A904-74E52594C2D6}
+ {5597AD47-3494-4750-A235-4F9C2F864700} = {5597AD47-3494-4750-A235-4F9C2F864700}
+ {49909552-0B0C-4C14-8CF6-DB8A2ADE0934} = {49909552-0B0C-4C14-8CF6-DB8A2ADE0934}
+ {3E03D462-780D-4C4D-B22E-5E095E6CF110} = {3E03D462-780D-4C4D-B22E-5E095E6CF110}
+ {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
+ {2A70CBF0-847E-4E3A-B926-542A656DC7FE} = {2A70CBF0-847E-4E3A-B926-542A656DC7FE}
+ {238CE175-76CE-4A25-A676-69D115885601} = {238CE175-76CE-4A25-A676-69D115885601}
+ {21E22961-22BF-4493-BD3A-868F93DA5179} = {21E22961-22BF-4493-BD3A-868F93DA5179}
+ {1C16337B-ACF3-4D03-AA90-851C5B5EADA6} = {1C16337B-ACF3-4D03-AA90-851C5B5EADA6}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plugin", "plugin\plugin.vcproj", "{20A560A0-2CD0-4D9E-A58B-1F24B99C087A}"
@@ -226,217 +220,217 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "V8", "V8", "{B353A6A5-9551-
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "chrome_exe", "app\chrome_exe.vcproj", "{7B219FAA-E360-43C8-B341-804A94EEFFAC}"
ProjectSection(ProjectDependencies) = postProject
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
- {881F6A97-D539-4C48-B401-DF04385B2343} = {881F6A97-D539-4C48-B401-DF04385B2343}
- {89C1C190-A5D1-4EC4-BD6A-67FF2195C7CC} = {89C1C190-A5D1-4EC4-BD6A-67FF2195C7CC}
- {B55CA863-B374-4BAF-95AC-539E4FA4C90C} = {B55CA863-B374-4BAF-95AC-539E4FA4C90C}
- {C0A7EE2C-2A6D-45BE-BA78-6D006FDF52D9} = {C0A7EE2C-2A6D-45BE-BA78-6D006FDF52D9}
- {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3} = {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3}
- {EFBB1436-A63F-4CD8-9E99-B89226E782EC} = {EFBB1436-A63F-4CD8-9E99-B89226E782EC}
{FD683DD6-D9BF-4B1B-AB6D-A3AC03EDAA4D} = {FD683DD6-D9BF-4B1B-AB6D-A3AC03EDAA4D}
+ {EFBB1436-A63F-4CD8-9E99-B89226E782EC} = {EFBB1436-A63F-4CD8-9E99-B89226E782EC}
+ {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3} = {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3}
+ {C0A7EE2C-2A6D-45BE-BA78-6D006FDF52D9} = {C0A7EE2C-2A6D-45BE-BA78-6D006FDF52D9}
+ {B55CA863-B374-4BAF-95AC-539E4FA4C90C} = {B55CA863-B374-4BAF-95AC-539E4FA4C90C}
+ {89C1C190-A5D1-4EC4-BD6A-67FF2195C7CC} = {89C1C190-A5D1-4EC4-BD6A-67FF2195C7CC}
+ {881F6A97-D539-4C48-B401-DF04385B2343} = {881F6A97-D539-4C48-B401-DF04385B2343}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "perf_tests", "test\perf\perftests.vcproj", "{9055E088-25C6-47FD-87D5-D9DD9FD75C9F}"
ProjectSection(ProjectDependencies) = postProject
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
- {1C16337B-ACF3-4D03-AA90-851C5B5EADA6} = {1C16337B-ACF3-4D03-AA90-851C5B5EADA6}
- {20A560A0-2CD0-4D9E-A58B-1F24B99C087A} = {20A560A0-2CD0-4D9E-A58B-1F24B99C087A}
- {21E22961-22BF-4493-BD3A-868F93DA5179} = {21E22961-22BF-4493-BD3A-868F93DA5179}
- {238CE175-76CE-4A25-A676-69D115885601} = {238CE175-76CE-4A25-A676-69D115885601}
- {2A70CBF0-847E-4E3A-B926-542A656DC7FE} = {2A70CBF0-847E-4E3A-B926-542A656DC7FE}
- {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
- {4631946D-7D5F-44BD-A5A8-504C0A7033BE} = {4631946D-7D5F-44BD-A5A8-504C0A7033BE}
- {49909552-0B0C-4C14-8CF6-DB8A2ADE0934} = {49909552-0B0C-4C14-8CF6-DB8A2ADE0934}
- {5597AD47-3494-4750-A235-4F9C2F864700} = {5597AD47-3494-4750-A235-4F9C2F864700}
- {57823D8C-A317-4713-9125-2C91FDFD12D6} = {57823D8C-A317-4713-9125-2C91FDFD12D6}
- {5916D37D-8C97-424F-A904-74E52594C2D6} = {5916D37D-8C97-424F-A904-74E52594C2D6}
- {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA} = {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}
- {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65} = {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65}
- {625A8F11-2B4E-45B4-BD99-C6D629C606C0} = {625A8F11-2B4E-45B4-BD99-C6D629C606C0}
- {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9} = {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9}
- {6F9258E5-294F-47B2-919D-17FFE7A8B751} = {6F9258E5-294F-47B2-919D-17FFE7A8B751}
- {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
- {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
- {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
- {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
- {9301A569-5D2B-4D11-9332-B1E30AEACB8D} = {9301A569-5D2B-4D11-9332-B1E30AEACB8D}
- {9E5416B9-B91B-4029-93F4-102C1AD5CAF4} = {9E5416B9-B91B-4029-93F4-102C1AD5CAF4}
- {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6} = {AA8A5A85-592B-4357-BC60-E0E91E026AF6}
- {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
- {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
- {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09} = {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09}
- {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
- {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E} = {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E}
- {EC8B7909-62AF-470D-A75D-E1D89C837142} = {EC8B7909-62AF-470D-A75D-E1D89C837142}
- {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
- {EFBB1436-A63F-4CD8-9E99-B89226E782EC} = {EFBB1436-A63F-4CD8-9E99-B89226E782EC}
- {F4F4BCAA-EA59-445C-A119-3E6C29647A51} = {F4F4BCAA-EA59-445C-A119-3E6C29647A51}
- {F54ABC59-5C00-414A-A9BA-BAF26D1699F0} = {F54ABC59-5C00-414A-A9BA-BAF26D1699F0}
- {FA537565-7B03-4FFC-AF15-F7A979B72E22} = {FA537565-7B03-4FFC-AF15-F7A979B72E22}
{FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED} = {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED}
+ {FA537565-7B03-4FFC-AF15-F7A979B72E22} = {FA537565-7B03-4FFC-AF15-F7A979B72E22}
+ {F54ABC59-5C00-414A-A9BA-BAF26D1699F0} = {F54ABC59-5C00-414A-A9BA-BAF26D1699F0}
+ {F4F4BCAA-EA59-445C-A119-3E6C29647A51} = {F4F4BCAA-EA59-445C-A119-3E6C29647A51}
+ {EFBB1436-A63F-4CD8-9E99-B89226E782EC} = {EFBB1436-A63F-4CD8-9E99-B89226E782EC}
+ {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
+ {EC8B7909-62AF-470D-A75D-E1D89C837142} = {EC8B7909-62AF-470D-A75D-E1D89C837142}
+ {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E} = {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E}
+ {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
+ {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09} = {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09}
+ {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
+ {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6} = {AA8A5A85-592B-4357-BC60-E0E91E026AF6}
+ {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
+ {9E5416B9-B91B-4029-93F4-102C1AD5CAF4} = {9E5416B9-B91B-4029-93F4-102C1AD5CAF4}
+ {9301A569-5D2B-4D11-9332-B1E30AEACB8D} = {9301A569-5D2B-4D11-9332-B1E30AEACB8D}
+ {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
+ {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
+ {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
+ {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
+ {6F9258E5-294F-47B2-919D-17FFE7A8B751} = {6F9258E5-294F-47B2-919D-17FFE7A8B751}
+ {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9} = {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9}
+ {625A8F11-2B4E-45B4-BD99-C6D629C606C0} = {625A8F11-2B4E-45B4-BD99-C6D629C606C0}
+ {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65} = {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65}
+ {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA} = {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}
+ {5916D37D-8C97-424F-A904-74E52594C2D6} = {5916D37D-8C97-424F-A904-74E52594C2D6}
+ {57823D8C-A317-4713-9125-2C91FDFD12D6} = {57823D8C-A317-4713-9125-2C91FDFD12D6}
+ {5597AD47-3494-4750-A235-4F9C2F864700} = {5597AD47-3494-4750-A235-4F9C2F864700}
+ {49909552-0B0C-4C14-8CF6-DB8A2ADE0934} = {49909552-0B0C-4C14-8CF6-DB8A2ADE0934}
+ {4631946D-7D5F-44BD-A5A8-504C0A7033BE} = {4631946D-7D5F-44BD-A5A8-504C0A7033BE}
+ {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
+ {2A70CBF0-847E-4E3A-B926-542A656DC7FE} = {2A70CBF0-847E-4E3A-B926-542A656DC7FE}
+ {238CE175-76CE-4A25-A676-69D115885601} = {238CE175-76CE-4A25-A676-69D115885601}
+ {21E22961-22BF-4493-BD3A-868F93DA5179} = {21E22961-22BF-4493-BD3A-868F93DA5179}
+ {20A560A0-2CD0-4D9E-A58B-1F24B99C087A} = {20A560A0-2CD0-4D9E-A58B-1F24B99C087A}
+ {1C16337B-ACF3-4D03-AA90-851C5B5EADA6} = {1C16337B-ACF3-4D03-AA90-851C5B5EADA6}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unit_tests", "test\unit\unittests.vcproj", "{ECFC2BEC-9FC0-4AD9-9649-5F26793F65FC}"
ProjectSection(ProjectDependencies) = postProject
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
- {1C16337B-ACF3-4D03-AA90-851C5B5EADA6} = {1C16337B-ACF3-4D03-AA90-851C5B5EADA6}
- {20A560A0-2CD0-4D9E-A58B-1F24B99C087A} = {20A560A0-2CD0-4D9E-A58B-1F24B99C087A}
- {21E22961-22BF-4493-BD3A-868F93DA5179} = {21E22961-22BF-4493-BD3A-868F93DA5179}
- {238CE175-76CE-4A25-A676-69D115885601} = {238CE175-76CE-4A25-A676-69D115885601}
- {2A70CBF0-847E-4E3A-B926-542A656DC7FE} = {2A70CBF0-847E-4E3A-B926-542A656DC7FE}
- {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
- {4631946D-7D5F-44BD-A5A8-504C0A7033BE} = {4631946D-7D5F-44BD-A5A8-504C0A7033BE}
- {49909552-0B0C-4C14-8CF6-DB8A2ADE0934} = {49909552-0B0C-4C14-8CF6-DB8A2ADE0934}
- {5597AD47-3494-4750-A235-4F9C2F864700} = {5597AD47-3494-4750-A235-4F9C2F864700}
- {57823D8C-A317-4713-9125-2C91FDFD12D6} = {57823D8C-A317-4713-9125-2C91FDFD12D6}
- {5916D37D-8C97-424F-A904-74E52594C2D6} = {5916D37D-8C97-424F-A904-74E52594C2D6}
- {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA} = {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}
- {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65} = {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65}
- {625A8F11-2B4E-45B4-BD99-C6D629C606C0} = {625A8F11-2B4E-45B4-BD99-C6D629C606C0}
- {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9} = {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9}
- {6F9258E5-294F-47B2-919D-17FFE7A8B751} = {6F9258E5-294F-47B2-919D-17FFE7A8B751}
- {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
- {7B219FAA-E360-43C8-B341-804A94EEFFAC} = {7B219FAA-E360-43C8-B341-804A94EEFFAC}
- {7F0A70F6-BE3F-4C19-B435-956AB8F30BA4} = {7F0A70F6-BE3F-4C19-B435-956AB8F30BA4}
- {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
- {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
- {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
- {9301A569-5D2B-4D11-9332-B1E30AEACB8D} = {9301A569-5D2B-4D11-9332-B1E30AEACB8D}
- {9E5416B9-B91B-4029-93F4-102C1AD5CAF4} = {9E5416B9-B91B-4029-93F4-102C1AD5CAF4}
- {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6} = {AA8A5A85-592B-4357-BC60-E0E91E026AF6}
- {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE} = {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE}
- {BF4F447B-72B5-4059-BE1B-F94337B1F385} = {BF4F447B-72B5-4059-BE1B-F94337B1F385}
- {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
- {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
- {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09} = {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09}
- {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3} = {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3}
- {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
- {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E} = {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E}
- {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
- {EC8B7909-62AF-470D-A75D-E1D89C837142} = {EC8B7909-62AF-470D-A75D-E1D89C837142}
- {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
- {EFBB1436-A63F-4CD8-9E99-B89226E782EC} = {EFBB1436-A63F-4CD8-9E99-B89226E782EC}
- {F4F4BCAA-EA59-445C-A119-3E6C29647A51} = {F4F4BCAA-EA59-445C-A119-3E6C29647A51}
- {F54ABC59-5C00-414A-A9BA-BAF26D1699F0} = {F54ABC59-5C00-414A-A9BA-BAF26D1699F0}
- {FA537565-7B03-4FFC-AF15-F7A979B72E22} = {FA537565-7B03-4FFC-AF15-F7A979B72E22}
- {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED} = {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED}
{FD683DD6-D9BF-4B1B-AB6D-A3AC03EDAA4D} = {FD683DD6-D9BF-4B1B-AB6D-A3AC03EDAA4D}
+ {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED} = {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED}
+ {FA537565-7B03-4FFC-AF15-F7A979B72E22} = {FA537565-7B03-4FFC-AF15-F7A979B72E22}
+ {F54ABC59-5C00-414A-A9BA-BAF26D1699F0} = {F54ABC59-5C00-414A-A9BA-BAF26D1699F0}
+ {F4F4BCAA-EA59-445C-A119-3E6C29647A51} = {F4F4BCAA-EA59-445C-A119-3E6C29647A51}
+ {EFBB1436-A63F-4CD8-9E99-B89226E782EC} = {EFBB1436-A63F-4CD8-9E99-B89226E782EC}
+ {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
+ {EC8B7909-62AF-470D-A75D-E1D89C837142} = {EC8B7909-62AF-470D-A75D-E1D89C837142}
+ {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E} = {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E}
+ {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
+ {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3} = {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3}
+ {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09} = {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09}
+ {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
+ {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
+ {BF4F447B-72B5-4059-BE1B-F94337B1F385} = {BF4F447B-72B5-4059-BE1B-F94337B1F385}
+ {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE} = {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE}
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6} = {AA8A5A85-592B-4357-BC60-E0E91E026AF6}
+ {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
+ {9E5416B9-B91B-4029-93F4-102C1AD5CAF4} = {9E5416B9-B91B-4029-93F4-102C1AD5CAF4}
+ {9301A569-5D2B-4D11-9332-B1E30AEACB8D} = {9301A569-5D2B-4D11-9332-B1E30AEACB8D}
+ {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
+ {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
+ {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
+ {7F0A70F6-BE3F-4C19-B435-956AB8F30BA4} = {7F0A70F6-BE3F-4C19-B435-956AB8F30BA4}
+ {7B219FAA-E360-43C8-B341-804A94EEFFAC} = {7B219FAA-E360-43C8-B341-804A94EEFFAC}
+ {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
+ {6F9258E5-294F-47B2-919D-17FFE7A8B751} = {6F9258E5-294F-47B2-919D-17FFE7A8B751}
+ {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9} = {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9}
+ {625A8F11-2B4E-45B4-BD99-C6D629C606C0} = {625A8F11-2B4E-45B4-BD99-C6D629C606C0}
+ {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65} = {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65}
+ {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA} = {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}
+ {5916D37D-8C97-424F-A904-74E52594C2D6} = {5916D37D-8C97-424F-A904-74E52594C2D6}
+ {57823D8C-A317-4713-9125-2C91FDFD12D6} = {57823D8C-A317-4713-9125-2C91FDFD12D6}
+ {5597AD47-3494-4750-A235-4F9C2F864700} = {5597AD47-3494-4750-A235-4F9C2F864700}
+ {49909552-0B0C-4C14-8CF6-DB8A2ADE0934} = {49909552-0B0C-4C14-8CF6-DB8A2ADE0934}
+ {4631946D-7D5F-44BD-A5A8-504C0A7033BE} = {4631946D-7D5F-44BD-A5A8-504C0A7033BE}
+ {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
+ {2A70CBF0-847E-4E3A-B926-542A656DC7FE} = {2A70CBF0-847E-4E3A-B926-542A656DC7FE}
+ {238CE175-76CE-4A25-A676-69D115885601} = {238CE175-76CE-4A25-A676-69D115885601}
+ {21E22961-22BF-4493-BD3A-868F93DA5179} = {21E22961-22BF-4493-BD3A-868F93DA5179}
+ {20A560A0-2CD0-4D9E-A58B-1F24B99C087A} = {20A560A0-2CD0-4D9E-A58B-1F24B99C087A}
+ {1C16337B-ACF3-4D03-AA90-851C5B5EADA6} = {1C16337B-ACF3-4D03-AA90-851C5B5EADA6}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Test", "Test", "{1174D37F-6ABB-45DA-81B3-C631281273B7}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "page_cycler_tests", "test\page_cycler\page_cycler_tests.vcproj", "{C9E0BD1D-B175-4A91-8380-3FDC81FAB9D7}"
ProjectSection(ProjectDependencies) = postProject
- {1556EF78-C7E6-43C8-951F-F6B43AC0DD12} = {1556EF78-C7E6-43C8-951F-F6B43AC0DD12}
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
- {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
- {4631946D-7D5F-44BD-A5A8-504C0A7033BE} = {4631946D-7D5F-44BD-A5A8-504C0A7033BE}
- {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA} = {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}
- {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
- {7B219FAA-E360-43C8-B341-804A94EEFFAC} = {7B219FAA-E360-43C8-B341-804A94EEFFAC}
- {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
- {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
- {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
- {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
- {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
- {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
- {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
- {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
{FA537565-7B03-4FFC-AF15-F7A979B72E22} = {FA537565-7B03-4FFC-AF15-F7A979B72E22}
+ {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
+ {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
+ {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
+ {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
+ {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
+ {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
+ {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
+ {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
+ {7B219FAA-E360-43C8-B341-804A94EEFFAC} = {7B219FAA-E360-43C8-B341-804A94EEFFAC}
+ {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
+ {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA} = {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}
+ {4631946D-7D5F-44BD-A5A8-504C0A7033BE} = {4631946D-7D5F-44BD-A5A8-504C0A7033BE}
+ {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
+ {1556EF78-C7E6-43C8-951F-F6B43AC0DD12} = {1556EF78-C7E6-43C8-951F-F6B43AC0DD12}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "reliability_tests", "test\reliability\reliability_tests.vcproj", "{8A3E1774-1DE9-445C-982D-3EE37C8A752A}"
ProjectSection(ProjectDependencies) = postProject
- {1556EF78-C7E6-43C8-951F-F6B43AC0DD12} = {1556EF78-C7E6-43C8-951F-F6B43AC0DD12}
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
- {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
- {4631946D-7D5F-44BD-A5A8-504C0A7033BE} = {4631946D-7D5F-44BD-A5A8-504C0A7033BE}
- {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA} = {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}
- {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
- {7B219FAA-E360-43C8-B341-804A94EEFFAC} = {7B219FAA-E360-43C8-B341-804A94EEFFAC}
- {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
- {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
- {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
- {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
- {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
- {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
- {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
- {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
{FA537565-7B03-4FFC-AF15-F7A979B72E22} = {FA537565-7B03-4FFC-AF15-F7A979B72E22}
+ {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
+ {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
+ {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
+ {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
+ {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
+ {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
+ {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
+ {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
+ {7B219FAA-E360-43C8-B341-804A94EEFFAC} = {7B219FAA-E360-43C8-B341-804A94EEFFAC}
+ {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
+ {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA} = {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}
+ {4631946D-7D5F-44BD-A5A8-504C0A7033BE} = {4631946D-7D5F-44BD-A5A8-504C0A7033BE}
+ {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
+ {1556EF78-C7E6-43C8-951F-F6B43AC0DD12} = {1556EF78-C7E6-43C8-951F-F6B43AC0DD12}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "selenium_tests", "test\selenium\selenium_tests.vcproj", "{E3749617-BA3D-4230-B54C-B758E56D9FA5}"
ProjectSection(ProjectDependencies) = postProject
- {1556EF78-C7E6-43C8-951F-F6B43AC0DD12} = {1556EF78-C7E6-43C8-951F-F6B43AC0DD12}
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
- {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
- {4631946D-7D5F-44BD-A5A8-504C0A7033BE} = {4631946D-7D5F-44BD-A5A8-504C0A7033BE}
- {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA} = {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}
- {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
- {7B219FAA-E360-43C8-B341-804A94EEFFAC} = {7B219FAA-E360-43C8-B341-804A94EEFFAC}
- {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
- {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
- {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
- {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
- {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
- {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
- {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
- {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
{FA537565-7B03-4FFC-AF15-F7A979B72E22} = {FA537565-7B03-4FFC-AF15-F7A979B72E22}
+ {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
+ {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
+ {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
+ {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
+ {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
+ {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
+ {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
+ {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
+ {7B219FAA-E360-43C8-B341-804A94EEFFAC} = {7B219FAA-E360-43C8-B341-804A94EEFFAC}
+ {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
+ {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA} = {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}
+ {4631946D-7D5F-44BD-A5A8-504C0A7033BE} = {4631946D-7D5F-44BD-A5A8-504C0A7033BE}
+ {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
+ {1556EF78-C7E6-43C8-951F-F6B43AC0DD12} = {1556EF78-C7E6-43C8-951F-F6B43AC0DD12}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "startup_tests", "test\startup\startup_tests.vcproj", "{D3E6C0FD-54C7-4FF2-9AE1-72F2DAFD820C}"
ProjectSection(ProjectDependencies) = postProject
- {1556EF78-C7E6-43C8-951F-F6B43AC0DD12} = {1556EF78-C7E6-43C8-951F-F6B43AC0DD12}
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
- {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
- {4631946D-7D5F-44BD-A5A8-504C0A7033BE} = {4631946D-7D5F-44BD-A5A8-504C0A7033BE}
- {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA} = {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}
- {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
- {7B219FAA-E360-43C8-B341-804A94EEFFAC} = {7B219FAA-E360-43C8-B341-804A94EEFFAC}
- {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
- {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
- {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
- {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
- {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
- {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
- {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
- {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
{FA537565-7B03-4FFC-AF15-F7A979B72E22} = {FA537565-7B03-4FFC-AF15-F7A979B72E22}
+ {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
+ {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
+ {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
+ {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
+ {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
+ {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
+ {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
+ {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
+ {7B219FAA-E360-43C8-B341-804A94EEFFAC} = {7B219FAA-E360-43C8-B341-804A94EEFFAC}
+ {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
+ {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA} = {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}
+ {4631946D-7D5F-44BD-A5A8-504C0A7033BE} = {4631946D-7D5F-44BD-A5A8-504C0A7033BE}
+ {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
+ {1556EF78-C7E6-43C8-951F-F6B43AC0DD12} = {1556EF78-C7E6-43C8-951F-F6B43AC0DD12}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ui_tests", "test\ui\ui_tests.vcproj", "{76235B67-1C27-4627-8A33-4B2E1EF93EDE}"
ProjectSection(ProjectDependencies) = postProject
- {0D04AEC1-6B68-492C-BCCF-808DFD69ABC6} = {0D04AEC1-6B68-492C-BCCF-808DFD69ABC6}
- {1556EF78-C7E6-43C8-951F-F6B43AC0DD12} = {1556EF78-C7E6-43C8-951F-F6B43AC0DD12}
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
- {21E22961-22BF-4493-BD3A-868F93DA5179} = {21E22961-22BF-4493-BD3A-868F93DA5179}
- {2A70CBF0-847E-4E3A-B926-542A656DC7FE} = {2A70CBF0-847E-4E3A-B926-542A656DC7FE}
- {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
- {4631946D-7D5F-44BD-A5A8-504C0A7033BE} = {4631946D-7D5F-44BD-A5A8-504C0A7033BE}
- {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA} = {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}
- {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
- {7B219FAA-E360-43C8-B341-804A94EEFFAC} = {7B219FAA-E360-43C8-B341-804A94EEFFAC}
- {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
- {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
- {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
- {A28310B8-7BD0-4CDF-A7D8-59CAB42AA1C4} = {A28310B8-7BD0-4CDF-A7D8-59CAB42AA1C4}
- {A493331B-3180-49FE-8D0E-D121645E63AD} = {A493331B-3180-49FE-8D0E-D121645E63AD}
- {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
- {BE6D5659-A8D5-4890-A42C-090DD10EF62C} = {BE6D5659-A8D5-4890-A42C-090DD10EF62C}
- {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
- {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
- {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3} = {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3}
- {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
- {E750512D-FC7C-4C98-BF04-0A0DAF882055} = {E750512D-FC7C-4C98-BF04-0A0DAF882055}
- {E7B11CF0-FE40-4A69-AE20-1B882F4D7585} = {E7B11CF0-FE40-4A69-AE20-1B882F4D7585}
- {EC8B7909-62AF-470D-A75D-E1D89C837142} = {EC8B7909-62AF-470D-A75D-E1D89C837142}
- {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
- {F54ABC59-5C00-414A-A9BA-BAF26D1699F0} = {F54ABC59-5C00-414A-A9BA-BAF26D1699F0}
- {F9810DE8-CBC3-4605-A7B1-ECA2D5292FD7} = {F9810DE8-CBC3-4605-A7B1-ECA2D5292FD7}
{FA537565-7B03-4FFC-AF15-F7A979B72E22} = {FA537565-7B03-4FFC-AF15-F7A979B72E22}
+ {F9810DE8-CBC3-4605-A7B1-ECA2D5292FD7} = {F9810DE8-CBC3-4605-A7B1-ECA2D5292FD7}
+ {F54ABC59-5C00-414A-A9BA-BAF26D1699F0} = {F54ABC59-5C00-414A-A9BA-BAF26D1699F0}
+ {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
+ {EC8B7909-62AF-470D-A75D-E1D89C837142} = {EC8B7909-62AF-470D-A75D-E1D89C837142}
+ {E7B11CF0-FE40-4A69-AE20-1B882F4D7585} = {E7B11CF0-FE40-4A69-AE20-1B882F4D7585}
+ {E750512D-FC7C-4C98-BF04-0A0DAF882055} = {E750512D-FC7C-4C98-BF04-0A0DAF882055}
+ {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
+ {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3} = {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3}
+ {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
+ {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
+ {BE6D5659-A8D5-4890-A42C-090DD10EF62C} = {BE6D5659-A8D5-4890-A42C-090DD10EF62C}
+ {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
+ {A493331B-3180-49FE-8D0E-D121645E63AD} = {A493331B-3180-49FE-8D0E-D121645E63AD}
+ {A28310B8-7BD0-4CDF-A7D8-59CAB42AA1C4} = {A28310B8-7BD0-4CDF-A7D8-59CAB42AA1C4}
+ {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
+ {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
+ {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
+ {7B219FAA-E360-43C8-B341-804A94EEFFAC} = {7B219FAA-E360-43C8-B341-804A94EEFFAC}
+ {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
+ {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA} = {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}
+ {4631946D-7D5F-44BD-A5A8-504C0A7033BE} = {4631946D-7D5F-44BD-A5A8-504C0A7033BE}
+ {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
+ {2A70CBF0-847E-4E3A-B926-542A656DC7FE} = {2A70CBF0-847E-4E3A-B926-542A656DC7FE}
+ {21E22961-22BF-4493-BD3A-868F93DA5179} = {21E22961-22BF-4493-BD3A-868F93DA5179}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
+ {1556EF78-C7E6-43C8-951F-F6B43AC0DD12} = {1556EF78-C7E6-43C8-951F-F6B43AC0DD12}
+ {0D04AEC1-6B68-492C-BCCF-808DFD69ABC6} = {0D04AEC1-6B68-492C-BCCF-808DFD69ABC6}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sandbox", "..\sandbox\sandbox.vcproj", "{881F6A97-D539-4C48-B401-DF04385B2343}"
@@ -445,72 +439,72 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{846901FD
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "generate_profile", "tools\profiles\generate_profile.vcproj", "{2E969AE9-7B12-4EDB-8E8B-48C7AE7BE357}"
ProjectSection(ProjectDependencies) = postProject
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
- {1C16337B-ACF3-4D03-AA90-851C5B5EADA6} = {1C16337B-ACF3-4D03-AA90-851C5B5EADA6}
- {20A560A0-2CD0-4D9E-A58B-1F24B99C087A} = {20A560A0-2CD0-4D9E-A58B-1F24B99C087A}
- {21E22961-22BF-4493-BD3A-868F93DA5179} = {21E22961-22BF-4493-BD3A-868F93DA5179}
- {238CE175-76CE-4A25-A676-69D115885601} = {238CE175-76CE-4A25-A676-69D115885601}
- {2A70CBF0-847E-4E3A-B926-542A656DC7FE} = {2A70CBF0-847E-4E3A-B926-542A656DC7FE}
- {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
- {4631946D-7D5F-44BD-A5A8-504C0A7033BE} = {4631946D-7D5F-44BD-A5A8-504C0A7033BE}
- {49909552-0B0C-4C14-8CF6-DB8A2ADE0934} = {49909552-0B0C-4C14-8CF6-DB8A2ADE0934}
- {57823D8C-A317-4713-9125-2C91FDFD12D6} = {57823D8C-A317-4713-9125-2C91FDFD12D6}
- {5916D37D-8C97-424F-A904-74E52594C2D6} = {5916D37D-8C97-424F-A904-74E52594C2D6}
- {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA} = {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}
- {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65} = {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65}
- {625A8F11-2B4E-45B4-BD99-C6D629C606C0} = {625A8F11-2B4E-45B4-BD99-C6D629C606C0}
- {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9} = {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9}
- {6F9258E5-294F-47B2-919D-17FFE7A8B751} = {6F9258E5-294F-47B2-919D-17FFE7A8B751}
- {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
- {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
- {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
- {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
- {9301A569-5D2B-4D11-9332-B1E30AEACB8D} = {9301A569-5D2B-4D11-9332-B1E30AEACB8D}
- {9E5416B9-B91B-4029-93F4-102C1AD5CAF4} = {9E5416B9-B91B-4029-93F4-102C1AD5CAF4}
- {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6} = {AA8A5A85-592B-4357-BC60-E0E91E026AF6}
- {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
- {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09} = {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09}
- {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
- {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E} = {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E}
- {EC8B7909-62AF-470D-A75D-E1D89C837142} = {EC8B7909-62AF-470D-A75D-E1D89C837142}
- {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
- {EFBB1436-A63F-4CD8-9E99-B89226E782EC} = {EFBB1436-A63F-4CD8-9E99-B89226E782EC}
- {F4F4BCAA-EA59-445C-A119-3E6C29647A51} = {F4F4BCAA-EA59-445C-A119-3E6C29647A51}
- {F54ABC59-5C00-414A-A9BA-BAF26D1699F0} = {F54ABC59-5C00-414A-A9BA-BAF26D1699F0}
- {FA537565-7B03-4FFC-AF15-F7A979B72E22} = {FA537565-7B03-4FFC-AF15-F7A979B72E22}
{FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED} = {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED}
+ {FA537565-7B03-4FFC-AF15-F7A979B72E22} = {FA537565-7B03-4FFC-AF15-F7A979B72E22}
+ {F54ABC59-5C00-414A-A9BA-BAF26D1699F0} = {F54ABC59-5C00-414A-A9BA-BAF26D1699F0}
+ {F4F4BCAA-EA59-445C-A119-3E6C29647A51} = {F4F4BCAA-EA59-445C-A119-3E6C29647A51}
+ {EFBB1436-A63F-4CD8-9E99-B89226E782EC} = {EFBB1436-A63F-4CD8-9E99-B89226E782EC}
+ {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
+ {EC8B7909-62AF-470D-A75D-E1D89C837142} = {EC8B7909-62AF-470D-A75D-E1D89C837142}
+ {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E} = {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E}
+ {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
+ {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09} = {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09}
+ {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6} = {AA8A5A85-592B-4357-BC60-E0E91E026AF6}
+ {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
+ {9E5416B9-B91B-4029-93F4-102C1AD5CAF4} = {9E5416B9-B91B-4029-93F4-102C1AD5CAF4}
+ {9301A569-5D2B-4D11-9332-B1E30AEACB8D} = {9301A569-5D2B-4D11-9332-B1E30AEACB8D}
+ {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
+ {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
+ {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
+ {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
+ {6F9258E5-294F-47B2-919D-17FFE7A8B751} = {6F9258E5-294F-47B2-919D-17FFE7A8B751}
+ {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9} = {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9}
+ {625A8F11-2B4E-45B4-BD99-C6D629C606C0} = {625A8F11-2B4E-45B4-BD99-C6D629C606C0}
+ {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65} = {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65}
+ {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA} = {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}
+ {5916D37D-8C97-424F-A904-74E52594C2D6} = {5916D37D-8C97-424F-A904-74E52594C2D6}
+ {57823D8C-A317-4713-9125-2C91FDFD12D6} = {57823D8C-A317-4713-9125-2C91FDFD12D6}
+ {49909552-0B0C-4C14-8CF6-DB8A2ADE0934} = {49909552-0B0C-4C14-8CF6-DB8A2ADE0934}
+ {4631946D-7D5F-44BD-A5A8-504C0A7033BE} = {4631946D-7D5F-44BD-A5A8-504C0A7033BE}
+ {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
+ {2A70CBF0-847E-4E3A-B926-542A656DC7FE} = {2A70CBF0-847E-4E3A-B926-542A656DC7FE}
+ {238CE175-76CE-4A25-A676-69D115885601} = {238CE175-76CE-4A25-A676-69D115885601}
+ {21E22961-22BF-4493-BD3A-868F93DA5179} = {21E22961-22BF-4493-BD3A-868F93DA5179}
+ {20A560A0-2CD0-4D9E-A58B-1F24B99C087A} = {20A560A0-2CD0-4D9E-A58B-1F24B99C087A}
+ {1C16337B-ACF3-4D03-AA90-851C5B5EADA6} = {1C16337B-ACF3-4D03-AA90-851C5B5EADA6}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_shell_tests", "..\webkit\tools\test_shell\test_shell_tests.vcproj", "{E6766F81-1FCD-4CD7-BC16-E36964A14867}"
ProjectSection(ProjectDependencies) = postProject
- {0D04AEC1-6B68-492C-BCCF-808DFD69ABC6} = {0D04AEC1-6B68-492C-BCCF-808DFD69ABC6}
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
- {1C16337B-ACF3-4D03-AA90-851C5B5EADA6} = {1C16337B-ACF3-4D03-AA90-851C5B5EADA6}
- {21E22961-22BF-4493-BD3A-868F93DA5179} = {21E22961-22BF-4493-BD3A-868F93DA5179}
- {238CE175-76CE-4A25-A676-69D115885601} = {238CE175-76CE-4A25-A676-69D115885601}
- {2A70CBF0-847E-4E3A-B926-542A656DC7FE} = {2A70CBF0-847E-4E3A-B926-542A656DC7FE}
- {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
- {49909552-0B0C-4C14-8CF6-DB8A2ADE0934} = {49909552-0B0C-4C14-8CF6-DB8A2ADE0934}
- {5597AD47-3494-4750-A235-4F9C2F864700} = {5597AD47-3494-4750-A235-4F9C2F864700}
- {5916D37D-8C97-424F-A904-74E52594C2D6} = {5916D37D-8C97-424F-A904-74E52594C2D6}
- {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65} = {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65}
- {625A8F11-2B4E-45B4-BD99-C6D629C606C0} = {625A8F11-2B4E-45B4-BD99-C6D629C606C0}
- {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
- {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
- {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
- {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6} = {AA8A5A85-592B-4357-BC60-E0E91E026AF6}
- {B55CA863-B374-4BAF-95AC-539E4FA4C90C} = {B55CA863-B374-4BAF-95AC-539E4FA4C90C}
- {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
- {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
- {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09} = {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09}
- {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
- {EC8B7909-62AF-470D-A75D-E1D89C837142} = {EC8B7909-62AF-470D-A75D-E1D89C837142}
- {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
- {F4F4BCAA-EA59-445C-A119-3E6C29647A51} = {F4F4BCAA-EA59-445C-A119-3E6C29647A51}
- {F54ABC59-5C00-414A-A9BA-BAF26D1699F0} = {F54ABC59-5C00-414A-A9BA-BAF26D1699F0}
{FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED} = {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED}
+ {F54ABC59-5C00-414A-A9BA-BAF26D1699F0} = {F54ABC59-5C00-414A-A9BA-BAF26D1699F0}
+ {F4F4BCAA-EA59-445C-A119-3E6C29647A51} = {F4F4BCAA-EA59-445C-A119-3E6C29647A51}
+ {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
+ {EC8B7909-62AF-470D-A75D-E1D89C837142} = {EC8B7909-62AF-470D-A75D-E1D89C837142}
+ {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
+ {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09} = {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09}
+ {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
+ {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
+ {B55CA863-B374-4BAF-95AC-539E4FA4C90C} = {B55CA863-B374-4BAF-95AC-539E4FA4C90C}
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6} = {AA8A5A85-592B-4357-BC60-E0E91E026AF6}
+ {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
+ {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
+ {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
+ {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
+ {625A8F11-2B4E-45B4-BD99-C6D629C606C0} = {625A8F11-2B4E-45B4-BD99-C6D629C606C0}
+ {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65} = {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65}
+ {5916D37D-8C97-424F-A904-74E52594C2D6} = {5916D37D-8C97-424F-A904-74E52594C2D6}
+ {5597AD47-3494-4750-A235-4F9C2F864700} = {5597AD47-3494-4750-A235-4F9C2F864700}
+ {49909552-0B0C-4C14-8CF6-DB8A2ADE0934} = {49909552-0B0C-4C14-8CF6-DB8A2ADE0934}
+ {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
+ {2A70CBF0-847E-4E3A-B926-542A656DC7FE} = {2A70CBF0-847E-4E3A-B926-542A656DC7FE}
+ {238CE175-76CE-4A25-A676-69D115885601} = {238CE175-76CE-4A25-A676-69D115885601}
+ {21E22961-22BF-4493-BD3A-868F93DA5179} = {21E22961-22BF-4493-BD3A-868F93DA5179}
+ {1C16337B-ACF3-4D03-AA90-851C5B5EADA6} = {1C16337B-ACF3-4D03-AA90-851C5B5EADA6}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
+ {0D04AEC1-6B68-492C-BCCF-808DFD69ABC6} = {0D04AEC1-6B68-492C-BCCF-808DFD69ABC6}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "V8Config", "..\webkit\build\JSConfig\V8Config.vcproj", "{2E2D3301-2EC4-4C0F-B889-87073B30F673}"
@@ -519,9 +513,9 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "stats_viewer", "..\tools\st
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "en-US", "app\locales\en-US.vcproj", "{CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3}"
ProjectSection(ProjectDependencies) = postProject
- {0B469837-3D46-484A-AFB3-C5A6C68730B9} = {0B469837-3D46-484A-AFB3-C5A6C68730B9}
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
+ {0B469837-3D46-484A-AFB3-C5A6C68730B9} = {0B469837-3D46-484A-AFB3-C5A6C68730B9}
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "locales", "locales", "{2325D8C4-8EF5-42AC-8900-492225750DE4}"
@@ -544,67 +538,67 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "googleurl", "..\build\temp_
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "npapi_test_plugin", "..\webkit\glue\plugins\test\npapi_test_plugin.vcproj", "{0D04AEC1-6B68-492C-BCCF-808DFD69ABC6}"
ProjectSection(ProjectDependencies) = postProject
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
{8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "flush_cache", "tools\perf\flush_cache\flush_cache.vcproj", "{4539AFB3-B8DC-47F3-A491-6DAC8FD26657}"
ProjectSection(ProjectDependencies) = postProject
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
{8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "modp_b64", "..\third_party\modp_b64\modp_b64.vcproj", "{7100F41F-868D-4E99-80A2-AF8E6574749D}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "activex_shim", "..\webkit\activex_shim\activex_shim.vcproj", "{F4F4BCAA-EA59-445C-A119-3E6C29647A51}"
ProjectSection(ProjectDependencies) = postProject
- {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
{EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
+ {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "net", "..\net\net.vcproj", "{326E9795-E760-410A-B69A-3F79DB3F5243}"
ProjectSection(ProjectDependencies) = postProject
- {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942} = {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}
- {E13045CD-7E1F-4A41-9B18-8D288B2E7B41} = {E13045CD-7E1F-4A41-9B18-8D288B2E7B41}
{ED19720A-8F14-D3FC-9C6D-EEB5AE4D5BD7} = {ED19720A-8F14-D3FC-9C6D-EEB5AE4D5BD7}
+ {E13045CD-7E1F-4A41-9B18-8D288B2E7B41} = {E13045CD-7E1F-4A41-9B18-8D288B2E7B41}
+ {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942} = {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tld_cleanup", "..\net\tld_cleanup.vcproj", "{E13045CD-7E1F-4A41-9B18-8D288B2E7B41}"
ProjectSection(ProjectDependencies) = postProject
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
- {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
{EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
+ {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "net_unittests", "..\net\net_unittests.vcproj", "{E99DA267-BE90-4F45-88A1-6919DB2C7567}"
ProjectSection(ProjectDependencies) = postProject
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
- {21E22961-22BF-4493-BD3A-868F93DA5179} = {21E22961-22BF-4493-BD3A-868F93DA5179}
- {2A70CBF0-847E-4E3A-B926-542A656DC7FE} = {2A70CBF0-847E-4E3A-B926-542A656DC7FE}
- {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
- {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
- {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
- {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
- {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
- {EC8B7909-62AF-470D-A75D-E1D89C837142} = {EC8B7909-62AF-470D-A75D-E1D89C837142}
- {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
{F54ABC59-5C00-414A-A9BA-BAF26D1699F0} = {F54ABC59-5C00-414A-A9BA-BAF26D1699F0}
+ {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
+ {EC8B7909-62AF-470D-A75D-E1D89C837142} = {EC8B7909-62AF-470D-A75D-E1D89C837142}
+ {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
+ {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
+ {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
+ {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
+ {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
+ {2A70CBF0-847E-4E3A-B926-542A656DC7FE} = {2A70CBF0-847E-4E3A-B926-542A656DC7FE}
+ {21E22961-22BF-4493-BD3A-868F93DA5179} = {21E22961-22BF-4493-BD3A-868F93DA5179}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "net_perftests", "..\net\net_perftests.vcproj", "{AAC78796-B9A2-4CD9-BF89-09B03E92BF73}"
ProjectSection(ProjectDependencies) = postProject
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
- {1846F110-8263-413F-9924-36F64DD8FE41} = {1846F110-8263-413F-9924-36F64DD8FE41}
- {21E22961-22BF-4493-BD3A-868F93DA5179} = {21E22961-22BF-4493-BD3A-868F93DA5179}
- {2A70CBF0-847E-4E3A-B926-542A656DC7FE} = {2A70CBF0-847E-4E3A-B926-542A656DC7FE}
- {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
- {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
- {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
- {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
- {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
- {EC8B7909-62AF-470D-A75D-E1D89C837142} = {EC8B7909-62AF-470D-A75D-E1D89C837142}
- {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
{F54ABC59-5C00-414A-A9BA-BAF26D1699F0} = {F54ABC59-5C00-414A-A9BA-BAF26D1699F0}
+ {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
+ {EC8B7909-62AF-470D-A75D-E1D89C837142} = {EC8B7909-62AF-470D-A75D-E1D89C837142}
+ {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
+ {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
+ {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
+ {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
+ {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
+ {2A70CBF0-847E-4E3A-B926-542A656DC7FE} = {2A70CBF0-847E-4E3A-B926-542A656DC7FE}
+ {21E22961-22BF-4493-BD3A-868F93DA5179} = {21E22961-22BF-4493-BD3A-868F93DA5179}
+ {1846F110-8263-413F-9924-36F64DD8FE41} = {1846F110-8263-413F-9924-36F64DD8FE41}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "media", "..\media\media.vcproj", "{6AE76406-B03B-11DD-94B1-80B556D89593}"
@@ -614,9 +608,9 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "media", "..\media\media.vcp
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "media_unittests", "..\media\media_unittests.vcproj", "{C8C6183C-B03C-11DD-B471-DFD256D89593}"
ProjectSection(ProjectDependencies) = postProject
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
- {6AE76406-B03B-11DD-94B1-80B556D89593} = {6AE76406-B03B-11DD-94B1-80B556D89593}
{BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
+ {6AE76406-B03B-11DD-94B1-80B556D89593} = {6AE76406-B03B-11DD-94B1-80B556D89593}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "base", "..\base\base.vcproj", "{1832A374-8A74-4F9E-B536-69A699B3E165}"
@@ -630,100 +624,100 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "debug_message", "..\base\de
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "base_unittests", "..\base\base_unittests.vcproj", "{27A30967-4BBA-48D1-8522-CDE95F7B1CEC}"
ProjectSection(ProjectDependencies) = postProject
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
- {238CE175-76CE-4A25-A676-69D115885601} = {238CE175-76CE-4A25-A676-69D115885601}
- {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
- {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
- {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
- {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
- {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
{CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
+ {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
+ {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
+ {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
+ {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
+ {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
+ {238CE175-76CE-4A25-A676-69D115885601} = {238CE175-76CE-4A25-A676-69D115885601}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plugin_tests", "test\plugin\plugin_tests.vcproj", "{A1CAA831-C507-4B2E-87F3-AEC63C9907F9}"
ProjectSection(ProjectDependencies) = postProject
- {1556EF78-C7E6-43C8-951F-F6B43AC0DD12} = {1556EF78-C7E6-43C8-951F-F6B43AC0DD12}
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
- {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
- {414D4D24-5D65-498B-A33F-3A29AD3CDEDC} = {414D4D24-5D65-498B-A33F-3A29AD3CDEDC}
- {4631946D-7D5F-44BD-A5A8-504C0A7033BE} = {4631946D-7D5F-44BD-A5A8-504C0A7033BE}
- {5916D37D-8C97-424F-A904-74E52594C2D6} = {5916D37D-8C97-424F-A904-74E52594C2D6}
- {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA} = {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}
- {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
- {7B219FAA-E360-43C8-B341-804A94EEFFAC} = {7B219FAA-E360-43C8-B341-804A94EEFFAC}
- {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
- {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
- {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
- {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
- {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
- {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
- {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
- {E750512D-FC7C-4C98-BF04-0A0DAF882055} = {E750512D-FC7C-4C98-BF04-0A0DAF882055}
- {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
- {F4F4BCAA-EA59-445C-A119-3E6C29647A51} = {F4F4BCAA-EA59-445C-A119-3E6C29647A51}
- {F9810DE8-CBC3-4605-A7B1-ECA2D5292FD7} = {F9810DE8-CBC3-4605-A7B1-ECA2D5292FD7}
{FA537565-7B03-4FFC-AF15-F7A979B72E22} = {FA537565-7B03-4FFC-AF15-F7A979B72E22}
+ {F9810DE8-CBC3-4605-A7B1-ECA2D5292FD7} = {F9810DE8-CBC3-4605-A7B1-ECA2D5292FD7}
+ {F4F4BCAA-EA59-445C-A119-3E6C29647A51} = {F4F4BCAA-EA59-445C-A119-3E6C29647A51}
+ {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
+ {E750512D-FC7C-4C98-BF04-0A0DAF882055} = {E750512D-FC7C-4C98-BF04-0A0DAF882055}
+ {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
+ {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
+ {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
+ {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
+ {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
+ {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
+ {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
+ {7B219FAA-E360-43C8-B341-804A94EEFFAC} = {7B219FAA-E360-43C8-B341-804A94EEFFAC}
+ {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
+ {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA} = {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}
+ {5916D37D-8C97-424F-A904-74E52594C2D6} = {5916D37D-8C97-424F-A904-74E52594C2D6}
+ {4631946D-7D5F-44BD-A5A8-504C0A7033BE} = {4631946D-7D5F-44BD-A5A8-504C0A7033BE}
+ {414D4D24-5D65-498B-A33F-3A29AD3CDEDC} = {414D4D24-5D65-498B-A33F-3A29AD3CDEDC}
+ {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
+ {1556EF78-C7E6-43C8-951F-F6B43AC0DD12} = {1556EF78-C7E6-43C8-951F-F6B43AC0DD12}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "interactive_ui_tests", "test\interactive_ui\interactive_ui.vcproj", "{018D4F38-6272-448F-A864-976DA09F05D0}"
ProjectSection(ProjectDependencies) = postProject
- {1556EF78-C7E6-43C8-951F-F6B43AC0DD12} = {1556EF78-C7E6-43C8-951F-F6B43AC0DD12}
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
- {1C16337B-ACF3-4D03-AA90-851C5B5EADA6} = {1C16337B-ACF3-4D03-AA90-851C5B5EADA6}
- {20A560A0-2CD0-4D9E-A58B-1F24B99C087A} = {20A560A0-2CD0-4D9E-A58B-1F24B99C087A}
- {21E22961-22BF-4493-BD3A-868F93DA5179} = {21E22961-22BF-4493-BD3A-868F93DA5179}
- {238CE175-76CE-4A25-A676-69D115885601} = {238CE175-76CE-4A25-A676-69D115885601}
- {2A70CBF0-847E-4E3A-B926-542A656DC7FE} = {2A70CBF0-847E-4E3A-B926-542A656DC7FE}
- {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
- {4631946D-7D5F-44BD-A5A8-504C0A7033BE} = {4631946D-7D5F-44BD-A5A8-504C0A7033BE}
- {49909552-0B0C-4C14-8CF6-DB8A2ADE0934} = {49909552-0B0C-4C14-8CF6-DB8A2ADE0934}
- {5597AD47-3494-4750-A235-4F9C2F864700} = {5597AD47-3494-4750-A235-4F9C2F864700}
- {57823D8C-A317-4713-9125-2C91FDFD12D6} = {57823D8C-A317-4713-9125-2C91FDFD12D6}
- {5916D37D-8C97-424F-A904-74E52594C2D6} = {5916D37D-8C97-424F-A904-74E52594C2D6}
- {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA} = {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}
- {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65} = {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65}
- {625A8F11-2B4E-45B4-BD99-C6D629C606C0} = {625A8F11-2B4E-45B4-BD99-C6D629C606C0}
- {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9} = {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9}
- {6F9258E5-294F-47B2-919D-17FFE7A8B751} = {6F9258E5-294F-47B2-919D-17FFE7A8B751}
- {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
- {7B219FAA-E360-43C8-B341-804A94EEFFAC} = {7B219FAA-E360-43C8-B341-804A94EEFFAC}
- {7F0A70F6-BE3F-4C19-B435-956AB8F30BA4} = {7F0A70F6-BE3F-4C19-B435-956AB8F30BA4}
- {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
- {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
- {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
- {9301A569-5D2B-4D11-9332-B1E30AEACB8D} = {9301A569-5D2B-4D11-9332-B1E30AEACB8D}
- {9E5416B9-B91B-4029-93F4-102C1AD5CAF4} = {9E5416B9-B91B-4029-93F4-102C1AD5CAF4}
- {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6} = {AA8A5A85-592B-4357-BC60-E0E91E026AF6}
- {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE} = {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE}
- {BF4F447B-72B5-4059-BE1B-F94337B1F385} = {BF4F447B-72B5-4059-BE1B-F94337B1F385}
- {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
- {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
- {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09} = {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09}
- {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3} = {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3}
- {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
- {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E} = {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E}
- {EC8B7909-62AF-470D-A75D-E1D89C837142} = {EC8B7909-62AF-470D-A75D-E1D89C837142}
- {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
- {EFBB1436-A63F-4CD8-9E99-B89226E782EC} = {EFBB1436-A63F-4CD8-9E99-B89226E782EC}
- {F4F4BCAA-EA59-445C-A119-3E6C29647A51} = {F4F4BCAA-EA59-445C-A119-3E6C29647A51}
- {F54ABC59-5C00-414A-A9BA-BAF26D1699F0} = {F54ABC59-5C00-414A-A9BA-BAF26D1699F0}
- {FA537565-7B03-4FFC-AF15-F7A979B72E22} = {FA537565-7B03-4FFC-AF15-F7A979B72E22}
- {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED} = {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED}
{FD683DD6-D9BF-4B1B-AB6D-A3AC03EDAA4D} = {FD683DD6-D9BF-4B1B-AB6D-A3AC03EDAA4D}
+ {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED} = {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED}
+ {FA537565-7B03-4FFC-AF15-F7A979B72E22} = {FA537565-7B03-4FFC-AF15-F7A979B72E22}
+ {F54ABC59-5C00-414A-A9BA-BAF26D1699F0} = {F54ABC59-5C00-414A-A9BA-BAF26D1699F0}
+ {F4F4BCAA-EA59-445C-A119-3E6C29647A51} = {F4F4BCAA-EA59-445C-A119-3E6C29647A51}
+ {EFBB1436-A63F-4CD8-9E99-B89226E782EC} = {EFBB1436-A63F-4CD8-9E99-B89226E782EC}
+ {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
+ {EC8B7909-62AF-470D-A75D-E1D89C837142} = {EC8B7909-62AF-470D-A75D-E1D89C837142}
+ {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E} = {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E}
+ {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
+ {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3} = {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3}
+ {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09} = {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09}
+ {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
+ {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
+ {BF4F447B-72B5-4059-BE1B-F94337B1F385} = {BF4F447B-72B5-4059-BE1B-F94337B1F385}
+ {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE} = {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE}
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6} = {AA8A5A85-592B-4357-BC60-E0E91E026AF6}
+ {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
+ {9E5416B9-B91B-4029-93F4-102C1AD5CAF4} = {9E5416B9-B91B-4029-93F4-102C1AD5CAF4}
+ {9301A569-5D2B-4D11-9332-B1E30AEACB8D} = {9301A569-5D2B-4D11-9332-B1E30AEACB8D}
+ {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
+ {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
+ {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
+ {7F0A70F6-BE3F-4C19-B435-956AB8F30BA4} = {7F0A70F6-BE3F-4C19-B435-956AB8F30BA4}
+ {7B219FAA-E360-43C8-B341-804A94EEFFAC} = {7B219FAA-E360-43C8-B341-804A94EEFFAC}
+ {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
+ {6F9258E5-294F-47B2-919D-17FFE7A8B751} = {6F9258E5-294F-47B2-919D-17FFE7A8B751}
+ {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9} = {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9}
+ {625A8F11-2B4E-45B4-BD99-C6D629C606C0} = {625A8F11-2B4E-45B4-BD99-C6D629C606C0}
+ {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65} = {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65}
+ {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA} = {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}
+ {5916D37D-8C97-424F-A904-74E52594C2D6} = {5916D37D-8C97-424F-A904-74E52594C2D6}
+ {57823D8C-A317-4713-9125-2C91FDFD12D6} = {57823D8C-A317-4713-9125-2C91FDFD12D6}
+ {5597AD47-3494-4750-A235-4F9C2F864700} = {5597AD47-3494-4750-A235-4F9C2F864700}
+ {49909552-0B0C-4C14-8CF6-DB8A2ADE0934} = {49909552-0B0C-4C14-8CF6-DB8A2ADE0934}
+ {4631946D-7D5F-44BD-A5A8-504C0A7033BE} = {4631946D-7D5F-44BD-A5A8-504C0A7033BE}
+ {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
+ {2A70CBF0-847E-4E3A-B926-542A656DC7FE} = {2A70CBF0-847E-4E3A-B926-542A656DC7FE}
+ {238CE175-76CE-4A25-A676-69D115885601} = {238CE175-76CE-4A25-A676-69D115885601}
+ {21E22961-22BF-4493-BD3A-868F93DA5179} = {21E22961-22BF-4493-BD3A-868F93DA5179}
+ {20A560A0-2CD0-4D9E-A58B-1F24B99C087A} = {20A560A0-2CD0-4D9E-A58B-1F24B99C087A}
+ {1C16337B-ACF3-4D03-AA90-851C5B5EADA6} = {1C16337B-ACF3-4D03-AA90-851C5B5EADA6}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
+ {1556EF78-C7E6-43C8-951F-F6B43AC0DD12} = {1556EF78-C7E6-43C8-951F-F6B43AC0DD12}
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Installer", "Installer", "{EB684A4B-98F7-4E68-8EA7-EA74ACF7060B}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "setup", "installer\setup\setup.vcproj", "{21C76E6E-8B38-44D6-8148-B589C13B9554}"
ProjectSection(ProjectDependencies) = postProject
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
- {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
- {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
- {9A72A362-E617-4205-B9F2-43C6FB280FA1} = {9A72A362-E617-4205-B9F2-43C6FB280FA1}
- {B84553C8-5676-427B-B3E4-23DDDC4DBC7B} = {B84553C8-5676-427B-B3E4-23DDDC4DBC7B}
- {D7ED06E8-6138-4CE3-A906-5EF1D9C804E0} = {D7ED06E8-6138-4CE3-A906-5EF1D9C804E0}
{EFBB1436-A63F-4CD8-9E99-B89226E782EC} = {EFBB1436-A63F-4CD8-9E99-B89226E782EC}
+ {D7ED06E8-6138-4CE3-A906-5EF1D9C804E0} = {D7ED06E8-6138-4CE3-A906-5EF1D9C804E0}
+ {B84553C8-5676-427B-B3E4-23DDDC4DBC7B} = {B84553C8-5676-427B-B3E4-23DDDC4DBC7B}
+ {9A72A362-E617-4205-B9F2-43C6FB280FA1} = {9A72A362-E617-4205-B9F2-43C6FB280FA1}
+ {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
+ {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "util", "installer\util\util.vcproj", "{EFBB1436-A63F-4CD8-9E99-B89226E782EC}"
@@ -733,88 +727,88 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "util", "installer\util\util
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mini_installer", "installer\mini_installer\mini_installer.vcproj", "{24A5AC7C-280B-4899-9153-6BA570A081E7}"
ProjectSection(ProjectDependencies) = postProject
- {0557BC3C-DE87-4127-BDAA-9BD9BDB13FB4} = {0557BC3C-DE87-4127-BDAA-9BD9BDB13FB4}
- {0A13F602-B497-4BC1-ABD8-03CA8E95B2AF} = {0A13F602-B497-4BC1-ABD8-03CA8E95B2AF}
- {0D54A5C4-B78B-41A2-BF8A-5DA48AC90495} = {0D54A5C4-B78B-41A2-BF8A-5DA48AC90495}
- {182D578D-2DAC-4BB7-AFEC-9A2855E56F94} = {182D578D-2DAC-4BB7-AFEC-9A2855E56F94}
- {21C76E6E-8B38-44D6-8148-B589C13B9554} = {21C76E6E-8B38-44D6-8148-B589C13B9554}
- {226B3533-1FF3-42F6-A8E3-C4DDBC955290} = {226B3533-1FF3-42F6-A8E3-C4DDBC955290}
- {228DD844-9926-420E-B193-6973BF2A4D0B} = {228DD844-9926-420E-B193-6973BF2A4D0B}
- {256DECCE-9886-4C21-96A5-EE47DF5E07E9} = {256DECCE-9886-4C21-96A5-EE47DF5E07E9}
- {275F2993-EE9B-4E00-9C85-10A182FD423A} = {275F2993-EE9B-4E00-9C85-10A182FD423A}
- {2F914112-2657-49EC-8EA6-3BA63340DE27} = {2F914112-2657-49EC-8EA6-3BA63340DE27}
- {300C6A09-663E-48B6-8E07-A0D50CAF8F25} = {300C6A09-663E-48B6-8E07-A0D50CAF8F25}
- {32167995-4014-4E4C-983B-F7E17C24EB25} = {32167995-4014-4E4C-983B-F7E17C24EB25}
- {34231B28-C51C-4C1C-AF07-C763668B1404} = {34231B28-C51C-4C1C-AF07-C763668B1404}
- {3A932C39-AFA9-4BDC-B775-F71A426D04BF} = {3A932C39-AFA9-4BDC-B775-F71A426D04BF}
- {3AB90E6A-56FF-4C9D-B918-AB76DDBF8BE8} = {3AB90E6A-56FF-4C9D-B918-AB76DDBF8BE8}
- {3E6B24F6-9FA9-4066-859E-BF747FA3080A} = {3E6B24F6-9FA9-4066-859E-BF747FA3080A}
- {4B60E8B8-416F-40B2-8A54-F75970A21992} = {4B60E8B8-416F-40B2-8A54-F75970A21992}
- {4EA8CE12-9C6F-45E5-9D08-720383FE3685} = {4EA8CE12-9C6F-45E5-9D08-720383FE3685}
- {5AEA4BF6-27CD-47FC-9370-D87771CFA196} = {5AEA4BF6-27CD-47FC-9370-D87771CFA196}
- {5BDB7EE1-A1FD-410C-9598-21519A1B7952} = {5BDB7EE1-A1FD-410C-9598-21519A1B7952}
- {63011A7B-CE4D-4DF1-B5DA-1B133C14A2E8} = {63011A7B-CE4D-4DF1-B5DA-1B133C14A2E8}
- {64D81334-DE73-457D-8FC1-9492508A2663} = {64D81334-DE73-457D-8FC1-9492508A2663}
- {65C78BBB-8FCB-48E4-94C8-1F0F981929AF} = {65C78BBB-8FCB-48E4-94C8-1F0F981929AF}
- {7A0BA0C5-0D90-49AE-919A-4BE096F69E4F} = {7A0BA0C5-0D90-49AE-919A-4BE096F69E4F}
- {7B219FAA-E360-43C8-B341-804A94EEFFAC} = {7B219FAA-E360-43C8-B341-804A94EEFFAC}
- {7D456640-3619-4D23-A56D-E0084400CCBF} = {7D456640-3619-4D23-A56D-E0084400CCBF}
- {7EA8C4AB-F9C6-4FA1-8B0A-74F5650430B2} = {7EA8C4AB-F9C6-4FA1-8B0A-74F5650430B2}
- {80E37CB5-059D-4F4B-AEF6-08265468D368} = {80E37CB5-059D-4F4B-AEF6-08265468D368}
- {82F5BFE5-FDCE-47D4-8B38-BEEBED561681} = {82F5BFE5-FDCE-47D4-8B38-BEEBED561681}
- {89C1C190-A5D1-4EC4-BD6A-67FF2195C7CC} = {89C1C190-A5D1-4EC4-BD6A-67FF2195C7CC}
- {9D13D9B8-6C28-42A7-935C-B769EBC55BAA} = {9D13D9B8-6C28-42A7-935C-B769EBC55BAA}
- {9F53807E-9382-47BD-8371-E5D04F517E9C} = {9F53807E-9382-47BD-8371-E5D04F517E9C}
- {A0D94973-D355-47A5-A1E2-3456F321F010} = {A0D94973-D355-47A5-A1E2-3456F321F010}
- {A28310B8-7BD0-4CDF-A7D8-59CAB42AA1C4} = {A28310B8-7BD0-4CDF-A7D8-59CAB42AA1C4}
- {A464166F-8507-49B4-9B02-5CB77C498B25} = {A464166F-8507-49B4-9B02-5CB77C498B25}
- {A493331B-3180-49FE-8D0E-D121645E63AD} = {A493331B-3180-49FE-8D0E-D121645E63AD}
- {A5C5D801-4026-49F2-BBF1-250941855306} = {A5C5D801-4026-49F2-BBF1-250941855306}
- {AFF332BF-AF3D-4D35-86FC-42A727F01D36} = {AFF332BF-AF3D-4D35-86FC-42A727F01D36}
- {B0D5BD91-6153-4CA6-BC2F-4E3BD43E5DB7} = {B0D5BD91-6153-4CA6-BC2F-4E3BD43E5DB7}
- {B2D715CE-4CBB-415A-A032-E700C90ADF91} = {B2D715CE-4CBB-415A-A032-E700C90ADF91}
- {B30B0E1F-1CE9-4DEF-A752-7498FD709C1F} = {B30B0E1F-1CE9-4DEF-A752-7498FD709C1F}
- {BA62FF5E-08A6-4102-9675-C12E8C9D4CC0} = {BA62FF5E-08A6-4102-9675-C12E8C9D4CC0}
- {BF4F447B-72B5-4059-BE1B-F94337B1F385} = {BF4F447B-72B5-4059-BE1B-F94337B1F385}
- {C0A7EE2C-2A6D-45BE-BA78-6D006FDF52D9} = {C0A7EE2C-2A6D-45BE-BA78-6D006FDF52D9}
- {C0C7DA58-C90D-4BDE-AE44-588997339F5D} = {C0C7DA58-C90D-4BDE-AE44-588997339F5D}
- {C2A444C2-9D74-4AD7-AE7C-04F5EDA17060} = {C2A444C2-9D74-4AD7-AE7C-04F5EDA17060}
- {C70D3509-57C4-4326-90C1-2EC0AE34848D} = {C70D3509-57C4-4326-90C1-2EC0AE34848D}
- {CAB69303-0F02-4C68-A12E-FFE55DB52526} = {CAB69303-0F02-4C68-A12E-FFE55DB52526}
- {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3} = {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3}
- {CE1426F6-7D2B-4574-9929-58387BF7B05F} = {CE1426F6-7D2B-4574-9929-58387BF7B05F}
- {D314F1B3-9299-4866-8362-08BF811B0FA3} = {D314F1B3-9299-4866-8362-08BF811B0FA3}
- {DA5C6FCB-FCFD-49B8-8DDA-8351638096DB} = {DA5C6FCB-FCFD-49B8-8DDA-8351638096DB}
- {E07D267C-34C3-4DDB-8B41-94697808714A} = {E07D267C-34C3-4DDB-8B41-94697808714A}
- {E1D0B89E-257B-4BCA-A0C6-A2CD997A2FDC} = {E1D0B89E-257B-4BCA-A0C6-A2CD997A2FDC}
- {E3DF045F-2174-4685-9CF7-0630A79F324B} = {E3DF045F-2174-4685-9CF7-0630A79F324B}
- {E7B11CF0-FE40-4A69-AE20-1B882F4D7585} = {E7B11CF0-FE40-4A69-AE20-1B882F4D7585}
- {F7790A54-4078-4E4A-8231-818BE9FB1F94} = {F7790A54-4078-4E4A-8231-818BE9FB1F94}
- {FA660037-EB40-4A43-AA9D-9653C57F2789} = {FA660037-EB40-4A43-AA9D-9653C57F2789}
{FD683DD6-D9BF-4B1B-AB6D-A3AC03EDAA4D} = {FD683DD6-D9BF-4B1B-AB6D-A3AC03EDAA4D}
+ {FA660037-EB40-4A43-AA9D-9653C57F2789} = {FA660037-EB40-4A43-AA9D-9653C57F2789}
+ {F7790A54-4078-4E4A-8231-818BE9FB1F94} = {F7790A54-4078-4E4A-8231-818BE9FB1F94}
+ {E7B11CF0-FE40-4A69-AE20-1B882F4D7585} = {E7B11CF0-FE40-4A69-AE20-1B882F4D7585}
+ {E3DF045F-2174-4685-9CF7-0630A79F324B} = {E3DF045F-2174-4685-9CF7-0630A79F324B}
+ {E1D0B89E-257B-4BCA-A0C6-A2CD997A2FDC} = {E1D0B89E-257B-4BCA-A0C6-A2CD997A2FDC}
+ {E07D267C-34C3-4DDB-8B41-94697808714A} = {E07D267C-34C3-4DDB-8B41-94697808714A}
+ {DA5C6FCB-FCFD-49B8-8DDA-8351638096DB} = {DA5C6FCB-FCFD-49B8-8DDA-8351638096DB}
+ {D314F1B3-9299-4866-8362-08BF811B0FA3} = {D314F1B3-9299-4866-8362-08BF811B0FA3}
+ {CE1426F6-7D2B-4574-9929-58387BF7B05F} = {CE1426F6-7D2B-4574-9929-58387BF7B05F}
+ {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3} = {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3}
+ {CAB69303-0F02-4C68-A12E-FFE55DB52526} = {CAB69303-0F02-4C68-A12E-FFE55DB52526}
+ {C70D3509-57C4-4326-90C1-2EC0AE34848D} = {C70D3509-57C4-4326-90C1-2EC0AE34848D}
+ {C2A444C2-9D74-4AD7-AE7C-04F5EDA17060} = {C2A444C2-9D74-4AD7-AE7C-04F5EDA17060}
+ {C0C7DA58-C90D-4BDE-AE44-588997339F5D} = {C0C7DA58-C90D-4BDE-AE44-588997339F5D}
+ {C0A7EE2C-2A6D-45BE-BA78-6D006FDF52D9} = {C0A7EE2C-2A6D-45BE-BA78-6D006FDF52D9}
+ {BF4F447B-72B5-4059-BE1B-F94337B1F385} = {BF4F447B-72B5-4059-BE1B-F94337B1F385}
+ {BA62FF5E-08A6-4102-9675-C12E8C9D4CC0} = {BA62FF5E-08A6-4102-9675-C12E8C9D4CC0}
+ {B30B0E1F-1CE9-4DEF-A752-7498FD709C1F} = {B30B0E1F-1CE9-4DEF-A752-7498FD709C1F}
+ {B2D715CE-4CBB-415A-A032-E700C90ADF91} = {B2D715CE-4CBB-415A-A032-E700C90ADF91}
+ {B0D5BD91-6153-4CA6-BC2F-4E3BD43E5DB7} = {B0D5BD91-6153-4CA6-BC2F-4E3BD43E5DB7}
+ {AFF332BF-AF3D-4D35-86FC-42A727F01D36} = {AFF332BF-AF3D-4D35-86FC-42A727F01D36}
+ {A5C5D801-4026-49F2-BBF1-250941855306} = {A5C5D801-4026-49F2-BBF1-250941855306}
+ {A493331B-3180-49FE-8D0E-D121645E63AD} = {A493331B-3180-49FE-8D0E-D121645E63AD}
+ {A464166F-8507-49B4-9B02-5CB77C498B25} = {A464166F-8507-49B4-9B02-5CB77C498B25}
+ {A28310B8-7BD0-4CDF-A7D8-59CAB42AA1C4} = {A28310B8-7BD0-4CDF-A7D8-59CAB42AA1C4}
+ {A0D94973-D355-47A5-A1E2-3456F321F010} = {A0D94973-D355-47A5-A1E2-3456F321F010}
+ {9F53807E-9382-47BD-8371-E5D04F517E9C} = {9F53807E-9382-47BD-8371-E5D04F517E9C}
+ {9D13D9B8-6C28-42A7-935C-B769EBC55BAA} = {9D13D9B8-6C28-42A7-935C-B769EBC55BAA}
+ {89C1C190-A5D1-4EC4-BD6A-67FF2195C7CC} = {89C1C190-A5D1-4EC4-BD6A-67FF2195C7CC}
+ {82F5BFE5-FDCE-47D4-8B38-BEEBED561681} = {82F5BFE5-FDCE-47D4-8B38-BEEBED561681}
+ {80E37CB5-059D-4F4B-AEF6-08265468D368} = {80E37CB5-059D-4F4B-AEF6-08265468D368}
+ {7EA8C4AB-F9C6-4FA1-8B0A-74F5650430B2} = {7EA8C4AB-F9C6-4FA1-8B0A-74F5650430B2}
+ {7D456640-3619-4D23-A56D-E0084400CCBF} = {7D456640-3619-4D23-A56D-E0084400CCBF}
+ {7B219FAA-E360-43C8-B341-804A94EEFFAC} = {7B219FAA-E360-43C8-B341-804A94EEFFAC}
+ {7A0BA0C5-0D90-49AE-919A-4BE096F69E4F} = {7A0BA0C5-0D90-49AE-919A-4BE096F69E4F}
+ {65C78BBB-8FCB-48E4-94C8-1F0F981929AF} = {65C78BBB-8FCB-48E4-94C8-1F0F981929AF}
+ {64D81334-DE73-457D-8FC1-9492508A2663} = {64D81334-DE73-457D-8FC1-9492508A2663}
+ {63011A7B-CE4D-4DF1-B5DA-1B133C14A2E8} = {63011A7B-CE4D-4DF1-B5DA-1B133C14A2E8}
+ {5BDB7EE1-A1FD-410C-9598-21519A1B7952} = {5BDB7EE1-A1FD-410C-9598-21519A1B7952}
+ {5AEA4BF6-27CD-47FC-9370-D87771CFA196} = {5AEA4BF6-27CD-47FC-9370-D87771CFA196}
+ {4EA8CE12-9C6F-45E5-9D08-720383FE3685} = {4EA8CE12-9C6F-45E5-9D08-720383FE3685}
+ {4B60E8B8-416F-40B2-8A54-F75970A21992} = {4B60E8B8-416F-40B2-8A54-F75970A21992}
+ {3E6B24F6-9FA9-4066-859E-BF747FA3080A} = {3E6B24F6-9FA9-4066-859E-BF747FA3080A}
+ {3AB90E6A-56FF-4C9D-B918-AB76DDBF8BE8} = {3AB90E6A-56FF-4C9D-B918-AB76DDBF8BE8}
+ {3A932C39-AFA9-4BDC-B775-F71A426D04BF} = {3A932C39-AFA9-4BDC-B775-F71A426D04BF}
+ {34231B28-C51C-4C1C-AF07-C763668B1404} = {34231B28-C51C-4C1C-AF07-C763668B1404}
+ {32167995-4014-4E4C-983B-F7E17C24EB25} = {32167995-4014-4E4C-983B-F7E17C24EB25}
+ {300C6A09-663E-48B6-8E07-A0D50CAF8F25} = {300C6A09-663E-48B6-8E07-A0D50CAF8F25}
+ {2F914112-2657-49EC-8EA6-3BA63340DE27} = {2F914112-2657-49EC-8EA6-3BA63340DE27}
+ {275F2993-EE9B-4E00-9C85-10A182FD423A} = {275F2993-EE9B-4E00-9C85-10A182FD423A}
+ {256DECCE-9886-4C21-96A5-EE47DF5E07E9} = {256DECCE-9886-4C21-96A5-EE47DF5E07E9}
+ {228DD844-9926-420E-B193-6973BF2A4D0B} = {228DD844-9926-420E-B193-6973BF2A4D0B}
+ {226B3533-1FF3-42F6-A8E3-C4DDBC955290} = {226B3533-1FF3-42F6-A8E3-C4DDBC955290}
+ {21C76E6E-8B38-44D6-8148-B589C13B9554} = {21C76E6E-8B38-44D6-8148-B589C13B9554}
+ {182D578D-2DAC-4BB7-AFEC-9A2855E56F94} = {182D578D-2DAC-4BB7-AFEC-9A2855E56F94}
+ {0D54A5C4-B78B-41A2-BF8A-5DA48AC90495} = {0D54A5C4-B78B-41A2-BF8A-5DA48AC90495}
+ {0A13F602-B497-4BC1-ABD8-03CA8E95B2AF} = {0A13F602-B497-4BC1-ABD8-03CA8E95B2AF}
+ {0557BC3C-DE87-4127-BDAA-9BD9BDB13FB4} = {0557BC3C-DE87-4127-BDAA-9BD9BDB13FB4}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bsdiff", "..\third_party\bsdiff\bsdiff.vcproj", "{E1D0B89E-257B-4BCA-A0C6-A2CD997A2FDC}"
ProjectSection(ProjectDependencies) = postProject
- {B84553C8-5676-427B-B3E4-23DDDC4DBC7B} = {B84553C8-5676-427B-B3E4-23DDDC4DBC7B}
{D7ED06E8-6138-4CE3-A906-5EF1D9C804E0} = {D7ED06E8-6138-4CE3-A906-5EF1D9C804E0}
+ {B84553C8-5676-427B-B3E4-23DDDC4DBC7B} = {B84553C8-5676-427B-B3E4-23DDDC4DBC7B}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bspatch", "..\third_party\bspatch\bspatch.vcproj", "{D7ED06E8-6138-4CE3-A906-5EF1D9C804E0}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "installer_unittests", "installer\util\installer_unittests.vcproj", "{903F8C1E-537A-4C9E-97BE-075147CBE769}"
ProjectSection(ProjectDependencies) = postProject
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
- {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
- {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
- {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
{EFBB1436-A63F-4CD8-9E99-B89226E782EC} = {EFBB1436-A63F-4CD8-9E99-B89226E782EC}
+ {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
+ {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
+ {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "da", "app\locales\da.vcproj", "{A493331B-3180-49FE-8D0E-D121645E63AD}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "activex_test_control", "test\activex_test_control\activex_test_control.vcproj", "{414D4D24-5D65-498B-A33F-3A29AD3CDEDC}"
@@ -826,63 +820,63 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "default_plugin", "..\webkit
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zh-TW", "app\locales\zh-TW.vcproj", "{E7B11CF0-FE40-4A69-AE20-1B882F4D7585}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "he", "app\locales\he.vcproj", "{A28310B8-7BD0-4CDF-A7D8-59CAB42AA1C4}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_chrome_plugin", "test\chrome_plugin\test_chrome_plugin.vcproj", "{7F0A70F6-BE3F-4C19-B435-956AB8F30BA4}"
ProjectSection(ProjectDependencies) = postProject
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
- {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
- {A0D94973-D355-47A5-A1E2-3456F321F010} = {A0D94973-D355-47A5-A1E2-3456F321F010}
{EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
+ {A0D94973-D355-47A5-A1E2-3456F321F010} = {A0D94973-D355-47A5-A1E2-3456F321F010}
+ {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "automated_ui_tests", "test\automated_ui_tests\automated_ui_tests.vcproj", "{D2250C20-3A94-4FB9-AF73-11BC5B73884B}"
ProjectSection(ProjectDependencies) = postProject
- {1556EF78-C7E6-43C8-951F-F6B43AC0DD12} = {1556EF78-C7E6-43C8-951F-F6B43AC0DD12}
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
- {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
- {4631946D-7D5F-44BD-A5A8-504C0A7033BE} = {4631946D-7D5F-44BD-A5A8-504C0A7033BE}
- {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA} = {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}
- {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
- {7B219FAA-E360-43C8-B341-804A94EEFFAC} = {7B219FAA-E360-43C8-B341-804A94EEFFAC}
- {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
- {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
- {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
- {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
- {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
- {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
- {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
- {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
- {F9810DE8-CBC3-4605-A7B1-ECA2D5292FD7} = {F9810DE8-CBC3-4605-A7B1-ECA2D5292FD7}
{FA537565-7B03-4FFC-AF15-F7A979B72E22} = {FA537565-7B03-4FFC-AF15-F7A979B72E22}
+ {F9810DE8-CBC3-4605-A7B1-ECA2D5292FD7} = {F9810DE8-CBC3-4605-A7B1-ECA2D5292FD7}
+ {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
+ {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
+ {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
+ {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
+ {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
+ {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
+ {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
+ {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
+ {7B219FAA-E360-43C8-B341-804A94EEFFAC} = {7B219FAA-E360-43C8-B341-804A94EEFFAC}
+ {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
+ {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA} = {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}
+ {4631946D-7D5F-44BD-A5A8-504C0A7033BE} = {4631946D-7D5F-44BD-A5A8-504C0A7033BE}
+ {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
+ {1556EF78-C7E6-43C8-951F-F6B43AC0DD12} = {1556EF78-C7E6-43C8-951F-F6B43AC0DD12}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mini_installer_test", "test\mini_installer_test\mini_installer_test.vcproj", "{4B6E199A-034A-49BD-AB93-458DD37E45B1}"
ProjectSection(ProjectDependencies) = postProject
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
- {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
- {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
{EFBB1436-A63F-4CD8-9E99-B89226E782EC} = {EFBB1436-A63F-4CD8-9E99-B89226E782EC}
+ {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
+ {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "JavaScriptCore_pcre", "..\webkit\build\JavaScriptCore\JavaScriptCore_pcre.vcproj", "{49909552-0B0C-4C14-8CF6-DB8A2ADE0934}"
ProjectSection(ProjectDependencies) = postProject
- {2E2D3301-2EC4-4C0F-B889-87073B30F673} = {2E2D3301-2EC4-4C0F-B889-87073B30F673}
{AA8A5A85-592B-4357-BC60-E0E91E026AF6} = {AA8A5A85-592B-4357-BC60-E0E91E026AF6}
+ {2E2D3301-2EC4-4C0F-B889-87073B30F673} = {2E2D3301-2EC4-4C0F-B889-87073B30F673}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "V8Bindings_prebuild", "..\webkit\build\V8Bindings\V8Bindings_prebuild.vcproj", "{2F7EDFA2-EE27-4D83-8454-9EFBD5779203}"
ProjectSection(ProjectDependencies) = postProject
- {21E22961-22BF-4493-BD3A-868F93DA5179} = {21E22961-22BF-4493-BD3A-868F93DA5179}
{EC8B7909-62AF-470D-A75D-E1D89C837142} = {EC8B7909-62AF-470D-A75D-E1D89C837142}
+ {21E22961-22BF-4493-BD3A-868F93DA5179} = {21E22961-22BF-4493-BD3A-868F93DA5179}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gears", "..\gears\gears.vcproj", "{D703D7A0-EDC1-4FE6-9E22-56154155B24E}"
@@ -946,384 +940,384 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "terms", "terms", "{D13F055D
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ar", "app\locales\ar.vcproj", "{3AB90E6A-56FF-4C9D-B918-AB76DDBF8BE8}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bg", "app\locales\bg.vcproj", "{5BDB7EE1-A1FD-410C-9598-21519A1B7952}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ca", "app\locales\ca.vcproj", "{F7790A54-4078-4E4A-8231-818BE9FB1F94}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cs", "app\locales\cs.vcproj", "{7EA8C4AB-F9C6-4FA1-8B0A-74F5650430B2}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "de", "app\locales\de.vcproj", "{BA62FF5E-08A6-4102-9675-C12E8C9D4CC0}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "el", "app\locales\el.vcproj", "{D314F1B3-9299-4866-8362-08BF811B0FA3}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "en-GB", "app\locales\en-GB.vcproj", "{34231B28-C51C-4C1C-AF07-C763668B1404}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "es", "app\locales\es.vcproj", "{5AEA4BF6-27CD-47FC-9370-D87771CFA196}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "et", "app\locales\et.vcproj", "{0557BC3C-DE87-4127-BDAA-9BD9BDB13FB4}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fi", "app\locales\fi.vcproj", "{64D81334-DE73-457D-8FC1-9492508A2663}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fil", "app\locales\fil.vcproj", "{3A932C39-AFA9-4BDC-B775-F71A426D04BF}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fr", "app\locales\fr.vcproj", "{0D54A5C4-B78B-41A2-BF8A-5DA48AC90495}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hi", "app\locales\hi.vcproj", "{228DD844-9926-420E-B193-6973BF2A4D0B}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hr", "app\locales\hr.vcproj", "{CE1426F6-7D2B-4574-9929-58387BF7B05F}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hu", "app\locales\hu.vcproj", "{AFF332BF-AF3D-4D35-86FC-42A727F01D36}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "id", "app\locales\id.vcproj", "{E3DF045F-2174-4685-9CF7-0630A79F324B}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "it", "app\locales\it.vcproj", "{275F2993-EE9B-4E00-9C85-10A182FD423A}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ja", "app\locales\ja.vcproj", "{B2D715CE-4CBB-415A-A032-E700C90ADF91}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ko", "app\locales\ko.vcproj", "{32167995-4014-4E4C-983B-F7E17C24EB25}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lt", "app\locales\lt.vcproj", "{80E37CB5-059D-4F4B-AEF6-08265468D368}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lv", "app\locales\lv.vcproj", "{A5C5D801-4026-49F2-BBF1-250941855306}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nl", "app\locales\nl.vcproj", "{63011A7B-CE4D-4DF1-B5DA-1B133C14A2E8}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nb", "app\locales\nb.vcproj", "{B30B0E1F-1CE9-4DEF-A752-7498FD709C1F}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pl", "app\locales\pl.vcproj", "{9F53807E-9382-47BD-8371-E5D04F517E9C}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pt-BR", "app\locales\pt-BR.vcproj", "{2F914112-2657-49EC-8EA6-3BA63340DE27}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pt-PT", "app\locales\pt-PT.vcproj", "{0A13F602-B497-4BC1-ABD8-03CA8E95B2AF}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ro", "app\locales\ro.vcproj", "{C70D3509-57C4-4326-90C1-2EC0AE34848D}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ru", "app\locales\ru.vcproj", "{7D456640-3619-4D23-A56D-E0084400CCBF}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sk", "app\locales\sk.vcproj", "{82F5BFE5-FDCE-47D4-8B38-BEEBED561681}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sl", "app\locales\sl.vcproj", "{C2A444C2-9D74-4AD7-AE7C-04F5EDA17060}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sr", "app\locales\sr.vcproj", "{300C6A09-663E-48B6-8E07-A0D50CAF8F25}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "th", "app\locales\th.vcproj", "{226B3533-1FF3-42F6-A8E3-C4DDBC955290}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sv", "app\locales\sv.vcproj", "{B0D5BD91-6153-4CA6-BC2F-4E3BD43E5DB7}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tr", "app\locales\tr.vcproj", "{65C78BBB-8FCB-48E4-94C8-1F0F981929AF}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "uk", "app\locales\uk.vcproj", "{182D578D-2DAC-4BB7-AFEC-9A2855E56F94}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vi", "app\locales\vi.vcproj", "{DA5C6FCB-FCFD-49B8-8DDA-8351638096DB}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zh-CN", "app\locales\zh-CN.vcproj", "{C0C7DA58-C90D-4BDE-AE44-588997339F5D}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "crash_service", "tools\crash_service\crash_service.vcproj", "{89C1C190-A5D1-4EC4-BD6A-67FF2195C7CC}"
ProjectSection(ProjectDependencies) = postProject
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
- {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
- {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
- {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
- {9946A048-043B-4F8F-9E07-9297B204714C} = {9946A048-043B-4F8F-9E07-9297B204714C}
- {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
- {B55CA863-B374-4BAF-95AC-539E4FA4C90C} = {B55CA863-B374-4BAF-95AC-539E4FA4C90C}
{CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
+ {B55CA863-B374-4BAF-95AC-539E4FA4C90C} = {B55CA863-B374-4BAF-95AC-539E4FA4C90C}
+ {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
+ {9946A048-043B-4F8F-9E07-9297B204714C} = {9946A048-043B-4F8F-9E07-9297B204714C}
+ {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
+ {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
+ {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "memory_watcher", "..\tools\memory_watcher\memory_watcher.vcproj", "{3BD81303-4E14-4559-AA69-B30C3BAB08DD}"
ProjectSection(ProjectDependencies) = postProject
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
{8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rlz", "..\rlz\rlz.vcproj", "{BF4F447B-72B5-4059-BE1B-F94337B1F385}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "es-419", "app\locales\es-419.vcproj", "{FA660037-EB40-4A43-AA9D-9653C57F2789}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tab_switching_test", "test\tab_switching\tab_switching.vcproj", "{A34770EA-A574-43E8-9327-F79C04770E98}"
ProjectSection(ProjectDependencies) = postProject
- {1556EF78-C7E6-43C8-951F-F6B43AC0DD12} = {1556EF78-C7E6-43C8-951F-F6B43AC0DD12}
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
- {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
- {4631946D-7D5F-44BD-A5A8-504C0A7033BE} = {4631946D-7D5F-44BD-A5A8-504C0A7033BE}
- {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA} = {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}
- {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
- {76235B67-1C27-4627-8A33-4B2E1EF93EDE} = {76235B67-1C27-4627-8A33-4B2E1EF93EDE}
- {7B219FAA-E360-43C8-B341-804A94EEFFAC} = {7B219FAA-E360-43C8-B341-804A94EEFFAC}
- {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
- {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
- {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
- {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
- {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
- {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
- {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
- {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
{FA537565-7B03-4FFC-AF15-F7A979B72E22} = {FA537565-7B03-4FFC-AF15-F7A979B72E22}
+ {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
+ {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
+ {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
+ {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
+ {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
+ {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
+ {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
+ {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
+ {7B219FAA-E360-43C8-B341-804A94EEFFAC} = {7B219FAA-E360-43C8-B341-804A94EEFFAC}
+ {76235B67-1C27-4627-8A33-4B2E1EF93EDE} = {76235B67-1C27-4627-8A33-4B2E1EF93EDE}
+ {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
+ {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA} = {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}
+ {4631946D-7D5F-44BD-A5A8-504C0A7033BE} = {4631946D-7D5F-44BD-A5A8-504C0A7033BE}
+ {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
+ {1556EF78-C7E6-43C8-951F-F6B43AC0DD12} = {1556EF78-C7E6-43C8-951F-F6B43AC0DD12}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "util_prebuild", "installer\util\prebuild\util_prebuild.vcproj", "{0026A376-C4F1-4575-A1BA-578C69F07013}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "convert_dict", "tools\convert_dict\convert_dict.vcproj", "{42ECD5EC-722F-41DE-B6B8-83764C8016DF}"
ProjectSection(ProjectDependencies) = postProject
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
- {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
{A0D94973-D355-47A5-A1E2-3456F321F010} = {A0D94973-D355-47A5-A1E2-3456F321F010}
+ {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest", "..\testing\gtest.vcproj", "{BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "debugger", "browser\debugger\debugger.vcproj", "{57823D8C-A317-4713-9125-2C91FDFD12D6}"
ProjectSection(ProjectDependencies) = postProject
- {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE} = {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE} = {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "memory_test", "test\memory_test\memory_test.vcproj", "{A5F831FD-9B9C-4FEF-9FBA-554817B734CE}"
ProjectSection(ProjectDependencies) = postProject
- {1556EF78-C7E6-43C8-951F-F6B43AC0DD12} = {1556EF78-C7E6-43C8-951F-F6B43AC0DD12}
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
- {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
- {4631946D-7D5F-44BD-A5A8-504C0A7033BE} = {4631946D-7D5F-44BD-A5A8-504C0A7033BE}
- {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA} = {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}
- {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
- {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
- {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
- {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
- {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
- {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
- {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
- {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
{FA537565-7B03-4FFC-AF15-F7A979B72E22} = {FA537565-7B03-4FFC-AF15-F7A979B72E22}
+ {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
+ {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
+ {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
+ {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
+ {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
+ {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
+ {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
+ {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
+ {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA} = {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}
+ {4631946D-7D5F-44BD-A5A8-504C0A7033BE} = {4631946D-7D5F-44BD-A5A8-504C0A7033BE}
+ {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
+ {1556EF78-C7E6-43C8-951F-F6B43AC0DD12} = {1556EF78-C7E6-43C8-951F-F6B43AC0DD12}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "v8_base", "..\v8\tools\gyp\v8_base.vcproj", "{EC8B7909-62AF-470D-A75D-E1D89C837142}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "v8", "..\v8\tools\gyp\v8.vcproj", "{21E22961-22BF-4493-BD3A-868F93DA5179}"
ProjectSection(ProjectDependencies) = postProject
- {865575D0-37E2-405E-8CBA-5F6C485B5A26} = {865575D0-37E2-405E-8CBA-5F6C485B5A26}
{EC8B7909-62AF-470D-A75D-E1D89C837142} = {EC8B7909-62AF-470D-A75D-E1D89C837142}
+ {865575D0-37E2-405E-8CBA-5F6C485B5A26} = {865575D0-37E2-405E-8CBA-5F6C485B5A26}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mksnapshot", "..\v8\tools\gyp\mksnapshot.vcproj", "{865575D0-37E2-405E-8CBA-5F6C485B5A26}"
ProjectSection(ProjectDependencies) = postProject
- {879286C0-3234-D14B-BB2C-32D4D1B809CE} = {879286C0-3234-D14B-BB2C-32D4D1B809CE}
{EC8B7909-62AF-470D-A75D-E1D89C837142} = {EC8B7909-62AF-470D-A75D-E1D89C837142}
+ {879286C0-3234-D14B-BB2C-32D4D1B809CE} = {879286C0-3234-D14B-BB2C-32D4D1B809CE}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "browser_views", "browser\views\browser_views.vcproj", "{FA537565-7B03-4FFC-AF15-F7A979B72E22}"
ProjectSection(ProjectDependencies) = postProject
- {0B469837-3D46-484A-AFB3-C5A6C68730B9} = {0B469837-3D46-484A-AFB3-C5A6C68730B9}
- {4052059A-D72B-4183-B5C2-9D1B099E9E35} = {4052059A-D72B-4183-B5C2-9D1B099E9E35}
- {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE} = {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE} = {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE}
+ {4052059A-D72B-4183-B5C2-9D1B099E9E35} = {4052059A-D72B-4183-B5C2-9D1B099E9E35}
+ {0B469837-3D46-484A-AFB3-C5A6C68730B9} = {0B469837-3D46-484A-AFB3-C5A6C68730B9}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "v8_shell", "..\v8\tools\gyp\v8_shell.vcproj", "{31182CBE-9B7D-AAF2-65EE-F4D07012F4F3}"
ProjectSection(ProjectDependencies) = postProject
- {21E22961-22BF-4493-BD3A-868F93DA5179} = {21E22961-22BF-4493-BD3A-868F93DA5179}
{EC8B7909-62AF-470D-A75D-E1D89C837142} = {EC8B7909-62AF-470D-A75D-E1D89C837142}
+ {21E22961-22BF-4493-BD3A-868F93DA5179} = {21E22961-22BF-4493-BD3A-868F93DA5179}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sdch", "..\sdch\sdch.vcproj", "{F54ABC59-5C00-414A-A9BA-BAF26D1699F0}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "kn", "app\locales\kn.vcproj", "{3E6B24F6-9FA9-4066-859E-BF747FA3080A}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bn", "app\locales\bn.vcproj", "{4B60E8B8-416F-40B2-8A54-F75970A21992}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gu", "app\locales\gu.vcproj", "{256DECCE-9886-4C21-96A5-EE47DF5E07E9}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ml", "app\locales\ml.vcproj", "{CAB69303-0F02-4C68-A12E-FFE55DB52526}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mr", "app\locales\mr.vcproj", "{A464166F-8507-49B4-9B02-5CB77C498B25}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "or", "app\locales\or.vcproj", "{E07D267C-34C3-4DDB-8B41-94697808714A}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ta", "app\locales\ta.vcproj", "{7A0BA0C5-0D90-49AE-919A-4BE096F69E4F}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "te", "app\locales\te.vcproj", "{9D13D9B8-6C28-42A7-935C-B769EBC55BAA}"
ProjectSection(ProjectDependencies) = postProject
- {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
{D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gcapi_lib", "installer\gcapi\gcapi_lib.vcproj", "{CD2FD73A-6AAB-4886-B887-760D18E8B635}"
@@ -1338,8 +1332,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gcapi_dll", "installer\gcap
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gcapi_test", "installer\gcapi\gcapi_test.vcproj", "{B64B396B-8EF1-4B6B-A07E-48D40EB961AB}"
ProjectSection(ProjectDependencies) = postProject
- {B802A2FE-E4E2-4F5A-905A-D5128875C954} = {B802A2FE-E4E2-4F5A-905A-D5128875C954}
{CD2FD73A-6AAB-4886-B887-760D18E8B635} = {CD2FD73A-6AAB-4886-B887-760D18E8B635}
+ {B802A2FE-E4E2-4F5A-905A-D5128875C954} = {B802A2FE-E4E2-4F5A-905A-D5128875C954}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "net_resources", "..\net\net_resources.vcproj", "{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}"
@@ -1350,37 +1344,37 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WebCore_prebuild", "..\webk
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "crash_cache", "..\net\crash_cache.vcproj", "{B0EE0599-2913-46A0-A847-A3EC813658D3}"
ProjectSection(ProjectDependencies) = postProject
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
{326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dump_cache", "..\net\dump_cache.vcproj", "{7D1EC571-687B-5D48-E259-C5BA78E717D0}"
ProjectSection(ProjectDependencies) = postProject
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
{326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stress_cache", "..\net\stress_cache.vcproj", "{A763D879-02F0-B744-E6D5-E94C0197057C}"
ProjectSection(ProjectDependencies) = postProject
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
{326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "printing", "..\printing\printing.vcproj", "{9E5416B9-B91B-4029-93F4-102C1AD5CAF4}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "printing_unittests", "..\printing\printing_unittests.vcproj", "{8B2EE5D9-41BC-4AA2-A401-2DC143A05D2E}"
ProjectSection(ProjectDependencies) = postProject
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
- {9E5416B9-B91B-4029-93F4-102C1AD5CAF4} = {9E5416B9-B91B-4029-93F4-102C1AD5CAF4}
- {A1CE1DC3-3800-E6A1-F8ED-CC5D3B9D8B6F} = {A1CE1DC3-3800-E6A1-F8ED-CC5D3B9D8B6F}
{BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
+ {A1CE1DC3-3800-E6A1-F8ED-CC5D3B9D8B6F} = {A1CE1DC3-3800-E6A1-F8ED-CC5D3B9D8B6F}
+ {9E5416B9-B91B-4029-93F4-102C1AD5CAF4} = {9E5416B9-B91B-4029-93F4-102C1AD5CAF4}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WebKit", "..\webkit\build\WebKit\WebKit.vcproj", "{5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65}"
ProjectSection(ProjectDependencies) = postProject
- {1444235E-0E97-4C80-A73E-EE73F3706C32} = {1444235E-0E97-4C80-A73E-EE73F3706C32}
- {2E2D3301-2EC4-4C0F-B889-87073B30F673} = {2E2D3301-2EC4-4C0F-B889-87073B30F673}
{2F7EDFA2-EE27-4D83-8454-9EFBD5779203} = {2F7EDFA2-EE27-4D83-8454-9EFBD5779203}
+ {2E2D3301-2EC4-4C0F-B889-87073B30F673} = {2E2D3301-2EC4-4C0F-B889-87073B30F673}
+ {1444235E-0E97-4C80-A73E-EE73F3706C32} = {1444235E-0E97-4C80-A73E-EE73F3706C32}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "worker", "worker\worker.vcproj", "{C78D02D0-A366-4EC6-A248-AA8E64C4BA18}"
@@ -1393,114 +1387,114 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_support_base", "..\bas
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "url_fetch_test", "test\url_fetch_test\url_fetch_test.vcproj", "{7EFD0C91-198E-4043-9E71-4A4C7879B929}"
ProjectSection(ProjectDependencies) = postProject
- {0D04AEC1-6B68-492C-BCCF-808DFD69ABC6} = {0D04AEC1-6B68-492C-BCCF-808DFD69ABC6}
- {1556EF78-C7E6-43C8-951F-F6B43AC0DD12} = {1556EF78-C7E6-43C8-951F-F6B43AC0DD12}
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
- {21E22961-22BF-4493-BD3A-868F93DA5179} = {21E22961-22BF-4493-BD3A-868F93DA5179}
- {2A70CBF0-847E-4E3A-B926-542A656DC7FE} = {2A70CBF0-847E-4E3A-B926-542A656DC7FE}
- {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
- {4631946D-7D5F-44BD-A5A8-504C0A7033BE} = {4631946D-7D5F-44BD-A5A8-504C0A7033BE}
- {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA} = {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}
- {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
- {7B219FAA-E360-43C8-B341-804A94EEFFAC} = {7B219FAA-E360-43C8-B341-804A94EEFFAC}
- {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
- {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
- {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
- {A28310B8-7BD0-4CDF-A7D8-59CAB42AA1C4} = {A28310B8-7BD0-4CDF-A7D8-59CAB42AA1C4}
- {A493331B-3180-49FE-8D0E-D121645E63AD} = {A493331B-3180-49FE-8D0E-D121645E63AD}
- {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
- {BE6D5659-A8D5-4890-A42C-090DD10EF62C} = {BE6D5659-A8D5-4890-A42C-090DD10EF62C}
- {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
- {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
- {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3} = {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3}
- {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
- {E750512D-FC7C-4C98-BF04-0A0DAF882055} = {E750512D-FC7C-4C98-BF04-0A0DAF882055}
- {E7B11CF0-FE40-4A69-AE20-1B882F4D7585} = {E7B11CF0-FE40-4A69-AE20-1B882F4D7585}
- {EC8B7909-62AF-470D-A75D-E1D89C837142} = {EC8B7909-62AF-470D-A75D-E1D89C837142}
- {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
- {F54ABC59-5C00-414A-A9BA-BAF26D1699F0} = {F54ABC59-5C00-414A-A9BA-BAF26D1699F0}
- {F9810DE8-CBC3-4605-A7B1-ECA2D5292FD7} = {F9810DE8-CBC3-4605-A7B1-ECA2D5292FD7}
{FA537565-7B03-4FFC-AF15-F7A979B72E22} = {FA537565-7B03-4FFC-AF15-F7A979B72E22}
+ {F9810DE8-CBC3-4605-A7B1-ECA2D5292FD7} = {F9810DE8-CBC3-4605-A7B1-ECA2D5292FD7}
+ {F54ABC59-5C00-414A-A9BA-BAF26D1699F0} = {F54ABC59-5C00-414A-A9BA-BAF26D1699F0}
+ {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
+ {EC8B7909-62AF-470D-A75D-E1D89C837142} = {EC8B7909-62AF-470D-A75D-E1D89C837142}
+ {E7B11CF0-FE40-4A69-AE20-1B882F4D7585} = {E7B11CF0-FE40-4A69-AE20-1B882F4D7585}
+ {E750512D-FC7C-4C98-BF04-0A0DAF882055} = {E750512D-FC7C-4C98-BF04-0A0DAF882055}
+ {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
+ {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3} = {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3}
+ {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
+ {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
+ {BE6D5659-A8D5-4890-A42C-090DD10EF62C} = {BE6D5659-A8D5-4890-A42C-090DD10EF62C}
+ {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
+ {A493331B-3180-49FE-8D0E-D121645E63AD} = {A493331B-3180-49FE-8D0E-D121645E63AD}
+ {A28310B8-7BD0-4CDF-A7D8-59CAB42AA1C4} = {A28310B8-7BD0-4CDF-A7D8-59CAB42AA1C4}
+ {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
+ {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
+ {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
+ {7B219FAA-E360-43C8-B341-804A94EEFFAC} = {7B219FAA-E360-43C8-B341-804A94EEFFAC}
+ {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
+ {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA} = {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}
+ {4631946D-7D5F-44BD-A5A8-504C0A7033BE} = {4631946D-7D5F-44BD-A5A8-504C0A7033BE}
+ {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
+ {2A70CBF0-847E-4E3A-B926-542A656DC7FE} = {2A70CBF0-847E-4E3A-B926-542A656DC7FE}
+ {21E22961-22BF-4493-BD3A-868F93DA5179} = {21E22961-22BF-4493-BD3A-868F93DA5179}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
+ {1556EF78-C7E6-43C8-951F-F6B43AC0DD12} = {1556EF78-C7E6-43C8-951F-F6B43AC0DD12}
+ {0D04AEC1-6B68-492C-BCCF-808DFD69ABC6} = {0D04AEC1-6B68-492C-BCCF-808DFD69ABC6}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_worker", "..\webkit\tools\test_shell\test_worker\test_worker.vcproj", "{3E03D462-780D-4C4D-B22E-5E095E6CF110}"
ProjectSection(ProjectDependencies) = postProject
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
- {1C16337B-ACF3-4D03-AA90-851C5B5EADA6} = {1C16337B-ACF3-4D03-AA90-851C5B5EADA6}
- {21E22961-22BF-4493-BD3A-868F93DA5179} = {21E22961-22BF-4493-BD3A-868F93DA5179}
- {238CE175-76CE-4A25-A676-69D115885601} = {238CE175-76CE-4A25-A676-69D115885601}
- {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
- {49909552-0B0C-4C14-8CF6-DB8A2ADE0934} = {49909552-0B0C-4C14-8CF6-DB8A2ADE0934}
- {5916D37D-8C97-424F-A904-74E52594C2D6} = {5916D37D-8C97-424F-A904-74E52594C2D6}
- {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65} = {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65}
- {625A8F11-2B4E-45B4-BD99-C6D629C606C0} = {625A8F11-2B4E-45B4-BD99-C6D629C606C0}
- {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
- {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
- {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6} = {AA8A5A85-592B-4357-BC60-E0E91E026AF6}
- {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
- {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09} = {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09}
- {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
- {EC8B7909-62AF-470D-A75D-E1D89C837142} = {EC8B7909-62AF-470D-A75D-E1D89C837142}
- {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
- {F4F4BCAA-EA59-445C-A119-3E6C29647A51} = {F4F4BCAA-EA59-445C-A119-3E6C29647A51}
{FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED} = {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED}
+ {F4F4BCAA-EA59-445C-A119-3E6C29647A51} = {F4F4BCAA-EA59-445C-A119-3E6C29647A51}
+ {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
+ {EC8B7909-62AF-470D-A75D-E1D89C837142} = {EC8B7909-62AF-470D-A75D-E1D89C837142}
+ {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
+ {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09} = {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09}
+ {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6} = {AA8A5A85-592B-4357-BC60-E0E91E026AF6}
+ {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
+ {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
+ {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
+ {625A8F11-2B4E-45B4-BD99-C6D629C606C0} = {625A8F11-2B4E-45B4-BD99-C6D629C606C0}
+ {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65} = {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65}
+ {5916D37D-8C97-424F-A904-74E52594C2D6} = {5916D37D-8C97-424F-A904-74E52594C2D6}
+ {49909552-0B0C-4C14-8CF6-DB8A2ADE0934} = {49909552-0B0C-4C14-8CF6-DB8A2ADE0934}
+ {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
+ {238CE175-76CE-4A25-A676-69D115885601} = {238CE175-76CE-4A25-A676-69D115885601}
+ {21E22961-22BF-4493-BD3A-868F93DA5179} = {21E22961-22BF-4493-BD3A-868F93DA5179}
+ {1C16337B-ACF3-4D03-AA90-851C5B5EADA6} = {1C16337B-ACF3-4D03-AA90-851C5B5EADA6}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "js2c", "..\v8\tools\gyp\js2c.vcproj", "{82BC22B5-1D58-28BA-8735-58B591E1D154}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "v8_nosnapshot", "..\v8\tools\gyp\v8_nosnapshot.vcproj", "{879286C0-3234-D14B-BB2C-32D4D1B809CE}"
ProjectSection(ProjectDependencies) = postProject
- {82BC22B5-1D58-28BA-8735-58B591E1D154} = {82BC22B5-1D58-28BA-8735-58B591E1D154}
{EC8B7909-62AF-470D-A75D-E1D89C837142} = {EC8B7909-62AF-470D-A75D-E1D89C837142}
+ {82BC22B5-1D58-28BA-8735-58B591E1D154} = {82BC22B5-1D58-28BA-8735-58B591E1D154}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "browser_tests_dll", "test\browser\browser_tests_dll.vcproj", "{D7589D0D-304E-4589-85A4-153B7D84B07F}"
ProjectSection(ProjectDependencies) = postProject
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
- {1C16337B-ACF3-4D03-AA90-851C5B5EADA6} = {1C16337B-ACF3-4D03-AA90-851C5B5EADA6}
- {20A560A0-2CD0-4D9E-A58B-1F24B99C087A} = {20A560A0-2CD0-4D9E-A58B-1F24B99C087A}
- {21E22961-22BF-4493-BD3A-868F93DA5179} = {21E22961-22BF-4493-BD3A-868F93DA5179}
- {238CE175-76CE-4A25-A676-69D115885601} = {238CE175-76CE-4A25-A676-69D115885601}
- {2A70CBF0-847E-4E3A-B926-542A656DC7FE} = {2A70CBF0-847E-4E3A-B926-542A656DC7FE}
- {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
- {4631946D-7D5F-44BD-A5A8-504C0A7033BE} = {4631946D-7D5F-44BD-A5A8-504C0A7033BE}
- {49909552-0B0C-4C14-8CF6-DB8A2ADE0934} = {49909552-0B0C-4C14-8CF6-DB8A2ADE0934}
- {5597AD47-3494-4750-A235-4F9C2F864700} = {5597AD47-3494-4750-A235-4F9C2F864700}
- {57823D8C-A317-4713-9125-2C91FDFD12D6} = {57823D8C-A317-4713-9125-2C91FDFD12D6}
- {5916D37D-8C97-424F-A904-74E52594C2D6} = {5916D37D-8C97-424F-A904-74E52594C2D6}
- {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA} = {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}
- {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65} = {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65}
- {625A8F11-2B4E-45B4-BD99-C6D629C606C0} = {625A8F11-2B4E-45B4-BD99-C6D629C606C0}
- {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9} = {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9}
- {6F9258E5-294F-47B2-919D-17FFE7A8B751} = {6F9258E5-294F-47B2-919D-17FFE7A8B751}
- {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
- {7B219FAA-E360-43C8-B341-804A94EEFFAC} = {7B219FAA-E360-43C8-B341-804A94EEFFAC}
- {7F0A70F6-BE3F-4C19-B435-956AB8F30BA4} = {7F0A70F6-BE3F-4C19-B435-956AB8F30BA4}
- {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
- {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
- {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
- {9301A569-5D2B-4D11-9332-B1E30AEACB8D} = {9301A569-5D2B-4D11-9332-B1E30AEACB8D}
- {9E5416B9-B91B-4029-93F4-102C1AD5CAF4} = {9E5416B9-B91B-4029-93F4-102C1AD5CAF4}
- {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6} = {AA8A5A85-592B-4357-BC60-E0E91E026AF6}
- {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE} = {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE}
- {BF4F447B-72B5-4059-BE1B-F94337B1F385} = {BF4F447B-72B5-4059-BE1B-F94337B1F385}
- {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
- {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
- {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09} = {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09}
- {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3} = {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3}
- {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
- {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E} = {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E}
- {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
- {EC8B7909-62AF-470D-A75D-E1D89C837142} = {EC8B7909-62AF-470D-A75D-E1D89C837142}
- {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
- {EFBB1436-A63F-4CD8-9E99-B89226E782EC} = {EFBB1436-A63F-4CD8-9E99-B89226E782EC}
- {F4F4BCAA-EA59-445C-A119-3E6C29647A51} = {F4F4BCAA-EA59-445C-A119-3E6C29647A51}
- {F54ABC59-5C00-414A-A9BA-BAF26D1699F0} = {F54ABC59-5C00-414A-A9BA-BAF26D1699F0}
- {FA537565-7B03-4FFC-AF15-F7A979B72E22} = {FA537565-7B03-4FFC-AF15-F7A979B72E22}
- {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED} = {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED}
{FD683DD6-D9BF-4B1B-AB6D-A3AC03EDAA4D} = {FD683DD6-D9BF-4B1B-AB6D-A3AC03EDAA4D}
+ {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED} = {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED}
+ {FA537565-7B03-4FFC-AF15-F7A979B72E22} = {FA537565-7B03-4FFC-AF15-F7A979B72E22}
+ {F54ABC59-5C00-414A-A9BA-BAF26D1699F0} = {F54ABC59-5C00-414A-A9BA-BAF26D1699F0}
+ {F4F4BCAA-EA59-445C-A119-3E6C29647A51} = {F4F4BCAA-EA59-445C-A119-3E6C29647A51}
+ {EFBB1436-A63F-4CD8-9E99-B89226E782EC} = {EFBB1436-A63F-4CD8-9E99-B89226E782EC}
+ {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C}
+ {EC8B7909-62AF-470D-A75D-E1D89C837142} = {EC8B7909-62AF-470D-A75D-E1D89C837142}
+ {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E} = {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E}
+ {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}
+ {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3} = {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3}
+ {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09} = {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09}
+ {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD}
+ {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
+ {BF4F447B-72B5-4059-BE1B-F94337B1F385} = {BF4F447B-72B5-4059-BE1B-F94337B1F385}
+ {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE} = {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE}
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6} = {AA8A5A85-592B-4357-BC60-E0E91E026AF6}
+ {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551}
+ {9E5416B9-B91B-4029-93F4-102C1AD5CAF4} = {9E5416B9-B91B-4029-93F4-102C1AD5CAF4}
+ {9301A569-5D2B-4D11-9332-B1E30AEACB8D} = {9301A569-5D2B-4D11-9332-B1E30AEACB8D}
+ {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
+ {899F1280-3441-4D1F-BA04-CCD6208D9146} = {899F1280-3441-4D1F-BA04-CCD6208D9146}
+ {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}
+ {7F0A70F6-BE3F-4C19-B435-956AB8F30BA4} = {7F0A70F6-BE3F-4C19-B435-956AB8F30BA4}
+ {7B219FAA-E360-43C8-B341-804A94EEFFAC} = {7B219FAA-E360-43C8-B341-804A94EEFFAC}
+ {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D}
+ {6F9258E5-294F-47B2-919D-17FFE7A8B751} = {6F9258E5-294F-47B2-919D-17FFE7A8B751}
+ {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9} = {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9}
+ {625A8F11-2B4E-45B4-BD99-C6D629C606C0} = {625A8F11-2B4E-45B4-BD99-C6D629C606C0}
+ {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65} = {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65}
+ {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA} = {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}
+ {5916D37D-8C97-424F-A904-74E52594C2D6} = {5916D37D-8C97-424F-A904-74E52594C2D6}
+ {57823D8C-A317-4713-9125-2C91FDFD12D6} = {57823D8C-A317-4713-9125-2C91FDFD12D6}
+ {5597AD47-3494-4750-A235-4F9C2F864700} = {5597AD47-3494-4750-A235-4F9C2F864700}
+ {49909552-0B0C-4C14-8CF6-DB8A2ADE0934} = {49909552-0B0C-4C14-8CF6-DB8A2ADE0934}
+ {4631946D-7D5F-44BD-A5A8-504C0A7033BE} = {4631946D-7D5F-44BD-A5A8-504C0A7033BE}
+ {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243}
+ {2A70CBF0-847E-4E3A-B926-542A656DC7FE} = {2A70CBF0-847E-4E3A-B926-542A656DC7FE}
+ {238CE175-76CE-4A25-A676-69D115885601} = {238CE175-76CE-4A25-A676-69D115885601}
+ {21E22961-22BF-4493-BD3A-868F93DA5179} = {21E22961-22BF-4493-BD3A-868F93DA5179}
+ {20A560A0-2CD0-4D9E-A58B-1F24B99C087A} = {20A560A0-2CD0-4D9E-A58B-1F24B99C087A}
+ {1C16337B-ACF3-4D03-AA90-851C5B5EADA6} = {1C16337B-ACF3-4D03-AA90-851C5B5EADA6}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "browser_tests_launcher", "test\browser\browser_tests_launcher.vcproj", "{9B87804D-2502-480B-95AE-5A572CE91809}"
@@ -1516,40 +1510,46 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "courgette_lib", "..\third_p
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "courgette_fuzz", "..\third_party\courgette\courgette_fuzz.vcproj", "{57C27529-8CA9-4FC3-9C02-DA05B172F785}"
ProjectSection(ProjectDependencies) = postProject
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
- {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
- {9A72A362-E617-4205-B9F2-43C6FB280FA1} = {9A72A362-E617-4205-B9F2-43C6FB280FA1}
- {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
{F22022F0-2D3B-5610-4E80-C674A8E01C5A} = {F22022F0-2D3B-5610-4E80-C674A8E01C5A}
+ {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
+ {9A72A362-E617-4205-B9F2-43C6FB280FA1} = {9A72A362-E617-4205-B9F2-43C6FB280FA1}
+ {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "courgette_unittests", "..\third_party\courgette\courgette_unittests.vcproj", "{24309F1A-4035-46F9-A3D8-F47DC4BCC2B8}"
ProjectSection(ProjectDependencies) = postProject
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
- {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
- {9A72A362-E617-4205-B9F2-43C6FB280FA1} = {9A72A362-E617-4205-B9F2-43C6FB280FA1}
- {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
{F22022F0-2D3B-5610-4E80-C674A8E01C5A} = {F22022F0-2D3B-5610-4E80-C674A8E01C5A}
+ {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}
+ {9A72A362-E617-4205-B9F2-43C6FB280FA1} = {9A72A362-E617-4205-B9F2-43C6FB280FA1}
+ {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "courgette_tool", "..\third_party\courgette\courgette_tool.vcproj", "{4EA8CE12-9C6F-45E5-9D08-720383FE3685}"
ProjectSection(ProjectDependencies) = postProject
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
- {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
- {9A72A362-E617-4205-B9F2-43C6FB280FA1} = {9A72A362-E617-4205-B9F2-43C6FB280FA1}
{F22022F0-2D3B-5610-4E80-C674A8E01C5A} = {F22022F0-2D3B-5610-4E80-C674A8E01C5A}
+ {9A72A362-E617-4205-B9F2-43C6FB280FA1} = {9A72A362-E617-4205-B9F2-43C6FB280FA1}
+ {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "courgette_minimal_tool", "..\third_party\courgette\courgette_minimal_tool.vcproj", "{EB79415F-2F17-4BDC-AADD-4CA4C2D21B73}"
ProjectSection(ProjectDependencies) = postProject
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
- {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
- {9A72A362-E617-4205-B9F2-43C6FB280FA1} = {9A72A362-E617-4205-B9F2-43C6FB280FA1}
{F22022F0-2D3B-5610-4E80-C674A8E01C5A} = {F22022F0-2D3B-5610-4E80-C674A8E01C5A}
+ {9A72A362-E617-4205-B9F2-43C6FB280FA1} = {9A72A362-E617-4205-B9F2-43C6FB280FA1}
+ {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtestmain", "..\testing\gtestmain.vcproj", "{A1CE1DC3-3800-E6A1-F8ED-CC5D3B9D8B6F}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "views", "..\views\views.vcproj", "{6F9258E5-294F-47B2-919D-17FFE7A8B751}"
+ ProjectSection(ProjectDependencies) = postProject
+ {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE} = {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE}
+ {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}
+ EndProjectSection
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Mixed Platforms = Debug|Mixed Platforms
@@ -1558,102 +1558,38 @@ Global
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {0026A376-C4F1-4575-A1BA-578C69F07013}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {0026A376-C4F1-4575-A1BA-578C69F07013}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {0026A376-C4F1-4575-A1BA-578C69F07013}.Debug|Win32.ActiveCfg = Debug|Win32
- {0026A376-C4F1-4575-A1BA-578C69F07013}.Debug|Win32.Build.0 = Debug|Win32
- {0026A376-C4F1-4575-A1BA-578C69F07013}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {0026A376-C4F1-4575-A1BA-578C69F07013}.Release|Mixed Platforms.Build.0 = Release|Win32
- {0026A376-C4F1-4575-A1BA-578C69F07013}.Release|Win32.ActiveCfg = Release|Win32
- {0026A376-C4F1-4575-A1BA-578C69F07013}.Release|Win32.Build.0 = Release|Win32
- {018D4F38-6272-448F-A864-976DA09F05D0}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {018D4F38-6272-448F-A864-976DA09F05D0}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {018D4F38-6272-448F-A864-976DA09F05D0}.Debug|Win32.ActiveCfg = Debug|Win32
- {018D4F38-6272-448F-A864-976DA09F05D0}.Debug|Win32.Build.0 = Debug|Win32
- {018D4F38-6272-448F-A864-976DA09F05D0}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {018D4F38-6272-448F-A864-976DA09F05D0}.Release|Mixed Platforms.Build.0 = Release|Win32
- {018D4F38-6272-448F-A864-976DA09F05D0}.Release|Win32.ActiveCfg = Release|Win32
- {018D4F38-6272-448F-A864-976DA09F05D0}.Release|Win32.Build.0 = Release|Win32
- {0557BC3C-DE87-4127-BDAA-9BD9BDB13FB4}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {0557BC3C-DE87-4127-BDAA-9BD9BDB13FB4}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {0557BC3C-DE87-4127-BDAA-9BD9BDB13FB4}.Debug|Win32.ActiveCfg = Debug|Win32
- {0557BC3C-DE87-4127-BDAA-9BD9BDB13FB4}.Debug|Win32.Build.0 = Debug|Win32
- {0557BC3C-DE87-4127-BDAA-9BD9BDB13FB4}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {0557BC3C-DE87-4127-BDAA-9BD9BDB13FB4}.Release|Mixed Platforms.Build.0 = Release|Win32
- {0557BC3C-DE87-4127-BDAA-9BD9BDB13FB4}.Release|Win32.ActiveCfg = Release|Win32
- {0557BC3C-DE87-4127-BDAA-9BD9BDB13FB4}.Release|Win32.Build.0 = Release|Win32
- {0A13F602-B497-4BC1-ABD8-03CA8E95B2AF}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {0A13F602-B497-4BC1-ABD8-03CA8E95B2AF}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {0A13F602-B497-4BC1-ABD8-03CA8E95B2AF}.Debug|Win32.ActiveCfg = Debug|Win32
- {0A13F602-B497-4BC1-ABD8-03CA8E95B2AF}.Debug|Win32.Build.0 = Debug|Win32
- {0A13F602-B497-4BC1-ABD8-03CA8E95B2AF}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {0A13F602-B497-4BC1-ABD8-03CA8E95B2AF}.Release|Mixed Platforms.Build.0 = Release|Win32
- {0A13F602-B497-4BC1-ABD8-03CA8E95B2AF}.Release|Win32.ActiveCfg = Release|Win32
- {0A13F602-B497-4BC1-ABD8-03CA8E95B2AF}.Release|Win32.Build.0 = Release|Win32
- {0B469837-3D46-484A-AFB3-C5A6C68730B9}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {0B469837-3D46-484A-AFB3-C5A6C68730B9}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {0B469837-3D46-484A-AFB3-C5A6C68730B9}.Debug|Win32.ActiveCfg = Debug|Win32
- {0B469837-3D46-484A-AFB3-C5A6C68730B9}.Debug|Win32.Build.0 = Debug|Win32
- {0B469837-3D46-484A-AFB3-C5A6C68730B9}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {0B469837-3D46-484A-AFB3-C5A6C68730B9}.Release|Mixed Platforms.Build.0 = Release|Win32
- {0B469837-3D46-484A-AFB3-C5A6C68730B9}.Release|Win32.ActiveCfg = Release|Win32
- {0B469837-3D46-484A-AFB3-C5A6C68730B9}.Release|Win32.Build.0 = Release|Win32
- {0D04AEC1-6B68-492C-BCCF-808DFD69ABC6}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {0D04AEC1-6B68-492C-BCCF-808DFD69ABC6}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {0D04AEC1-6B68-492C-BCCF-808DFD69ABC6}.Debug|Win32.ActiveCfg = Debug|Win32
- {0D04AEC1-6B68-492C-BCCF-808DFD69ABC6}.Debug|Win32.Build.0 = Debug|Win32
- {0D04AEC1-6B68-492C-BCCF-808DFD69ABC6}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {0D04AEC1-6B68-492C-BCCF-808DFD69ABC6}.Release|Mixed Platforms.Build.0 = Release|Win32
- {0D04AEC1-6B68-492C-BCCF-808DFD69ABC6}.Release|Win32.ActiveCfg = Release|Win32
- {0D04AEC1-6B68-492C-BCCF-808DFD69ABC6}.Release|Win32.Build.0 = Release|Win32
- {0D54A5C4-B78B-41A2-BF8A-5DA48AC90495}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {0D54A5C4-B78B-41A2-BF8A-5DA48AC90495}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {0D54A5C4-B78B-41A2-BF8A-5DA48AC90495}.Debug|Win32.ActiveCfg = Debug|Win32
- {0D54A5C4-B78B-41A2-BF8A-5DA48AC90495}.Debug|Win32.Build.0 = Debug|Win32
- {0D54A5C4-B78B-41A2-BF8A-5DA48AC90495}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {0D54A5C4-B78B-41A2-BF8A-5DA48AC90495}.Release|Mixed Platforms.Build.0 = Release|Win32
- {0D54A5C4-B78B-41A2-BF8A-5DA48AC90495}.Release|Win32.ActiveCfg = Release|Win32
- {0D54A5C4-B78B-41A2-BF8A-5DA48AC90495}.Release|Win32.Build.0 = Release|Win32
- {1444235E-0E97-4C80-A73E-EE73F3706C32}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {1444235E-0E97-4C80-A73E-EE73F3706C32}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {1444235E-0E97-4C80-A73E-EE73F3706C32}.Debug|Win32.ActiveCfg = Debug|Win32
- {1444235E-0E97-4C80-A73E-EE73F3706C32}.Debug|Win32.Build.0 = Debug|Win32
- {1444235E-0E97-4C80-A73E-EE73F3706C32}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {1444235E-0E97-4C80-A73E-EE73F3706C32}.Release|Mixed Platforms.Build.0 = Release|Win32
- {1444235E-0E97-4C80-A73E-EE73F3706C32}.Release|Win32.ActiveCfg = Release|Win32
- {1444235E-0E97-4C80-A73E-EE73F3706C32}.Release|Win32.Build.0 = Release|Win32
- {1556EF78-C7E6-43C8-951F-F6B43AC0DD12}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {1556EF78-C7E6-43C8-951F-F6B43AC0DD12}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {1556EF78-C7E6-43C8-951F-F6B43AC0DD12}.Debug|Win32.ActiveCfg = Debug|Win32
- {1556EF78-C7E6-43C8-951F-F6B43AC0DD12}.Debug|Win32.Build.0 = Debug|Win32
- {1556EF78-C7E6-43C8-951F-F6B43AC0DD12}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {1556EF78-C7E6-43C8-951F-F6B43AC0DD12}.Release|Mixed Platforms.Build.0 = Release|Win32
- {1556EF78-C7E6-43C8-951F-F6B43AC0DD12}.Release|Win32.ActiveCfg = Release|Win32
- {1556EF78-C7E6-43C8-951F-F6B43AC0DD12}.Release|Win32.Build.0 = Release|Win32
- {182D578D-2DAC-4BB7-AFEC-9A2855E56F94}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {182D578D-2DAC-4BB7-AFEC-9A2855E56F94}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {182D578D-2DAC-4BB7-AFEC-9A2855E56F94}.Debug|Win32.ActiveCfg = Debug|Win32
- {182D578D-2DAC-4BB7-AFEC-9A2855E56F94}.Debug|Win32.Build.0 = Debug|Win32
- {182D578D-2DAC-4BB7-AFEC-9A2855E56F94}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {182D578D-2DAC-4BB7-AFEC-9A2855E56F94}.Release|Mixed Platforms.Build.0 = Release|Win32
- {182D578D-2DAC-4BB7-AFEC-9A2855E56F94}.Release|Win32.ActiveCfg = Release|Win32
- {182D578D-2DAC-4BB7-AFEC-9A2855E56F94}.Release|Win32.Build.0 = Release|Win32
- {1832A374-8A74-4F9E-B536-69A699B3E165}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {1832A374-8A74-4F9E-B536-69A699B3E165}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {1832A374-8A74-4F9E-B536-69A699B3E165}.Debug|Win32.ActiveCfg = Debug|Win32
- {1832A374-8A74-4F9E-B536-69A699B3E165}.Debug|Win32.Build.0 = Debug|Win32
- {1832A374-8A74-4F9E-B536-69A699B3E165}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {1832A374-8A74-4F9E-B536-69A699B3E165}.Release|Mixed Platforms.Build.0 = Release|Win32
- {1832A374-8A74-4F9E-B536-69A699B3E165}.Release|Win32.ActiveCfg = Release|Win32
- {1832A374-8A74-4F9E-B536-69A699B3E165}.Release|Win32.Build.0 = Release|Win32
- {1846F110-8263-413F-9924-36F64DD8FE41}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {1846F110-8263-413F-9924-36F64DD8FE41}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {1846F110-8263-413F-9924-36F64DD8FE41}.Debug|Win32.ActiveCfg = Debug|Win32
- {1846F110-8263-413F-9924-36F64DD8FE41}.Debug|Win32.Build.0 = Debug|Win32
- {1846F110-8263-413F-9924-36F64DD8FE41}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {1846F110-8263-413F-9924-36F64DD8FE41}.Release|Mixed Platforms.Build.0 = Release|Win32
- {1846F110-8263-413F-9924-36F64DD8FE41}.Release|Win32.ActiveCfg = Release|Win32
- {1846F110-8263-413F-9924-36F64DD8FE41}.Release|Win32.Build.0 = Release|Win32
+ {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}.Debug|Win32.ActiveCfg = Debug|Win32
+ {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}.Debug|Win32.Build.0 = Debug|Win32
+ {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}.Release|Win32.ActiveCfg = Release|Win32
+ {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}.Release|Win32.Build.0 = Release|Win32
+ {9301A569-5D2B-4D11-9332-B1E30AEACB8D}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {9301A569-5D2B-4D11-9332-B1E30AEACB8D}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {9301A569-5D2B-4D11-9332-B1E30AEACB8D}.Debug|Win32.ActiveCfg = Debug|Win32
+ {9301A569-5D2B-4D11-9332-B1E30AEACB8D}.Debug|Win32.Build.0 = Debug|Win32
+ {9301A569-5D2B-4D11-9332-B1E30AEACB8D}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {9301A569-5D2B-4D11-9332-B1E30AEACB8D}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {9301A569-5D2B-4D11-9332-B1E30AEACB8D}.Release|Win32.ActiveCfg = Release|Win32
+ {9301A569-5D2B-4D11-9332-B1E30AEACB8D}.Release|Win32.Build.0 = Release|Win32
+ {B92AE829-E1CD-4781-824A-DCB1603A1672}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {B92AE829-E1CD-4781-824A-DCB1603A1672}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {B92AE829-E1CD-4781-824A-DCB1603A1672}.Debug|Win32.ActiveCfg = Debug|Win32
+ {B92AE829-E1CD-4781-824A-DCB1603A1672}.Debug|Win32.Build.0 = Debug|Win32
+ {B92AE829-E1CD-4781-824A-DCB1603A1672}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {B92AE829-E1CD-4781-824A-DCB1603A1672}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {B92AE829-E1CD-4781-824A-DCB1603A1672}.Release|Win32.ActiveCfg = Release|Win32
+ {B92AE829-E1CD-4781-824A-DCB1603A1672}.Release|Win32.Build.0 = Release|Win32
+ {899F1280-3441-4D1F-BA04-CCD6208D9146}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {899F1280-3441-4D1F-BA04-CCD6208D9146}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {899F1280-3441-4D1F-BA04-CCD6208D9146}.Debug|Win32.ActiveCfg = Debug|Win32
+ {899F1280-3441-4D1F-BA04-CCD6208D9146}.Debug|Win32.Build.0 = Debug|Win32
+ {899F1280-3441-4D1F-BA04-CCD6208D9146}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {899F1280-3441-4D1F-BA04-CCD6208D9146}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {899F1280-3441-4D1F-BA04-CCD6208D9146}.Release|Win32.ActiveCfg = Release|Win32
+ {899F1280-3441-4D1F-BA04-CCD6208D9146}.Release|Win32.Build.0 = Release|Win32
{1C16337B-ACF3-4D03-AA90-851C5B5EADA6}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{1C16337B-ACF3-4D03-AA90-851C5B5EADA6}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{1C16337B-ACF3-4D03-AA90-851C5B5EADA6}.Debug|Win32.ActiveCfg = Debug|Win32
@@ -1662,45 +1598,86 @@ Global
{1C16337B-ACF3-4D03-AA90-851C5B5EADA6}.Release|Mixed Platforms.Build.0 = Release|Win32
{1C16337B-ACF3-4D03-AA90-851C5B5EADA6}.Release|Win32.ActiveCfg = Release|Win32
{1C16337B-ACF3-4D03-AA90-851C5B5EADA6}.Release|Win32.Build.0 = Release|Win32
- {20A560A0-2CD0-4D9E-A58B-1F24B99C087A}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {20A560A0-2CD0-4D9E-A58B-1F24B99C087A}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {20A560A0-2CD0-4D9E-A58B-1F24B99C087A}.Debug|Win32.ActiveCfg = Debug|Win32
- {20A560A0-2CD0-4D9E-A58B-1F24B99C087A}.Debug|Win32.Build.0 = Debug|Win32
- {20A560A0-2CD0-4D9E-A58B-1F24B99C087A}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {20A560A0-2CD0-4D9E-A58B-1F24B99C087A}.Release|Mixed Platforms.Build.0 = Release|Win32
- {20A560A0-2CD0-4D9E-A58B-1F24B99C087A}.Release|Win32.ActiveCfg = Release|Win32
- {20A560A0-2CD0-4D9E-A58B-1F24B99C087A}.Release|Win32.Build.0 = Release|Win32
- {21C76E6E-8B38-44D6-8148-B589C13B9554}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {21C76E6E-8B38-44D6-8148-B589C13B9554}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {21C76E6E-8B38-44D6-8148-B589C13B9554}.Debug|Win32.ActiveCfg = Debug|Win32
- {21C76E6E-8B38-44D6-8148-B589C13B9554}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {21C76E6E-8B38-44D6-8148-B589C13B9554}.Release|Mixed Platforms.Build.0 = Release|Win32
- {21C76E6E-8B38-44D6-8148-B589C13B9554}.Release|Win32.ActiveCfg = Release|Win32
- {21C76E6E-8B38-44D6-8148-B589C13B9554}.Release|Win32.Build.0 = Release|Win32
- {21E22961-22BF-4493-BD3A-868F93DA5179}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {21E22961-22BF-4493-BD3A-868F93DA5179}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {21E22961-22BF-4493-BD3A-868F93DA5179}.Debug|Win32.ActiveCfg = Debug|Win32
- {21E22961-22BF-4493-BD3A-868F93DA5179}.Debug|Win32.Build.0 = Debug|Win32
- {21E22961-22BF-4493-BD3A-868F93DA5179}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {21E22961-22BF-4493-BD3A-868F93DA5179}.Release|Mixed Platforms.Build.0 = Release|Win32
- {21E22961-22BF-4493-BD3A-868F93DA5179}.Release|Win32.ActiveCfg = Release|Win32
- {21E22961-22BF-4493-BD3A-868F93DA5179}.Release|Win32.Build.0 = Release|Win32
- {226B3533-1FF3-42F6-A8E3-C4DDBC955290}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {226B3533-1FF3-42F6-A8E3-C4DDBC955290}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {226B3533-1FF3-42F6-A8E3-C4DDBC955290}.Debug|Win32.ActiveCfg = Debug|Win32
- {226B3533-1FF3-42F6-A8E3-C4DDBC955290}.Debug|Win32.Build.0 = Debug|Win32
- {226B3533-1FF3-42F6-A8E3-C4DDBC955290}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {226B3533-1FF3-42F6-A8E3-C4DDBC955290}.Release|Mixed Platforms.Build.0 = Release|Win32
- {226B3533-1FF3-42F6-A8E3-C4DDBC955290}.Release|Win32.ActiveCfg = Release|Win32
- {226B3533-1FF3-42F6-A8E3-C4DDBC955290}.Release|Win32.Build.0 = Release|Win32
- {228DD844-9926-420E-B193-6973BF2A4D0B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {228DD844-9926-420E-B193-6973BF2A4D0B}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {228DD844-9926-420E-B193-6973BF2A4D0B}.Debug|Win32.ActiveCfg = Debug|Win32
- {228DD844-9926-420E-B193-6973BF2A4D0B}.Debug|Win32.Build.0 = Debug|Win32
- {228DD844-9926-420E-B193-6973BF2A4D0B}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {228DD844-9926-420E-B193-6973BF2A4D0B}.Release|Mixed Platforms.Build.0 = Release|Win32
- {228DD844-9926-420E-B193-6973BF2A4D0B}.Release|Win32.ActiveCfg = Release|Win32
- {228DD844-9926-420E-B193-6973BF2A4D0B}.Release|Win32.Build.0 = Release|Win32
+ {5597AD47-3494-4750-A235-4F9C2F864700}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {5597AD47-3494-4750-A235-4F9C2F864700}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {5597AD47-3494-4750-A235-4F9C2F864700}.Debug|Win32.ActiveCfg = Debug|Win32
+ {5597AD47-3494-4750-A235-4F9C2F864700}.Debug|Win32.Build.0 = Debug|Win32
+ {5597AD47-3494-4750-A235-4F9C2F864700}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {5597AD47-3494-4750-A235-4F9C2F864700}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {5597AD47-3494-4750-A235-4F9C2F864700}.Release|Win32.ActiveCfg = Release|Win32
+ {5597AD47-3494-4750-A235-4F9C2F864700}.Release|Win32.Build.0 = Release|Win32
+ {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09}.Debug|Win32.Build.0 = Debug|Win32
+ {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09}.Release|Win32.ActiveCfg = Release|Win32
+ {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09}.Release|Win32.Build.0 = Release|Win32
+ {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}.Debug|Win32.ActiveCfg = Debug|Win32
+ {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}.Debug|Win32.Build.0 = Debug|Win32
+ {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}.Release|Win32.ActiveCfg = Release|Win32
+ {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}.Release|Win32.Build.0 = Release|Win32
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Debug|Win32.ActiveCfg = Debug|Win32
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Debug|Win32.Build.0 = Debug|Win32
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release|Win32.ActiveCfg = Release|Win32
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release|Win32.Build.0 = Release|Win32
+ {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9}.Debug|Win32.ActiveCfg = Debug|Win32
+ {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9}.Debug|Win32.Build.0 = Debug|Win32
+ {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9}.Release|Win32.ActiveCfg = Release|Win32
+ {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9}.Release|Win32.Build.0 = Release|Win32
+ {1556EF78-C7E6-43C8-951F-F6B43AC0DD12}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {1556EF78-C7E6-43C8-951F-F6B43AC0DD12}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {1556EF78-C7E6-43C8-951F-F6B43AC0DD12}.Debug|Win32.ActiveCfg = Debug|Win32
+ {1556EF78-C7E6-43C8-951F-F6B43AC0DD12}.Debug|Win32.Build.0 = Debug|Win32
+ {1556EF78-C7E6-43C8-951F-F6B43AC0DD12}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {1556EF78-C7E6-43C8-951F-F6B43AC0DD12}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {1556EF78-C7E6-43C8-951F-F6B43AC0DD12}.Release|Win32.ActiveCfg = Release|Win32
+ {1556EF78-C7E6-43C8-951F-F6B43AC0DD12}.Release|Win32.Build.0 = Release|Win32
+ {8C27D792-2648-4F5E-9ED0-374276327308}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {8C27D792-2648-4F5E-9ED0-374276327308}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {8C27D792-2648-4F5E-9ED0-374276327308}.Debug|Win32.ActiveCfg = Debug|Win32
+ {8C27D792-2648-4F5E-9ED0-374276327308}.Debug|Win32.Build.0 = Debug|Win32
+ {8C27D792-2648-4F5E-9ED0-374276327308}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {8C27D792-2648-4F5E-9ED0-374276327308}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {8C27D792-2648-4F5E-9ED0-374276327308}.Release|Win32.ActiveCfg = Release|Win32
+ {8C27D792-2648-4F5E-9ED0-374276327308}.Release|Win32.Build.0 = Release|Win32
+ {A0D94973-D355-47A5-A1E2-3456F321F010}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {A0D94973-D355-47A5-A1E2-3456F321F010}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {A0D94973-D355-47A5-A1E2-3456F321F010}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A0D94973-D355-47A5-A1E2-3456F321F010}.Debug|Win32.Build.0 = Debug|Win32
+ {A0D94973-D355-47A5-A1E2-3456F321F010}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {A0D94973-D355-47A5-A1E2-3456F321F010}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {A0D94973-D355-47A5-A1E2-3456F321F010}.Release|Win32.ActiveCfg = Release|Win32
+ {A0D94973-D355-47A5-A1E2-3456F321F010}.Release|Win32.Build.0 = Release|Win32
+ {C564F145-9172-42C3-BFCB-6014CA97DBCD}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {C564F145-9172-42C3-BFCB-6014CA97DBCD}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {C564F145-9172-42C3-BFCB-6014CA97DBCD}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C564F145-9172-42C3-BFCB-6014CA97DBCD}.Debug|Win32.Build.0 = Debug|Win32
+ {C564F145-9172-42C3-BFCB-6014CA97DBCD}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {C564F145-9172-42C3-BFCB-6014CA97DBCD}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {C564F145-9172-42C3-BFCB-6014CA97DBCD}.Release|Win32.ActiveCfg = Release|Win32
+ {C564F145-9172-42C3-BFCB-6014CA97DBCD}.Release|Win32.Build.0 = Release|Win32
+ {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}.Debug|Win32.ActiveCfg = Debug|Win32
+ {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}.Debug|Win32.Build.0 = Debug|Win32
+ {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}.Release|Win32.ActiveCfg = Release|Win32
+ {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}.Release|Win32.Build.0 = Release|Win32
{238CE175-76CE-4A25-A676-69D115885601}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{238CE175-76CE-4A25-A676-69D115885601}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{238CE175-76CE-4A25-A676-69D115885601}.Debug|Win32.ActiveCfg = Debug|Win32
@@ -1709,42 +1686,94 @@ Global
{238CE175-76CE-4A25-A676-69D115885601}.Release|Mixed Platforms.Build.0 = Release|Win32
{238CE175-76CE-4A25-A676-69D115885601}.Release|Win32.ActiveCfg = Release|Win32
{238CE175-76CE-4A25-A676-69D115885601}.Release|Win32.Build.0 = Release|Win32
- {24309F1A-4035-46F9-A3D8-F47DC4BCC2B8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {24309F1A-4035-46F9-A3D8-F47DC4BCC2B8}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {24309F1A-4035-46F9-A3D8-F47DC4BCC2B8}.Debug|Win32.ActiveCfg = Debug|Win32
- {24309F1A-4035-46F9-A3D8-F47DC4BCC2B8}.Debug|Win32.Build.0 = Debug|Win32
- {24309F1A-4035-46F9-A3D8-F47DC4BCC2B8}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {24309F1A-4035-46F9-A3D8-F47DC4BCC2B8}.Release|Mixed Platforms.Build.0 = Release|Win32
- {24309F1A-4035-46F9-A3D8-F47DC4BCC2B8}.Release|Win32.ActiveCfg = Release|Win32
- {24309F1A-4035-46F9-A3D8-F47DC4BCC2B8}.Release|Win32.Build.0 = Release|Win32
- {24A5AC7C-280B-4899-9153-6BA570A081E7}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {24A5AC7C-280B-4899-9153-6BA570A081E7}.Debug|Win32.ActiveCfg = Debug|Win32
- {24A5AC7C-280B-4899-9153-6BA570A081E7}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {24A5AC7C-280B-4899-9153-6BA570A081E7}.Release|Mixed Platforms.Build.0 = Release|Win32
- {24A5AC7C-280B-4899-9153-6BA570A081E7}.Release|Win32.ActiveCfg = Release|Win32
- {24A5AC7C-280B-4899-9153-6BA570A081E7}.Release|Win32.Build.0 = Release|Win32
- {256DECCE-9886-4C21-96A5-EE47DF5E07E9}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {256DECCE-9886-4C21-96A5-EE47DF5E07E9}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {256DECCE-9886-4C21-96A5-EE47DF5E07E9}.Debug|Win32.ActiveCfg = Debug|Win32
- {256DECCE-9886-4C21-96A5-EE47DF5E07E9}.Debug|Win32.Build.0 = Debug|Win32
- {256DECCE-9886-4C21-96A5-EE47DF5E07E9}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {256DECCE-9886-4C21-96A5-EE47DF5E07E9}.Release|Mixed Platforms.Build.0 = Release|Win32
- {256DECCE-9886-4C21-96A5-EE47DF5E07E9}.Release|Win32.ActiveCfg = Release|Win32
- {256DECCE-9886-4C21-96A5-EE47DF5E07E9}.Release|Win32.Build.0 = Release|Win32
- {275F2993-EE9B-4E00-9C85-10A182FD423A}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {275F2993-EE9B-4E00-9C85-10A182FD423A}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {275F2993-EE9B-4E00-9C85-10A182FD423A}.Debug|Win32.ActiveCfg = Debug|Win32
- {275F2993-EE9B-4E00-9C85-10A182FD423A}.Debug|Win32.Build.0 = Debug|Win32
- {275F2993-EE9B-4E00-9C85-10A182FD423A}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {275F2993-EE9B-4E00-9C85-10A182FD423A}.Release|Mixed Platforms.Build.0 = Release|Win32
- {275F2993-EE9B-4E00-9C85-10A182FD423A}.Release|Win32.ActiveCfg = Release|Win32
- {275F2993-EE9B-4E00-9C85-10A182FD423A}.Release|Win32.Build.0 = Release|Win32
- {27A30967-4BBA-48D1-8522-CDE95F7B1CEC}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {27A30967-4BBA-48D1-8522-CDE95F7B1CEC}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {27A30967-4BBA-48D1-8522-CDE95F7B1CEC}.Debug|Win32.ActiveCfg = Debug|Win32
- {27A30967-4BBA-48D1-8522-CDE95F7B1CEC}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {27A30967-4BBA-48D1-8522-CDE95F7B1CEC}.Release|Mixed Platforms.Build.0 = Release|Win32
- {27A30967-4BBA-48D1-8522-CDE95F7B1CEC}.Release|Win32.ActiveCfg = Release|Win32
+ {D7A94F58-576A-45D9-A45F-EB87C63ABBB0}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {D7A94F58-576A-45D9-A45F-EB87C63ABBB0}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {D7A94F58-576A-45D9-A45F-EB87C63ABBB0}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D7A94F58-576A-45D9-A45F-EB87C63ABBB0}.Debug|Win32.Build.0 = Debug|Win32
+ {D7A94F58-576A-45D9-A45F-EB87C63ABBB0}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {D7A94F58-576A-45D9-A45F-EB87C63ABBB0}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {D7A94F58-576A-45D9-A45F-EB87C63ABBB0}.Release|Win32.ActiveCfg = Release|Win32
+ {D7A94F58-576A-45D9-A45F-EB87C63ABBB0}.Release|Win32.Build.0 = Release|Win32
+ {50B079C7-CD01-42D3-B8C4-9F8D9322E822}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {50B079C7-CD01-42D3-B8C4-9F8D9322E822}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {50B079C7-CD01-42D3-B8C4-9F8D9322E822}.Debug|Win32.ActiveCfg = Debug|Win32
+ {50B079C7-CD01-42D3-B8C4-9F8D9322E822}.Debug|Win32.Build.0 = Debug|Win32
+ {50B079C7-CD01-42D3-B8C4-9F8D9322E822}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {50B079C7-CD01-42D3-B8C4-9F8D9322E822}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {50B079C7-CD01-42D3-B8C4-9F8D9322E822}.Release|Win32.ActiveCfg = Release|Win32
+ {50B079C7-CD01-42D3-B8C4-9F8D9322E822}.Release|Win32.Build.0 = Release|Win32
+ {B55CA863-B374-4BAF-95AC-539E4FA4C90C}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {B55CA863-B374-4BAF-95AC-539E4FA4C90C}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {B55CA863-B374-4BAF-95AC-539E4FA4C90C}.Debug|Win32.ActiveCfg = Debug|Win32
+ {B55CA863-B374-4BAF-95AC-539E4FA4C90C}.Debug|Win32.Build.0 = Debug|Win32
+ {B55CA863-B374-4BAF-95AC-539E4FA4C90C}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {B55CA863-B374-4BAF-95AC-539E4FA4C90C}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {B55CA863-B374-4BAF-95AC-539E4FA4C90C}.Release|Win32.ActiveCfg = Release|Win32
+ {B55CA863-B374-4BAF-95AC-539E4FA4C90C}.Release|Win32.Build.0 = Release|Win32
+ {9946A048-043B-4F8F-9E07-9297B204714C}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {9946A048-043B-4F8F-9E07-9297B204714C}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {9946A048-043B-4F8F-9E07-9297B204714C}.Debug|Win32.ActiveCfg = Debug|Win32
+ {9946A048-043B-4F8F-9E07-9297B204714C}.Debug|Win32.Build.0 = Debug|Win32
+ {9946A048-043B-4F8F-9E07-9297B204714C}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {9946A048-043B-4F8F-9E07-9297B204714C}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {9946A048-043B-4F8F-9E07-9297B204714C}.Release|Win32.ActiveCfg = Release|Win32
+ {9946A048-043B-4F8F-9E07-9297B204714C}.Release|Win32.Build.0 = Release|Win32
+ {F9810DE8-CBC3-4605-A7B1-ECA2D5292FD7}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {F9810DE8-CBC3-4605-A7B1-ECA2D5292FD7}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {F9810DE8-CBC3-4605-A7B1-ECA2D5292FD7}.Debug|Win32.ActiveCfg = Debug|Win32
+ {F9810DE8-CBC3-4605-A7B1-ECA2D5292FD7}.Debug|Win32.Build.0 = Debug|Win32
+ {F9810DE8-CBC3-4605-A7B1-ECA2D5292FD7}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {F9810DE8-CBC3-4605-A7B1-ECA2D5292FD7}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {F9810DE8-CBC3-4605-A7B1-ECA2D5292FD7}.Release|Win32.ActiveCfg = Release|Win32
+ {F9810DE8-CBC3-4605-A7B1-ECA2D5292FD7}.Release|Win32.Build.0 = Release|Win32
+ {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E}.Debug|Win32.Build.0 = Debug|Win32
+ {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E}.Release|Win32.ActiveCfg = Release|Win32
+ {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E}.Release|Win32.Build.0 = Release|Win32
+ {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED}.Debug|Win32.ActiveCfg = Debug|Win32
+ {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED}.Debug|Win32.Build.0 = Debug|Win32
+ {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED}.Release|Win32.ActiveCfg = Release|Win32
+ {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED}.Release|Win32.Build.0 = Release|Win32
+ {B84553C8-5676-427B-B3E4-23DDDC4DBC7B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {B84553C8-5676-427B-B3E4-23DDDC4DBC7B}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {B84553C8-5676-427B-B3E4-23DDDC4DBC7B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {B84553C8-5676-427B-B3E4-23DDDC4DBC7B}.Debug|Win32.Build.0 = Debug|Win32
+ {B84553C8-5676-427B-B3E4-23DDDC4DBC7B}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {B84553C8-5676-427B-B3E4-23DDDC4DBC7B}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {B84553C8-5676-427B-B3E4-23DDDC4DBC7B}.Release|Win32.ActiveCfg = Release|Win32
+ {B84553C8-5676-427B-B3E4-23DDDC4DBC7B}.Release|Win32.Build.0 = Release|Win32
+ {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}.Debug|Win32.Build.0 = Debug|Win32
+ {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}.Release|Win32.ActiveCfg = Release|Win32
+ {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}.Release|Win32.Build.0 = Release|Win32
+ {625A8F11-2B4E-45B4-BD99-C6D629C606C0}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {625A8F11-2B4E-45B4-BD99-C6D629C606C0}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {625A8F11-2B4E-45B4-BD99-C6D629C606C0}.Debug|Win32.ActiveCfg = Debug|Win32
+ {625A8F11-2B4E-45B4-BD99-C6D629C606C0}.Debug|Win32.Build.0 = Debug|Win32
+ {625A8F11-2B4E-45B4-BD99-C6D629C606C0}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {625A8F11-2B4E-45B4-BD99-C6D629C606C0}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {625A8F11-2B4E-45B4-BD99-C6D629C606C0}.Release|Win32.ActiveCfg = Release|Win32
+ {625A8F11-2B4E-45B4-BD99-C6D629C606C0}.Release|Win32.Build.0 = Release|Win32
+ {C0A7EE2C-2A6D-45BE-BA78-6D006FDF52D9}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {C0A7EE2C-2A6D-45BE-BA78-6D006FDF52D9}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {C0A7EE2C-2A6D-45BE-BA78-6D006FDF52D9}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C0A7EE2C-2A6D-45BE-BA78-6D006FDF52D9}.Debug|Win32.Build.0 = Debug|Win32
+ {C0A7EE2C-2A6D-45BE-BA78-6D006FDF52D9}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {C0A7EE2C-2A6D-45BE-BA78-6D006FDF52D9}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {C0A7EE2C-2A6D-45BE-BA78-6D006FDF52D9}.Release|Win32.ActiveCfg = Release|Win32
+ {C0A7EE2C-2A6D-45BE-BA78-6D006FDF52D9}.Release|Win32.Build.0 = Release|Win32
{2A70CBF0-847E-4E3A-B926-542A656DC7FE}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{2A70CBF0-847E-4E3A-B926-542A656DC7FE}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{2A70CBF0-847E-4E3A-B926-542A656DC7FE}.Debug|Win32.ActiveCfg = Debug|Win32
@@ -1753,14 +1782,100 @@ Global
{2A70CBF0-847E-4E3A-B926-542A656DC7FE}.Release|Mixed Platforms.Build.0 = Release|Win32
{2A70CBF0-847E-4E3A-B926-542A656DC7FE}.Release|Win32.ActiveCfg = Release|Win32
{2A70CBF0-847E-4E3A-B926-542A656DC7FE}.Release|Win32.Build.0 = Release|Win32
- {2E2D3301-2EC4-4C0F-B889-87073B30F673}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {2E2D3301-2EC4-4C0F-B889-87073B30F673}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {2E2D3301-2EC4-4C0F-B889-87073B30F673}.Debug|Win32.ActiveCfg = Debug|Win32
- {2E2D3301-2EC4-4C0F-B889-87073B30F673}.Debug|Win32.Build.0 = Debug|Win32
- {2E2D3301-2EC4-4C0F-B889-87073B30F673}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {2E2D3301-2EC4-4C0F-B889-87073B30F673}.Release|Mixed Platforms.Build.0 = Release|Win32
- {2E2D3301-2EC4-4C0F-B889-87073B30F673}.Release|Win32.ActiveCfg = Release|Win32
- {2E2D3301-2EC4-4C0F-B889-87073B30F673}.Release|Win32.Build.0 = Release|Win32
+ {BE6D5659-A8D5-4890-A42C-090DD10EF62C}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {BE6D5659-A8D5-4890-A42C-090DD10EF62C}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {BE6D5659-A8D5-4890-A42C-090DD10EF62C}.Debug|Win32.ActiveCfg = Debug|Win32
+ {BE6D5659-A8D5-4890-A42C-090DD10EF62C}.Debug|Win32.Build.0 = Debug|Win32
+ {BE6D5659-A8D5-4890-A42C-090DD10EF62C}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {BE6D5659-A8D5-4890-A42C-090DD10EF62C}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {BE6D5659-A8D5-4890-A42C-090DD10EF62C}.Release|Win32.ActiveCfg = Release|Win32
+ {BE6D5659-A8D5-4890-A42C-090DD10EF62C}.Release|Win32.Build.0 = Release|Win32
+ {FA39524D-3067-4141-888D-28A86C66F2B9}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {FA39524D-3067-4141-888D-28A86C66F2B9}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {FA39524D-3067-4141-888D-28A86C66F2B9}.Debug|Win32.ActiveCfg = Debug|Win32
+ {FA39524D-3067-4141-888D-28A86C66F2B9}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {FA39524D-3067-4141-888D-28A86C66F2B9}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {FA39524D-3067-4141-888D-28A86C66F2B9}.Release|Win32.ActiveCfg = Release|Win32
+ {FA39524D-3067-4141-888D-28A86C66F2B9}.Release|Win32.Build.0 = Release|Win32
+ {20A560A0-2CD0-4D9E-A58B-1F24B99C087A}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {20A560A0-2CD0-4D9E-A58B-1F24B99C087A}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {20A560A0-2CD0-4D9E-A58B-1F24B99C087A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {20A560A0-2CD0-4D9E-A58B-1F24B99C087A}.Debug|Win32.Build.0 = Debug|Win32
+ {20A560A0-2CD0-4D9E-A58B-1F24B99C087A}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {20A560A0-2CD0-4D9E-A58B-1F24B99C087A}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {20A560A0-2CD0-4D9E-A58B-1F24B99C087A}.Release|Win32.ActiveCfg = Release|Win32
+ {20A560A0-2CD0-4D9E-A58B-1F24B99C087A}.Release|Win32.Build.0 = Release|Win32
+ {7B219FAA-E360-43C8-B341-804A94EEFFAC}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {7B219FAA-E360-43C8-B341-804A94EEFFAC}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {7B219FAA-E360-43C8-B341-804A94EEFFAC}.Debug|Win32.ActiveCfg = Debug|Win32
+ {7B219FAA-E360-43C8-B341-804A94EEFFAC}.Debug|Win32.Build.0 = Debug|Win32
+ {7B219FAA-E360-43C8-B341-804A94EEFFAC}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {7B219FAA-E360-43C8-B341-804A94EEFFAC}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {7B219FAA-E360-43C8-B341-804A94EEFFAC}.Release|Win32.ActiveCfg = Release|Win32
+ {7B219FAA-E360-43C8-B341-804A94EEFFAC}.Release|Win32.Build.0 = Release|Win32
+ {9055E088-25C6-47FD-87D5-D9DD9FD75C9F}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {9055E088-25C6-47FD-87D5-D9DD9FD75C9F}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {9055E088-25C6-47FD-87D5-D9DD9FD75C9F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {9055E088-25C6-47FD-87D5-D9DD9FD75C9F}.Debug|Win32.Build.0 = Debug|Win32
+ {9055E088-25C6-47FD-87D5-D9DD9FD75C9F}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {9055E088-25C6-47FD-87D5-D9DD9FD75C9F}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {9055E088-25C6-47FD-87D5-D9DD9FD75C9F}.Release|Win32.ActiveCfg = Release|Win32
+ {9055E088-25C6-47FD-87D5-D9DD9FD75C9F}.Release|Win32.Build.0 = Release|Win32
+ {ECFC2BEC-9FC0-4AD9-9649-5F26793F65FC}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {ECFC2BEC-9FC0-4AD9-9649-5F26793F65FC}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {ECFC2BEC-9FC0-4AD9-9649-5F26793F65FC}.Debug|Win32.ActiveCfg = Debug|Win32
+ {ECFC2BEC-9FC0-4AD9-9649-5F26793F65FC}.Debug|Win32.Build.0 = Debug|Win32
+ {ECFC2BEC-9FC0-4AD9-9649-5F26793F65FC}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {ECFC2BEC-9FC0-4AD9-9649-5F26793F65FC}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {ECFC2BEC-9FC0-4AD9-9649-5F26793F65FC}.Release|Win32.ActiveCfg = Release|Win32
+ {ECFC2BEC-9FC0-4AD9-9649-5F26793F65FC}.Release|Win32.Build.0 = Release|Win32
+ {C9E0BD1D-B175-4A91-8380-3FDC81FAB9D7}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {C9E0BD1D-B175-4A91-8380-3FDC81FAB9D7}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {C9E0BD1D-B175-4A91-8380-3FDC81FAB9D7}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C9E0BD1D-B175-4A91-8380-3FDC81FAB9D7}.Debug|Win32.Build.0 = Debug|Win32
+ {C9E0BD1D-B175-4A91-8380-3FDC81FAB9D7}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {C9E0BD1D-B175-4A91-8380-3FDC81FAB9D7}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {C9E0BD1D-B175-4A91-8380-3FDC81FAB9D7}.Release|Win32.ActiveCfg = Release|Win32
+ {C9E0BD1D-B175-4A91-8380-3FDC81FAB9D7}.Release|Win32.Build.0 = Release|Win32
+ {8A3E1774-1DE9-445C-982D-3EE37C8A752A}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {8A3E1774-1DE9-445C-982D-3EE37C8A752A}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {8A3E1774-1DE9-445C-982D-3EE37C8A752A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {8A3E1774-1DE9-445C-982D-3EE37C8A752A}.Debug|Win32.Build.0 = Debug|Win32
+ {8A3E1774-1DE9-445C-982D-3EE37C8A752A}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {8A3E1774-1DE9-445C-982D-3EE37C8A752A}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {8A3E1774-1DE9-445C-982D-3EE37C8A752A}.Release|Win32.ActiveCfg = Release|Win32
+ {8A3E1774-1DE9-445C-982D-3EE37C8A752A}.Release|Win32.Build.0 = Release|Win32
+ {E3749617-BA3D-4230-B54C-B758E56D9FA5}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {E3749617-BA3D-4230-B54C-B758E56D9FA5}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {E3749617-BA3D-4230-B54C-B758E56D9FA5}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E3749617-BA3D-4230-B54C-B758E56D9FA5}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {E3749617-BA3D-4230-B54C-B758E56D9FA5}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {E3749617-BA3D-4230-B54C-B758E56D9FA5}.Release|Win32.ActiveCfg = Release|Win32
+ {E3749617-BA3D-4230-B54C-B758E56D9FA5}.Release|Win32.Build.0 = Release|Win32
+ {D3E6C0FD-54C7-4FF2-9AE1-72F2DAFD820C}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {D3E6C0FD-54C7-4FF2-9AE1-72F2DAFD820C}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {D3E6C0FD-54C7-4FF2-9AE1-72F2DAFD820C}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D3E6C0FD-54C7-4FF2-9AE1-72F2DAFD820C}.Debug|Win32.Build.0 = Debug|Win32
+ {D3E6C0FD-54C7-4FF2-9AE1-72F2DAFD820C}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {D3E6C0FD-54C7-4FF2-9AE1-72F2DAFD820C}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {D3E6C0FD-54C7-4FF2-9AE1-72F2DAFD820C}.Release|Win32.ActiveCfg = Release|Win32
+ {D3E6C0FD-54C7-4FF2-9AE1-72F2DAFD820C}.Release|Win32.Build.0 = Release|Win32
+ {76235B67-1C27-4627-8A33-4B2E1EF93EDE}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {76235B67-1C27-4627-8A33-4B2E1EF93EDE}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {76235B67-1C27-4627-8A33-4B2E1EF93EDE}.Debug|Win32.ActiveCfg = Debug|Win32
+ {76235B67-1C27-4627-8A33-4B2E1EF93EDE}.Debug|Win32.Build.0 = Debug|Win32
+ {76235B67-1C27-4627-8A33-4B2E1EF93EDE}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {76235B67-1C27-4627-8A33-4B2E1EF93EDE}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {76235B67-1C27-4627-8A33-4B2E1EF93EDE}.Release|Win32.ActiveCfg = Release|Win32
+ {76235B67-1C27-4627-8A33-4B2E1EF93EDE}.Release|Win32.Build.0 = Release|Win32
+ {881F6A97-D539-4C48-B401-DF04385B2343}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {881F6A97-D539-4C48-B401-DF04385B2343}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {881F6A97-D539-4C48-B401-DF04385B2343}.Debug|Win32.ActiveCfg = Debug|Win32
+ {881F6A97-D539-4C48-B401-DF04385B2343}.Debug|Win32.Build.0 = Debug|Win32
+ {881F6A97-D539-4C48-B401-DF04385B2343}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {881F6A97-D539-4C48-B401-DF04385B2343}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {881F6A97-D539-4C48-B401-DF04385B2343}.Release|Win32.ActiveCfg = Release|Win32
+ {881F6A97-D539-4C48-B401-DF04385B2343}.Release|Win32.Build.0 = Release|Win32
{2E969AE9-7B12-4EDB-8E8B-48C7AE7BE357}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{2E969AE9-7B12-4EDB-8E8B-48C7AE7BE357}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{2E969AE9-7B12-4EDB-8E8B-48C7AE7BE357}.Debug|Win32.ActiveCfg = Debug|Win32
@@ -1769,46 +1884,107 @@ Global
{2E969AE9-7B12-4EDB-8E8B-48C7AE7BE357}.Release|Mixed Platforms.Build.0 = Release|Win32
{2E969AE9-7B12-4EDB-8E8B-48C7AE7BE357}.Release|Win32.ActiveCfg = Release|Win32
{2E969AE9-7B12-4EDB-8E8B-48C7AE7BE357}.Release|Win32.Build.0 = Release|Win32
- {2F7EDFA2-EE27-4D83-8454-9EFBD5779203}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {2F7EDFA2-EE27-4D83-8454-9EFBD5779203}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {2F7EDFA2-EE27-4D83-8454-9EFBD5779203}.Debug|Win32.ActiveCfg = Debug|Win32
- {2F7EDFA2-EE27-4D83-8454-9EFBD5779203}.Debug|Win32.Build.0 = Debug|Win32
- {2F7EDFA2-EE27-4D83-8454-9EFBD5779203}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {2F7EDFA2-EE27-4D83-8454-9EFBD5779203}.Release|Mixed Platforms.Build.0 = Release|Win32
- {2F7EDFA2-EE27-4D83-8454-9EFBD5779203}.Release|Win32.ActiveCfg = Release|Win32
- {2F7EDFA2-EE27-4D83-8454-9EFBD5779203}.Release|Win32.Build.0 = Release|Win32
- {2F914112-2657-49EC-8EA6-3BA63340DE27}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {2F914112-2657-49EC-8EA6-3BA63340DE27}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {2F914112-2657-49EC-8EA6-3BA63340DE27}.Debug|Win32.ActiveCfg = Debug|Win32
- {2F914112-2657-49EC-8EA6-3BA63340DE27}.Debug|Win32.Build.0 = Debug|Win32
- {2F914112-2657-49EC-8EA6-3BA63340DE27}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {2F914112-2657-49EC-8EA6-3BA63340DE27}.Release|Mixed Platforms.Build.0 = Release|Win32
- {2F914112-2657-49EC-8EA6-3BA63340DE27}.Release|Win32.ActiveCfg = Release|Win32
- {2F914112-2657-49EC-8EA6-3BA63340DE27}.Release|Win32.Build.0 = Release|Win32
- {300C6A09-663E-48B6-8E07-A0D50CAF8F25}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {300C6A09-663E-48B6-8E07-A0D50CAF8F25}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {300C6A09-663E-48B6-8E07-A0D50CAF8F25}.Debug|Win32.ActiveCfg = Debug|Win32
- {300C6A09-663E-48B6-8E07-A0D50CAF8F25}.Debug|Win32.Build.0 = Debug|Win32
- {300C6A09-663E-48B6-8E07-A0D50CAF8F25}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {300C6A09-663E-48B6-8E07-A0D50CAF8F25}.Release|Mixed Platforms.Build.0 = Release|Win32
- {300C6A09-663E-48B6-8E07-A0D50CAF8F25}.Release|Win32.ActiveCfg = Release|Win32
- {300C6A09-663E-48B6-8E07-A0D50CAF8F25}.Release|Win32.Build.0 = Release|Win32
- {31182CBE-9B7D-AAF2-65EE-F4D07012F4F3}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {31182CBE-9B7D-AAF2-65EE-F4D07012F4F3}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {31182CBE-9B7D-AAF2-65EE-F4D07012F4F3}.Debug|Win32.ActiveCfg = Debug|Win32
- {31182CBE-9B7D-AAF2-65EE-F4D07012F4F3}.Debug|Win32.Build.0 = Debug|Win32
- {31182CBE-9B7D-AAF2-65EE-F4D07012F4F3}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {31182CBE-9B7D-AAF2-65EE-F4D07012F4F3}.Release|Mixed Platforms.Build.0 = Release|Win32
- {31182CBE-9B7D-AAF2-65EE-F4D07012F4F3}.Release|Win32.ActiveCfg = Release|Win32
- {31182CBE-9B7D-AAF2-65EE-F4D07012F4F3}.Release|Win32.Build.0 = Release|Win32
- {32167995-4014-4E4C-983B-F7E17C24EB25}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {32167995-4014-4E4C-983B-F7E17C24EB25}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {32167995-4014-4E4C-983B-F7E17C24EB25}.Debug|Win32.ActiveCfg = Debug|Win32
- {32167995-4014-4E4C-983B-F7E17C24EB25}.Debug|Win32.Build.0 = Debug|Win32
- {32167995-4014-4E4C-983B-F7E17C24EB25}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {32167995-4014-4E4C-983B-F7E17C24EB25}.Release|Mixed Platforms.Build.0 = Release|Win32
- {32167995-4014-4E4C-983B-F7E17C24EB25}.Release|Win32.ActiveCfg = Release|Win32
- {32167995-4014-4E4C-983B-F7E17C24EB25}.Release|Win32.Build.0 = Release|Win32
+ {E6766F81-1FCD-4CD7-BC16-E36964A14867}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {E6766F81-1FCD-4CD7-BC16-E36964A14867}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {E6766F81-1FCD-4CD7-BC16-E36964A14867}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E6766F81-1FCD-4CD7-BC16-E36964A14867}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {E6766F81-1FCD-4CD7-BC16-E36964A14867}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {E6766F81-1FCD-4CD7-BC16-E36964A14867}.Release|Win32.ActiveCfg = Release|Win32
+ {E6766F81-1FCD-4CD7-BC16-E36964A14867}.Release|Win32.Build.0 = Release|Win32
+ {2E2D3301-2EC4-4C0F-B889-87073B30F673}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {2E2D3301-2EC4-4C0F-B889-87073B30F673}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {2E2D3301-2EC4-4C0F-B889-87073B30F673}.Debug|Win32.ActiveCfg = Debug|Win32
+ {2E2D3301-2EC4-4C0F-B889-87073B30F673}.Debug|Win32.Build.0 = Debug|Win32
+ {2E2D3301-2EC4-4C0F-B889-87073B30F673}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {2E2D3301-2EC4-4C0F-B889-87073B30F673}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {2E2D3301-2EC4-4C0F-B889-87073B30F673}.Release|Win32.ActiveCfg = Release|Win32
+ {2E2D3301-2EC4-4C0F-B889-87073B30F673}.Release|Win32.Build.0 = Release|Win32
+ {41735CD9-3E35-47F7-9FD1-4A9950B6B131}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {41735CD9-3E35-47F7-9FD1-4A9950B6B131}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {41735CD9-3E35-47F7-9FD1-4A9950B6B131}.Debug|Win32.ActiveCfg = Debug|Any CPU
+ {41735CD9-3E35-47F7-9FD1-4A9950B6B131}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {41735CD9-3E35-47F7-9FD1-4A9950B6B131}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {41735CD9-3E35-47F7-9FD1-4A9950B6B131}.Release|Win32.ActiveCfg = Release|Any CPU
+ {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3}.Debug|Win32.ActiveCfg = Debug|Win32
+ {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3}.Debug|Win32.Build.0 = Debug|Win32
+ {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3}.Release|Win32.ActiveCfg = Release|Win32
+ {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3}.Release|Win32.Build.0 = Release|Win32
+ {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE}.Debug|Win32.ActiveCfg = Debug|Win32
+ {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE}.Debug|Win32.Build.0 = Debug|Win32
+ {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE}.Release|Win32.ActiveCfg = Release|Win32
+ {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE}.Release|Win32.Build.0 = Release|Win32
+ {60B43839-95E6-4526-A661-209F16335E0E}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {60B43839-95E6-4526-A661-209F16335E0E}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {60B43839-95E6-4526-A661-209F16335E0E}.Debug|Win32.ActiveCfg = Debug|Win32
+ {60B43839-95E6-4526-A661-209F16335E0E}.Debug|Win32.Build.0 = Debug|Win32
+ {60B43839-95E6-4526-A661-209F16335E0E}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {60B43839-95E6-4526-A661-209F16335E0E}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {60B43839-95E6-4526-A661-209F16335E0E}.Release|Win32.ActiveCfg = Release|Win32
+ {60B43839-95E6-4526-A661-209F16335E0E}.Release|Win32.Build.0 = Release|Win32
+ {FD683DD6-D9BF-4B1B-AB6D-A3AC03EDAA4D}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {FD683DD6-D9BF-4B1B-AB6D-A3AC03EDAA4D}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {FD683DD6-D9BF-4B1B-AB6D-A3AC03EDAA4D}.Debug|Win32.ActiveCfg = Debug|Win32
+ {FD683DD6-D9BF-4B1B-AB6D-A3AC03EDAA4D}.Debug|Win32.Build.0 = Debug|Win32
+ {FD683DD6-D9BF-4B1B-AB6D-A3AC03EDAA4D}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {FD683DD6-D9BF-4B1B-AB6D-A3AC03EDAA4D}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {FD683DD6-D9BF-4B1B-AB6D-A3AC03EDAA4D}.Release|Win32.ActiveCfg = Release|Win32
+ {FD683DD6-D9BF-4B1B-AB6D-A3AC03EDAA4D}.Release|Win32.Build.0 = Release|Win32
+ {E750512D-FC7C-4C98-BF04-0A0DAF882055}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {E750512D-FC7C-4C98-BF04-0A0DAF882055}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {E750512D-FC7C-4C98-BF04-0A0DAF882055}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E750512D-FC7C-4C98-BF04-0A0DAF882055}.Debug|Win32.Build.0 = Debug|Win32
+ {E750512D-FC7C-4C98-BF04-0A0DAF882055}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {E750512D-FC7C-4C98-BF04-0A0DAF882055}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {E750512D-FC7C-4C98-BF04-0A0DAF882055}.Release|Win32.ActiveCfg = Release|Win32
+ {E750512D-FC7C-4C98-BF04-0A0DAF882055}.Release|Win32.Build.0 = Release|Win32
+ {EF5E94AB-B646-4E5B-A058-52EF07B8351C}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {EF5E94AB-B646-4E5B-A058-52EF07B8351C}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {EF5E94AB-B646-4E5B-A058-52EF07B8351C}.Debug|Win32.ActiveCfg = Debug|Win32
+ {EF5E94AB-B646-4E5B-A058-52EF07B8351C}.Debug|Win32.Build.0 = Debug|Win32
+ {EF5E94AB-B646-4E5B-A058-52EF07B8351C}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {EF5E94AB-B646-4E5B-A058-52EF07B8351C}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {EF5E94AB-B646-4E5B-A058-52EF07B8351C}.Release|Win32.ActiveCfg = Release|Win32
+ {EF5E94AB-B646-4E5B-A058-52EF07B8351C}.Release|Win32.Build.0 = Release|Win32
+ {0D04AEC1-6B68-492C-BCCF-808DFD69ABC6}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {0D04AEC1-6B68-492C-BCCF-808DFD69ABC6}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {0D04AEC1-6B68-492C-BCCF-808DFD69ABC6}.Debug|Win32.ActiveCfg = Debug|Win32
+ {0D04AEC1-6B68-492C-BCCF-808DFD69ABC6}.Debug|Win32.Build.0 = Debug|Win32
+ {0D04AEC1-6B68-492C-BCCF-808DFD69ABC6}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {0D04AEC1-6B68-492C-BCCF-808DFD69ABC6}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {0D04AEC1-6B68-492C-BCCF-808DFD69ABC6}.Release|Win32.ActiveCfg = Release|Win32
+ {0D04AEC1-6B68-492C-BCCF-808DFD69ABC6}.Release|Win32.Build.0 = Release|Win32
+ {4539AFB3-B8DC-47F3-A491-6DAC8FD26657}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {4539AFB3-B8DC-47F3-A491-6DAC8FD26657}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {4539AFB3-B8DC-47F3-A491-6DAC8FD26657}.Debug|Win32.ActiveCfg = Debug|Win32
+ {4539AFB3-B8DC-47F3-A491-6DAC8FD26657}.Debug|Win32.Build.0 = Debug|Win32
+ {4539AFB3-B8DC-47F3-A491-6DAC8FD26657}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {4539AFB3-B8DC-47F3-A491-6DAC8FD26657}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {4539AFB3-B8DC-47F3-A491-6DAC8FD26657}.Release|Win32.ActiveCfg = Release|Win32
+ {4539AFB3-B8DC-47F3-A491-6DAC8FD26657}.Release|Win32.Build.0 = Release|Win32
+ {7100F41F-868D-4E99-80A2-AF8E6574749D}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {7100F41F-868D-4E99-80A2-AF8E6574749D}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {7100F41F-868D-4E99-80A2-AF8E6574749D}.Debug|Win32.ActiveCfg = Debug|Win32
+ {7100F41F-868D-4E99-80A2-AF8E6574749D}.Debug|Win32.Build.0 = Debug|Win32
+ {7100F41F-868D-4E99-80A2-AF8E6574749D}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {7100F41F-868D-4E99-80A2-AF8E6574749D}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {7100F41F-868D-4E99-80A2-AF8E6574749D}.Release|Win32.ActiveCfg = Release|Win32
+ {7100F41F-868D-4E99-80A2-AF8E6574749D}.Release|Win32.Build.0 = Release|Win32
+ {F4F4BCAA-EA59-445C-A119-3E6C29647A51}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {F4F4BCAA-EA59-445C-A119-3E6C29647A51}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {F4F4BCAA-EA59-445C-A119-3E6C29647A51}.Debug|Win32.ActiveCfg = Debug|Win32
+ {F4F4BCAA-EA59-445C-A119-3E6C29647A51}.Debug|Win32.Build.0 = Debug|Win32
+ {F4F4BCAA-EA59-445C-A119-3E6C29647A51}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {F4F4BCAA-EA59-445C-A119-3E6C29647A51}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {F4F4BCAA-EA59-445C-A119-3E6C29647A51}.Release|Win32.ActiveCfg = Release|Win32
+ {F4F4BCAA-EA59-445C-A119-3E6C29647A51}.Release|Win32.Build.0 = Release|Win32
{326E9795-E760-410A-B69A-3F79DB3F5243}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{326E9795-E760-410A-B69A-3F79DB3F5243}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{326E9795-E760-410A-B69A-3F79DB3F5243}.Debug|Win32.ActiveCfg = Debug|Win32
@@ -1817,62 +1993,141 @@ Global
{326E9795-E760-410A-B69A-3F79DB3F5243}.Release|Mixed Platforms.Build.0 = Release|Win32
{326E9795-E760-410A-B69A-3F79DB3F5243}.Release|Win32.ActiveCfg = Release|Win32
{326E9795-E760-410A-B69A-3F79DB3F5243}.Release|Win32.Build.0 = Release|Win32
- {34231B28-C51C-4C1C-AF07-C763668B1404}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {34231B28-C51C-4C1C-AF07-C763668B1404}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {34231B28-C51C-4C1C-AF07-C763668B1404}.Debug|Win32.ActiveCfg = Debug|Win32
- {34231B28-C51C-4C1C-AF07-C763668B1404}.Debug|Win32.Build.0 = Debug|Win32
- {34231B28-C51C-4C1C-AF07-C763668B1404}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {34231B28-C51C-4C1C-AF07-C763668B1404}.Release|Mixed Platforms.Build.0 = Release|Win32
- {34231B28-C51C-4C1C-AF07-C763668B1404}.Release|Win32.ActiveCfg = Release|Win32
- {34231B28-C51C-4C1C-AF07-C763668B1404}.Release|Win32.Build.0 = Release|Win32
- {3A932C39-AFA9-4BDC-B775-F71A426D04BF}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {3A932C39-AFA9-4BDC-B775-F71A426D04BF}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {3A932C39-AFA9-4BDC-B775-F71A426D04BF}.Debug|Win32.ActiveCfg = Debug|Win32
- {3A932C39-AFA9-4BDC-B775-F71A426D04BF}.Debug|Win32.Build.0 = Debug|Win32
- {3A932C39-AFA9-4BDC-B775-F71A426D04BF}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {3A932C39-AFA9-4BDC-B775-F71A426D04BF}.Release|Mixed Platforms.Build.0 = Release|Win32
- {3A932C39-AFA9-4BDC-B775-F71A426D04BF}.Release|Win32.ActiveCfg = Release|Win32
- {3A932C39-AFA9-4BDC-B775-F71A426D04BF}.Release|Win32.Build.0 = Release|Win32
- {3AB90E6A-56FF-4C9D-B918-AB76DDBF8BE8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {3AB90E6A-56FF-4C9D-B918-AB76DDBF8BE8}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {3AB90E6A-56FF-4C9D-B918-AB76DDBF8BE8}.Debug|Win32.ActiveCfg = Debug|Win32
- {3AB90E6A-56FF-4C9D-B918-AB76DDBF8BE8}.Debug|Win32.Build.0 = Debug|Win32
- {3AB90E6A-56FF-4C9D-B918-AB76DDBF8BE8}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {3AB90E6A-56FF-4C9D-B918-AB76DDBF8BE8}.Release|Mixed Platforms.Build.0 = Release|Win32
- {3AB90E6A-56FF-4C9D-B918-AB76DDBF8BE8}.Release|Win32.ActiveCfg = Release|Win32
- {3AB90E6A-56FF-4C9D-B918-AB76DDBF8BE8}.Release|Win32.Build.0 = Release|Win32
- {3BD81303-4E14-4559-AA69-B30C3BAB08DD}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {3BD81303-4E14-4559-AA69-B30C3BAB08DD}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {3BD81303-4E14-4559-AA69-B30C3BAB08DD}.Debug|Win32.ActiveCfg = Debug|Win32
- {3BD81303-4E14-4559-AA69-B30C3BAB08DD}.Debug|Win32.Build.0 = Debug|Win32
- {3BD81303-4E14-4559-AA69-B30C3BAB08DD}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {3BD81303-4E14-4559-AA69-B30C3BAB08DD}.Release|Mixed Platforms.Build.0 = Release|Win32
- {3BD81303-4E14-4559-AA69-B30C3BAB08DD}.Release|Win32.ActiveCfg = Release|Win32
- {3BD81303-4E14-4559-AA69-B30C3BAB08DD}.Release|Win32.Build.0 = Release|Win32
- {3E03D462-780D-4C4D-B22E-5E095E6CF110}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {3E03D462-780D-4C4D-B22E-5E095E6CF110}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {3E03D462-780D-4C4D-B22E-5E095E6CF110}.Debug|Win32.ActiveCfg = Debug|Win32
- {3E03D462-780D-4C4D-B22E-5E095E6CF110}.Debug|Win32.Build.0 = Debug|Win32
- {3E03D462-780D-4C4D-B22E-5E095E6CF110}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {3E03D462-780D-4C4D-B22E-5E095E6CF110}.Release|Mixed Platforms.Build.0 = Release|Win32
- {3E03D462-780D-4C4D-B22E-5E095E6CF110}.Release|Win32.ActiveCfg = Release|Win32
- {3E03D462-780D-4C4D-B22E-5E095E6CF110}.Release|Win32.Build.0 = Release|Win32
- {3E6B24F6-9FA9-4066-859E-BF747FA3080A}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {3E6B24F6-9FA9-4066-859E-BF747FA3080A}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {3E6B24F6-9FA9-4066-859E-BF747FA3080A}.Debug|Win32.ActiveCfg = Debug|Win32
- {3E6B24F6-9FA9-4066-859E-BF747FA3080A}.Debug|Win32.Build.0 = Debug|Win32
- {3E6B24F6-9FA9-4066-859E-BF747FA3080A}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {3E6B24F6-9FA9-4066-859E-BF747FA3080A}.Release|Mixed Platforms.Build.0 = Release|Win32
- {3E6B24F6-9FA9-4066-859E-BF747FA3080A}.Release|Win32.ActiveCfg = Release|Win32
- {3E6B24F6-9FA9-4066-859E-BF747FA3080A}.Release|Win32.Build.0 = Release|Win32
- {4052059A-D72B-4183-B5C2-9D1B099E9E35}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {4052059A-D72B-4183-B5C2-9D1B099E9E35}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {4052059A-D72B-4183-B5C2-9D1B099E9E35}.Debug|Win32.ActiveCfg = Debug|Win32
- {4052059A-D72B-4183-B5C2-9D1B099E9E35}.Debug|Win32.Build.0 = Debug|Win32
- {4052059A-D72B-4183-B5C2-9D1B099E9E35}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {4052059A-D72B-4183-B5C2-9D1B099E9E35}.Release|Mixed Platforms.Build.0 = Release|Win32
- {4052059A-D72B-4183-B5C2-9D1B099E9E35}.Release|Win32.ActiveCfg = Release|Win32
- {4052059A-D72B-4183-B5C2-9D1B099E9E35}.Release|Win32.Build.0 = Release|Win32
+ {E13045CD-7E1F-4A41-9B18-8D288B2E7B41}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {E13045CD-7E1F-4A41-9B18-8D288B2E7B41}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {E13045CD-7E1F-4A41-9B18-8D288B2E7B41}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E13045CD-7E1F-4A41-9B18-8D288B2E7B41}.Debug|Win32.Build.0 = Debug|Win32
+ {E13045CD-7E1F-4A41-9B18-8D288B2E7B41}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {E13045CD-7E1F-4A41-9B18-8D288B2E7B41}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {E13045CD-7E1F-4A41-9B18-8D288B2E7B41}.Release|Win32.ActiveCfg = Release|Win32
+ {E13045CD-7E1F-4A41-9B18-8D288B2E7B41}.Release|Win32.Build.0 = Release|Win32
+ {E99DA267-BE90-4F45-88A1-6919DB2C7567}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {E99DA267-BE90-4F45-88A1-6919DB2C7567}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {E99DA267-BE90-4F45-88A1-6919DB2C7567}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E99DA267-BE90-4F45-88A1-6919DB2C7567}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {E99DA267-BE90-4F45-88A1-6919DB2C7567}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {E99DA267-BE90-4F45-88A1-6919DB2C7567}.Release|Win32.ActiveCfg = Release|Win32
+ {AAC78796-B9A2-4CD9-BF89-09B03E92BF73}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {AAC78796-B9A2-4CD9-BF89-09B03E92BF73}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {AAC78796-B9A2-4CD9-BF89-09B03E92BF73}.Debug|Win32.ActiveCfg = Debug|Win32
+ {AAC78796-B9A2-4CD9-BF89-09B03E92BF73}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {AAC78796-B9A2-4CD9-BF89-09B03E92BF73}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {AAC78796-B9A2-4CD9-BF89-09B03E92BF73}.Release|Win32.ActiveCfg = Release|Win32
+ {6AE76406-B03B-11DD-94B1-80B556D89593}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {6AE76406-B03B-11DD-94B1-80B556D89593}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {6AE76406-B03B-11DD-94B1-80B556D89593}.Debug|Win32.ActiveCfg = Debug|Win32
+ {6AE76406-B03B-11DD-94B1-80B556D89593}.Debug|Win32.Build.0 = Debug|Win32
+ {6AE76406-B03B-11DD-94B1-80B556D89593}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {6AE76406-B03B-11DD-94B1-80B556D89593}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {6AE76406-B03B-11DD-94B1-80B556D89593}.Release|Win32.ActiveCfg = Release|Win32
+ {6AE76406-B03B-11DD-94B1-80B556D89593}.Release|Win32.Build.0 = Release|Win32
+ {C8C6183C-B03C-11DD-B471-DFD256D89593}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {C8C6183C-B03C-11DD-B471-DFD256D89593}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {C8C6183C-B03C-11DD-B471-DFD256D89593}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C8C6183C-B03C-11DD-B471-DFD256D89593}.Debug|Win32.Build.0 = Debug|Win32
+ {C8C6183C-B03C-11DD-B471-DFD256D89593}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {C8C6183C-B03C-11DD-B471-DFD256D89593}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {C8C6183C-B03C-11DD-B471-DFD256D89593}.Release|Win32.ActiveCfg = Release|Win32
+ {C8C6183C-B03C-11DD-B471-DFD256D89593}.Release|Win32.Build.0 = Release|Win32
+ {1832A374-8A74-4F9E-B536-69A699B3E165}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {1832A374-8A74-4F9E-B536-69A699B3E165}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {1832A374-8A74-4F9E-B536-69A699B3E165}.Debug|Win32.ActiveCfg = Debug|Win32
+ {1832A374-8A74-4F9E-B536-69A699B3E165}.Debug|Win32.Build.0 = Debug|Win32
+ {1832A374-8A74-4F9E-B536-69A699B3E165}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {1832A374-8A74-4F9E-B536-69A699B3E165}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {1832A374-8A74-4F9E-B536-69A699B3E165}.Release|Win32.ActiveCfg = Release|Win32
+ {1832A374-8A74-4F9E-B536-69A699B3E165}.Release|Win32.Build.0 = Release|Win32
+ {A508ADD3-CECE-4E0F-8448-2F5E454DF551}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {A508ADD3-CECE-4E0F-8448-2F5E454DF551}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {A508ADD3-CECE-4E0F-8448-2F5E454DF551}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A508ADD3-CECE-4E0F-8448-2F5E454DF551}.Debug|Win32.Build.0 = Debug|Win32
+ {A508ADD3-CECE-4E0F-8448-2F5E454DF551}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {A508ADD3-CECE-4E0F-8448-2F5E454DF551}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {A508ADD3-CECE-4E0F-8448-2F5E454DF551}.Release|Win32.ActiveCfg = Release|Win32
+ {A508ADD3-CECE-4E0F-8448-2F5E454DF551}.Release|Win32.Build.0 = Release|Win32
+ {D6047981-23AE-4623-9373-514FDAFAE60F}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {D6047981-23AE-4623-9373-514FDAFAE60F}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {D6047981-23AE-4623-9373-514FDAFAE60F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D6047981-23AE-4623-9373-514FDAFAE60F}.Debug|Win32.Build.0 = Debug|Win32
+ {D6047981-23AE-4623-9373-514FDAFAE60F}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {D6047981-23AE-4623-9373-514FDAFAE60F}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {D6047981-23AE-4623-9373-514FDAFAE60F}.Release|Win32.ActiveCfg = Release|Win32
+ {D6047981-23AE-4623-9373-514FDAFAE60F}.Release|Win32.Build.0 = Release|Win32
+ {27A30967-4BBA-48D1-8522-CDE95F7B1CEC}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {27A30967-4BBA-48D1-8522-CDE95F7B1CEC}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {27A30967-4BBA-48D1-8522-CDE95F7B1CEC}.Debug|Win32.ActiveCfg = Debug|Win32
+ {27A30967-4BBA-48D1-8522-CDE95F7B1CEC}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {27A30967-4BBA-48D1-8522-CDE95F7B1CEC}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {27A30967-4BBA-48D1-8522-CDE95F7B1CEC}.Release|Win32.ActiveCfg = Release|Win32
+ {A1CAA831-C507-4B2E-87F3-AEC63C9907F9}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {A1CAA831-C507-4B2E-87F3-AEC63C9907F9}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {A1CAA831-C507-4B2E-87F3-AEC63C9907F9}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A1CAA831-C507-4B2E-87F3-AEC63C9907F9}.Debug|Win32.Build.0 = Debug|Win32
+ {A1CAA831-C507-4B2E-87F3-AEC63C9907F9}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {A1CAA831-C507-4B2E-87F3-AEC63C9907F9}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {A1CAA831-C507-4B2E-87F3-AEC63C9907F9}.Release|Win32.ActiveCfg = Release|Win32
+ {A1CAA831-C507-4B2E-87F3-AEC63C9907F9}.Release|Win32.Build.0 = Release|Win32
+ {018D4F38-6272-448F-A864-976DA09F05D0}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {018D4F38-6272-448F-A864-976DA09F05D0}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {018D4F38-6272-448F-A864-976DA09F05D0}.Debug|Win32.ActiveCfg = Debug|Win32
+ {018D4F38-6272-448F-A864-976DA09F05D0}.Debug|Win32.Build.0 = Debug|Win32
+ {018D4F38-6272-448F-A864-976DA09F05D0}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {018D4F38-6272-448F-A864-976DA09F05D0}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {018D4F38-6272-448F-A864-976DA09F05D0}.Release|Win32.ActiveCfg = Release|Win32
+ {018D4F38-6272-448F-A864-976DA09F05D0}.Release|Win32.Build.0 = Release|Win32
+ {21C76E6E-8B38-44D6-8148-B589C13B9554}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {21C76E6E-8B38-44D6-8148-B589C13B9554}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {21C76E6E-8B38-44D6-8148-B589C13B9554}.Debug|Win32.ActiveCfg = Debug|Win32
+ {21C76E6E-8B38-44D6-8148-B589C13B9554}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {21C76E6E-8B38-44D6-8148-B589C13B9554}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {21C76E6E-8B38-44D6-8148-B589C13B9554}.Release|Win32.ActiveCfg = Release|Win32
+ {21C76E6E-8B38-44D6-8148-B589C13B9554}.Release|Win32.Build.0 = Release|Win32
+ {EFBB1436-A63F-4CD8-9E99-B89226E782EC}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {EFBB1436-A63F-4CD8-9E99-B89226E782EC}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {EFBB1436-A63F-4CD8-9E99-B89226E782EC}.Debug|Win32.ActiveCfg = Debug|Win32
+ {EFBB1436-A63F-4CD8-9E99-B89226E782EC}.Debug|Win32.Build.0 = Debug|Win32
+ {EFBB1436-A63F-4CD8-9E99-B89226E782EC}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {EFBB1436-A63F-4CD8-9E99-B89226E782EC}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {EFBB1436-A63F-4CD8-9E99-B89226E782EC}.Release|Win32.ActiveCfg = Release|Win32
+ {EFBB1436-A63F-4CD8-9E99-B89226E782EC}.Release|Win32.Build.0 = Release|Win32
+ {24A5AC7C-280B-4899-9153-6BA570A081E7}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {24A5AC7C-280B-4899-9153-6BA570A081E7}.Debug|Win32.ActiveCfg = Debug|Win32
+ {24A5AC7C-280B-4899-9153-6BA570A081E7}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {24A5AC7C-280B-4899-9153-6BA570A081E7}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {24A5AC7C-280B-4899-9153-6BA570A081E7}.Release|Win32.ActiveCfg = Release|Win32
+ {24A5AC7C-280B-4899-9153-6BA570A081E7}.Release|Win32.Build.0 = Release|Win32
+ {E1D0B89E-257B-4BCA-A0C6-A2CD997A2FDC}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {E1D0B89E-257B-4BCA-A0C6-A2CD997A2FDC}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {E1D0B89E-257B-4BCA-A0C6-A2CD997A2FDC}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E1D0B89E-257B-4BCA-A0C6-A2CD997A2FDC}.Debug|Win32.Build.0 = Debug|Win32
+ {E1D0B89E-257B-4BCA-A0C6-A2CD997A2FDC}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {E1D0B89E-257B-4BCA-A0C6-A2CD997A2FDC}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {E1D0B89E-257B-4BCA-A0C6-A2CD997A2FDC}.Release|Win32.ActiveCfg = Release|Win32
+ {E1D0B89E-257B-4BCA-A0C6-A2CD997A2FDC}.Release|Win32.Build.0 = Release|Win32
+ {D7ED06E8-6138-4CE3-A906-5EF1D9C804E0}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {D7ED06E8-6138-4CE3-A906-5EF1D9C804E0}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {D7ED06E8-6138-4CE3-A906-5EF1D9C804E0}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D7ED06E8-6138-4CE3-A906-5EF1D9C804E0}.Debug|Win32.Build.0 = Debug|Win32
+ {D7ED06E8-6138-4CE3-A906-5EF1D9C804E0}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {D7ED06E8-6138-4CE3-A906-5EF1D9C804E0}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {D7ED06E8-6138-4CE3-A906-5EF1D9C804E0}.Release|Win32.ActiveCfg = Release|Win32
+ {D7ED06E8-6138-4CE3-A906-5EF1D9C804E0}.Release|Win32.Build.0 = Release|Win32
+ {903F8C1E-537A-4C9E-97BE-075147CBE769}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {903F8C1E-537A-4C9E-97BE-075147CBE769}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {903F8C1E-537A-4C9E-97BE-075147CBE769}.Debug|Win32.ActiveCfg = Debug|Win32
+ {903F8C1E-537A-4C9E-97BE-075147CBE769}.Debug|Win32.Build.0 = Debug|Win32
+ {903F8C1E-537A-4C9E-97BE-075147CBE769}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {903F8C1E-537A-4C9E-97BE-075147CBE769}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {903F8C1E-537A-4C9E-97BE-075147CBE769}.Release|Win32.ActiveCfg = Release|Win32
+ {903F8C1E-537A-4C9E-97BE-075147CBE769}.Release|Win32.Build.0 = Release|Win32
+ {A493331B-3180-49FE-8D0E-D121645E63AD}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {A493331B-3180-49FE-8D0E-D121645E63AD}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {A493331B-3180-49FE-8D0E-D121645E63AD}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A493331B-3180-49FE-8D0E-D121645E63AD}.Debug|Win32.Build.0 = Debug|Win32
+ {A493331B-3180-49FE-8D0E-D121645E63AD}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {A493331B-3180-49FE-8D0E-D121645E63AD}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {A493331B-3180-49FE-8D0E-D121645E63AD}.Release|Win32.ActiveCfg = Release|Win32
+ {A493331B-3180-49FE-8D0E-D121645E63AD}.Release|Win32.Build.0 = Release|Win32
{414D4D24-5D65-498B-A33F-3A29AD3CDEDC}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{414D4D24-5D65-498B-A33F-3A29AD3CDEDC}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{414D4D24-5D65-498B-A33F-3A29AD3CDEDC}.Debug|Win32.ActiveCfg = Debug|Win32
@@ -1881,99 +2136,6 @@ Global
{414D4D24-5D65-498B-A33F-3A29AD3CDEDC}.Release|Mixed Platforms.Build.0 = Release|Win32
{414D4D24-5D65-498B-A33F-3A29AD3CDEDC}.Release|Win32.ActiveCfg = Release|Win32
{414D4D24-5D65-498B-A33F-3A29AD3CDEDC}.Release|Win32.Build.0 = Release|Win32
- {41735CD9-3E35-47F7-9FD1-4A9950B6B131}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {41735CD9-3E35-47F7-9FD1-4A9950B6B131}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {41735CD9-3E35-47F7-9FD1-4A9950B6B131}.Debug|Win32.ActiveCfg = Debug|Any CPU
- {41735CD9-3E35-47F7-9FD1-4A9950B6B131}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {41735CD9-3E35-47F7-9FD1-4A9950B6B131}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {41735CD9-3E35-47F7-9FD1-4A9950B6B131}.Release|Win32.ActiveCfg = Release|Any CPU
- {42ECD5EC-722F-41DE-B6B8-83764C8016DF}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {42ECD5EC-722F-41DE-B6B8-83764C8016DF}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {42ECD5EC-722F-41DE-B6B8-83764C8016DF}.Debug|Win32.ActiveCfg = Debug|Win32
- {42ECD5EC-722F-41DE-B6B8-83764C8016DF}.Debug|Win32.Build.0 = Debug|Win32
- {42ECD5EC-722F-41DE-B6B8-83764C8016DF}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {42ECD5EC-722F-41DE-B6B8-83764C8016DF}.Release|Mixed Platforms.Build.0 = Release|Win32
- {42ECD5EC-722F-41DE-B6B8-83764C8016DF}.Release|Win32.ActiveCfg = Release|Win32
- {42ECD5EC-722F-41DE-B6B8-83764C8016DF}.Release|Win32.Build.0 = Release|Win32
- {4539AFB3-B8DC-47F3-A491-6DAC8FD26657}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {4539AFB3-B8DC-47F3-A491-6DAC8FD26657}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {4539AFB3-B8DC-47F3-A491-6DAC8FD26657}.Debug|Win32.ActiveCfg = Debug|Win32
- {4539AFB3-B8DC-47F3-A491-6DAC8FD26657}.Debug|Win32.Build.0 = Debug|Win32
- {4539AFB3-B8DC-47F3-A491-6DAC8FD26657}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {4539AFB3-B8DC-47F3-A491-6DAC8FD26657}.Release|Mixed Platforms.Build.0 = Release|Win32
- {4539AFB3-B8DC-47F3-A491-6DAC8FD26657}.Release|Win32.ActiveCfg = Release|Win32
- {4539AFB3-B8DC-47F3-A491-6DAC8FD26657}.Release|Win32.Build.0 = Release|Win32
- {4631946D-7D5F-44BD-A5A8-504C0A7033BE}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {4631946D-7D5F-44BD-A5A8-504C0A7033BE}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {4631946D-7D5F-44BD-A5A8-504C0A7033BE}.Debug|Win32.ActiveCfg = Debug|Win32
- {4631946D-7D5F-44BD-A5A8-504C0A7033BE}.Debug|Win32.Build.0 = Debug|Win32
- {4631946D-7D5F-44BD-A5A8-504C0A7033BE}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {4631946D-7D5F-44BD-A5A8-504C0A7033BE}.Release|Mixed Platforms.Build.0 = Release|Win32
- {4631946D-7D5F-44BD-A5A8-504C0A7033BE}.Release|Win32.ActiveCfg = Release|Win32
- {4631946D-7D5F-44BD-A5A8-504C0A7033BE}.Release|Win32.Build.0 = Release|Win32
- {49909552-0B0C-4C14-8CF6-DB8A2ADE0934}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {49909552-0B0C-4C14-8CF6-DB8A2ADE0934}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {49909552-0B0C-4C14-8CF6-DB8A2ADE0934}.Debug|Win32.ActiveCfg = Debug|Win32
- {49909552-0B0C-4C14-8CF6-DB8A2ADE0934}.Debug|Win32.Build.0 = Debug|Win32
- {49909552-0B0C-4C14-8CF6-DB8A2ADE0934}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {49909552-0B0C-4C14-8CF6-DB8A2ADE0934}.Release|Mixed Platforms.Build.0 = Release|Win32
- {49909552-0B0C-4C14-8CF6-DB8A2ADE0934}.Release|Win32.ActiveCfg = Release|Win32
- {49909552-0B0C-4C14-8CF6-DB8A2ADE0934}.Release|Win32.Build.0 = Release|Win32
- {4B60E8B8-416F-40B2-8A54-F75970A21992}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {4B60E8B8-416F-40B2-8A54-F75970A21992}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {4B60E8B8-416F-40B2-8A54-F75970A21992}.Debug|Win32.ActiveCfg = Debug|Win32
- {4B60E8B8-416F-40B2-8A54-F75970A21992}.Debug|Win32.Build.0 = Debug|Win32
- {4B60E8B8-416F-40B2-8A54-F75970A21992}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {4B60E8B8-416F-40B2-8A54-F75970A21992}.Release|Mixed Platforms.Build.0 = Release|Win32
- {4B60E8B8-416F-40B2-8A54-F75970A21992}.Release|Win32.ActiveCfg = Release|Win32
- {4B60E8B8-416F-40B2-8A54-F75970A21992}.Release|Win32.Build.0 = Release|Win32
- {4B6E199A-034A-49BD-AB93-458DD37E45B1}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {4B6E199A-034A-49BD-AB93-458DD37E45B1}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {4B6E199A-034A-49BD-AB93-458DD37E45B1}.Debug|Win32.ActiveCfg = Debug|Win32
- {4B6E199A-034A-49BD-AB93-458DD37E45B1}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {4B6E199A-034A-49BD-AB93-458DD37E45B1}.Release|Mixed Platforms.Build.0 = Release|Win32
- {4B6E199A-034A-49BD-AB93-458DD37E45B1}.Release|Win32.ActiveCfg = Release|Win32
- {4B6E199A-034A-49BD-AB93-458DD37E45B1}.Release|Win32.Build.0 = Release|Win32
- {4EA8CE12-9C6F-45E5-9D08-720383FE3685}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {4EA8CE12-9C6F-45E5-9D08-720383FE3685}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {4EA8CE12-9C6F-45E5-9D08-720383FE3685}.Debug|Win32.ActiveCfg = Debug|Win32
- {4EA8CE12-9C6F-45E5-9D08-720383FE3685}.Debug|Win32.Build.0 = Debug|Win32
- {4EA8CE12-9C6F-45E5-9D08-720383FE3685}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {4EA8CE12-9C6F-45E5-9D08-720383FE3685}.Release|Mixed Platforms.Build.0 = Release|Win32
- {4EA8CE12-9C6F-45E5-9D08-720383FE3685}.Release|Win32.ActiveCfg = Release|Win32
- {4EA8CE12-9C6F-45E5-9D08-720383FE3685}.Release|Win32.Build.0 = Release|Win32
- {50B079C7-CD01-42D3-B8C4-9F8D9322E822}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {50B079C7-CD01-42D3-B8C4-9F8D9322E822}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {50B079C7-CD01-42D3-B8C4-9F8D9322E822}.Debug|Win32.ActiveCfg = Debug|Win32
- {50B079C7-CD01-42D3-B8C4-9F8D9322E822}.Debug|Win32.Build.0 = Debug|Win32
- {50B079C7-CD01-42D3-B8C4-9F8D9322E822}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {50B079C7-CD01-42D3-B8C4-9F8D9322E822}.Release|Mixed Platforms.Build.0 = Release|Win32
- {50B079C7-CD01-42D3-B8C4-9F8D9322E822}.Release|Win32.ActiveCfg = Release|Win32
- {50B079C7-CD01-42D3-B8C4-9F8D9322E822}.Release|Win32.Build.0 = Release|Win32
- {5597AD47-3494-4750-A235-4F9C2F864700}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {5597AD47-3494-4750-A235-4F9C2F864700}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {5597AD47-3494-4750-A235-4F9C2F864700}.Debug|Win32.ActiveCfg = Debug|Win32
- {5597AD47-3494-4750-A235-4F9C2F864700}.Debug|Win32.Build.0 = Debug|Win32
- {5597AD47-3494-4750-A235-4F9C2F864700}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {5597AD47-3494-4750-A235-4F9C2F864700}.Release|Mixed Platforms.Build.0 = Release|Win32
- {5597AD47-3494-4750-A235-4F9C2F864700}.Release|Win32.ActiveCfg = Release|Win32
- {5597AD47-3494-4750-A235-4F9C2F864700}.Release|Win32.Build.0 = Release|Win32
- {57823D8C-A317-4713-9125-2C91FDFD12D6}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {57823D8C-A317-4713-9125-2C91FDFD12D6}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {57823D8C-A317-4713-9125-2C91FDFD12D6}.Debug|Win32.ActiveCfg = Debug|Win32
- {57823D8C-A317-4713-9125-2C91FDFD12D6}.Debug|Win32.Build.0 = Debug|Win32
- {57823D8C-A317-4713-9125-2C91FDFD12D6}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {57823D8C-A317-4713-9125-2C91FDFD12D6}.Release|Mixed Platforms.Build.0 = Release|Win32
- {57823D8C-A317-4713-9125-2C91FDFD12D6}.Release|Win32.ActiveCfg = Release|Win32
- {57823D8C-A317-4713-9125-2C91FDFD12D6}.Release|Win32.Build.0 = Release|Win32
- {57C27529-8CA9-4FC3-9C02-DA05B172F785}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {57C27529-8CA9-4FC3-9C02-DA05B172F785}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {57C27529-8CA9-4FC3-9C02-DA05B172F785}.Debug|Win32.ActiveCfg = Debug|Win32
- {57C27529-8CA9-4FC3-9C02-DA05B172F785}.Debug|Win32.Build.0 = Debug|Win32
- {57C27529-8CA9-4FC3-9C02-DA05B172F785}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {57C27529-8CA9-4FC3-9C02-DA05B172F785}.Release|Mixed Platforms.Build.0 = Release|Win32
- {57C27529-8CA9-4FC3-9C02-DA05B172F785}.Release|Win32.ActiveCfg = Release|Win32
- {57C27529-8CA9-4FC3-9C02-DA05B172F785}.Release|Win32.Build.0 = Release|Win32
{5916D37D-8C97-424F-A904-74E52594C2D6}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{5916D37D-8C97-424F-A904-74E52594C2D6}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{5916D37D-8C97-424F-A904-74E52594C2D6}.Debug|Win32.ActiveCfg = Debug|Win32
@@ -1982,14 +2144,85 @@ Global
{5916D37D-8C97-424F-A904-74E52594C2D6}.Release|Mixed Platforms.Build.0 = Release|Win32
{5916D37D-8C97-424F-A904-74E52594C2D6}.Release|Win32.ActiveCfg = Release|Win32
{5916D37D-8C97-424F-A904-74E52594C2D6}.Release|Win32.Build.0 = Release|Win32
- {5AEA4BF6-27CD-47FC-9370-D87771CFA196}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {5AEA4BF6-27CD-47FC-9370-D87771CFA196}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {5AEA4BF6-27CD-47FC-9370-D87771CFA196}.Debug|Win32.ActiveCfg = Debug|Win32
- {5AEA4BF6-27CD-47FC-9370-D87771CFA196}.Debug|Win32.Build.0 = Debug|Win32
- {5AEA4BF6-27CD-47FC-9370-D87771CFA196}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {5AEA4BF6-27CD-47FC-9370-D87771CFA196}.Release|Mixed Platforms.Build.0 = Release|Win32
- {5AEA4BF6-27CD-47FC-9370-D87771CFA196}.Release|Win32.ActiveCfg = Release|Win32
- {5AEA4BF6-27CD-47FC-9370-D87771CFA196}.Release|Win32.Build.0 = Release|Win32
+ {E7B11CF0-FE40-4A69-AE20-1B882F4D7585}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {E7B11CF0-FE40-4A69-AE20-1B882F4D7585}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {E7B11CF0-FE40-4A69-AE20-1B882F4D7585}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E7B11CF0-FE40-4A69-AE20-1B882F4D7585}.Debug|Win32.Build.0 = Debug|Win32
+ {E7B11CF0-FE40-4A69-AE20-1B882F4D7585}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {E7B11CF0-FE40-4A69-AE20-1B882F4D7585}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {E7B11CF0-FE40-4A69-AE20-1B882F4D7585}.Release|Win32.ActiveCfg = Release|Win32
+ {E7B11CF0-FE40-4A69-AE20-1B882F4D7585}.Release|Win32.Build.0 = Release|Win32
+ {A28310B8-7BD0-4CDF-A7D8-59CAB42AA1C4}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {A28310B8-7BD0-4CDF-A7D8-59CAB42AA1C4}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {A28310B8-7BD0-4CDF-A7D8-59CAB42AA1C4}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A28310B8-7BD0-4CDF-A7D8-59CAB42AA1C4}.Debug|Win32.Build.0 = Debug|Win32
+ {A28310B8-7BD0-4CDF-A7D8-59CAB42AA1C4}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {A28310B8-7BD0-4CDF-A7D8-59CAB42AA1C4}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {A28310B8-7BD0-4CDF-A7D8-59CAB42AA1C4}.Release|Win32.ActiveCfg = Release|Win32
+ {A28310B8-7BD0-4CDF-A7D8-59CAB42AA1C4}.Release|Win32.Build.0 = Release|Win32
+ {7F0A70F6-BE3F-4C19-B435-956AB8F30BA4}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {7F0A70F6-BE3F-4C19-B435-956AB8F30BA4}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {7F0A70F6-BE3F-4C19-B435-956AB8F30BA4}.Debug|Win32.ActiveCfg = Debug|Win32
+ {7F0A70F6-BE3F-4C19-B435-956AB8F30BA4}.Debug|Win32.Build.0 = Debug|Win32
+ {7F0A70F6-BE3F-4C19-B435-956AB8F30BA4}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {7F0A70F6-BE3F-4C19-B435-956AB8F30BA4}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {7F0A70F6-BE3F-4C19-B435-956AB8F30BA4}.Release|Win32.ActiveCfg = Release|Win32
+ {7F0A70F6-BE3F-4C19-B435-956AB8F30BA4}.Release|Win32.Build.0 = Release|Win32
+ {D2250C20-3A94-4FB9-AF73-11BC5B73884B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {D2250C20-3A94-4FB9-AF73-11BC5B73884B}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {D2250C20-3A94-4FB9-AF73-11BC5B73884B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D2250C20-3A94-4FB9-AF73-11BC5B73884B}.Debug|Win32.Build.0 = Debug|Win32
+ {D2250C20-3A94-4FB9-AF73-11BC5B73884B}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {D2250C20-3A94-4FB9-AF73-11BC5B73884B}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {D2250C20-3A94-4FB9-AF73-11BC5B73884B}.Release|Win32.ActiveCfg = Release|Win32
+ {D2250C20-3A94-4FB9-AF73-11BC5B73884B}.Release|Win32.Build.0 = Release|Win32
+ {4B6E199A-034A-49BD-AB93-458DD37E45B1}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {4B6E199A-034A-49BD-AB93-458DD37E45B1}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {4B6E199A-034A-49BD-AB93-458DD37E45B1}.Debug|Win32.ActiveCfg = Debug|Win32
+ {4B6E199A-034A-49BD-AB93-458DD37E45B1}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {4B6E199A-034A-49BD-AB93-458DD37E45B1}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {4B6E199A-034A-49BD-AB93-458DD37E45B1}.Release|Win32.ActiveCfg = Release|Win32
+ {4B6E199A-034A-49BD-AB93-458DD37E45B1}.Release|Win32.Build.0 = Release|Win32
+ {49909552-0B0C-4C14-8CF6-DB8A2ADE0934}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {49909552-0B0C-4C14-8CF6-DB8A2ADE0934}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {49909552-0B0C-4C14-8CF6-DB8A2ADE0934}.Debug|Win32.ActiveCfg = Debug|Win32
+ {49909552-0B0C-4C14-8CF6-DB8A2ADE0934}.Debug|Win32.Build.0 = Debug|Win32
+ {49909552-0B0C-4C14-8CF6-DB8A2ADE0934}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {49909552-0B0C-4C14-8CF6-DB8A2ADE0934}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {49909552-0B0C-4C14-8CF6-DB8A2ADE0934}.Release|Win32.ActiveCfg = Release|Win32
+ {49909552-0B0C-4C14-8CF6-DB8A2ADE0934}.Release|Win32.Build.0 = Release|Win32
+ {2F7EDFA2-EE27-4D83-8454-9EFBD5779203}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {2F7EDFA2-EE27-4D83-8454-9EFBD5779203}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {2F7EDFA2-EE27-4D83-8454-9EFBD5779203}.Debug|Win32.ActiveCfg = Debug|Win32
+ {2F7EDFA2-EE27-4D83-8454-9EFBD5779203}.Debug|Win32.Build.0 = Debug|Win32
+ {2F7EDFA2-EE27-4D83-8454-9EFBD5779203}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {2F7EDFA2-EE27-4D83-8454-9EFBD5779203}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {2F7EDFA2-EE27-4D83-8454-9EFBD5779203}.Release|Win32.ActiveCfg = Release|Win32
+ {2F7EDFA2-EE27-4D83-8454-9EFBD5779203}.Release|Win32.Build.0 = Release|Win32
+ {D703D7A0-EDC1-4FE6-9E22-56154155B24E}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {D703D7A0-EDC1-4FE6-9E22-56154155B24E}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {D703D7A0-EDC1-4FE6-9E22-56154155B24E}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D703D7A0-EDC1-4FE6-9E22-56154155B24E}.Debug|Win32.Build.0 = Debug|Win32
+ {D703D7A0-EDC1-4FE6-9E22-56154155B24E}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {D703D7A0-EDC1-4FE6-9E22-56154155B24E}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {D703D7A0-EDC1-4FE6-9E22-56154155B24E}.Release|Win32.ActiveCfg = Release|Win32
+ {D703D7A0-EDC1-4FE6-9E22-56154155B24E}.Release|Win32.Build.0 = Release|Win32
+ {4052059A-D72B-4183-B5C2-9D1B099E9E35}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {4052059A-D72B-4183-B5C2-9D1B099E9E35}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {4052059A-D72B-4183-B5C2-9D1B099E9E35}.Debug|Win32.ActiveCfg = Debug|Win32
+ {4052059A-D72B-4183-B5C2-9D1B099E9E35}.Debug|Win32.Build.0 = Debug|Win32
+ {4052059A-D72B-4183-B5C2-9D1B099E9E35}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {4052059A-D72B-4183-B5C2-9D1B099E9E35}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {4052059A-D72B-4183-B5C2-9D1B099E9E35}.Release|Win32.ActiveCfg = Release|Win32
+ {4052059A-D72B-4183-B5C2-9D1B099E9E35}.Release|Win32.Build.0 = Release|Win32
+ {3AB90E6A-56FF-4C9D-B918-AB76DDBF8BE8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {3AB90E6A-56FF-4C9D-B918-AB76DDBF8BE8}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {3AB90E6A-56FF-4C9D-B918-AB76DDBF8BE8}.Debug|Win32.ActiveCfg = Debug|Win32
+ {3AB90E6A-56FF-4C9D-B918-AB76DDBF8BE8}.Debug|Win32.Build.0 = Debug|Win32
+ {3AB90E6A-56FF-4C9D-B918-AB76DDBF8BE8}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {3AB90E6A-56FF-4C9D-B918-AB76DDBF8BE8}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {3AB90E6A-56FF-4C9D-B918-AB76DDBF8BE8}.Release|Win32.ActiveCfg = Release|Win32
+ {3AB90E6A-56FF-4C9D-B918-AB76DDBF8BE8}.Release|Win32.Build.0 = Release|Win32
{5BDB7EE1-A1FD-410C-9598-21519A1B7952}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{5BDB7EE1-A1FD-410C-9598-21519A1B7952}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{5BDB7EE1-A1FD-410C-9598-21519A1B7952}.Debug|Win32.ActiveCfg = Debug|Win32
@@ -1998,134 +2231,14 @@ Global
{5BDB7EE1-A1FD-410C-9598-21519A1B7952}.Release|Mixed Platforms.Build.0 = Release|Win32
{5BDB7EE1-A1FD-410C-9598-21519A1B7952}.Release|Win32.ActiveCfg = Release|Win32
{5BDB7EE1-A1FD-410C-9598-21519A1B7952}.Release|Win32.Build.0 = Release|Win32
- {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}.Debug|Win32.ActiveCfg = Debug|Win32
- {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}.Debug|Win32.Build.0 = Debug|Win32
- {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}.Release|Mixed Platforms.Build.0 = Release|Win32
- {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}.Release|Win32.ActiveCfg = Release|Win32
- {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}.Release|Win32.Build.0 = Release|Win32
- {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65}.Debug|Win32.ActiveCfg = Debug|Win32
- {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65}.Debug|Win32.Build.0 = Debug|Win32
- {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65}.Release|Mixed Platforms.Build.0 = Release|Win32
- {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65}.Release|Win32.ActiveCfg = Release|Win32
- {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65}.Release|Win32.Build.0 = Release|Win32
- {60B43839-95E6-4526-A661-209F16335E0E}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {60B43839-95E6-4526-A661-209F16335E0E}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {60B43839-95E6-4526-A661-209F16335E0E}.Debug|Win32.ActiveCfg = Debug|Win32
- {60B43839-95E6-4526-A661-209F16335E0E}.Debug|Win32.Build.0 = Debug|Win32
- {60B43839-95E6-4526-A661-209F16335E0E}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {60B43839-95E6-4526-A661-209F16335E0E}.Release|Mixed Platforms.Build.0 = Release|Win32
- {60B43839-95E6-4526-A661-209F16335E0E}.Release|Win32.ActiveCfg = Release|Win32
- {60B43839-95E6-4526-A661-209F16335E0E}.Release|Win32.Build.0 = Release|Win32
- {625A8F11-2B4E-45B4-BD99-C6D629C606C0}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {625A8F11-2B4E-45B4-BD99-C6D629C606C0}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {625A8F11-2B4E-45B4-BD99-C6D629C606C0}.Debug|Win32.ActiveCfg = Debug|Win32
- {625A8F11-2B4E-45B4-BD99-C6D629C606C0}.Debug|Win32.Build.0 = Debug|Win32
- {625A8F11-2B4E-45B4-BD99-C6D629C606C0}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {625A8F11-2B4E-45B4-BD99-C6D629C606C0}.Release|Mixed Platforms.Build.0 = Release|Win32
- {625A8F11-2B4E-45B4-BD99-C6D629C606C0}.Release|Win32.ActiveCfg = Release|Win32
- {625A8F11-2B4E-45B4-BD99-C6D629C606C0}.Release|Win32.Build.0 = Release|Win32
- {63011A7B-CE4D-4DF1-B5DA-1B133C14A2E8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {63011A7B-CE4D-4DF1-B5DA-1B133C14A2E8}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {63011A7B-CE4D-4DF1-B5DA-1B133C14A2E8}.Debug|Win32.ActiveCfg = Debug|Win32
- {63011A7B-CE4D-4DF1-B5DA-1B133C14A2E8}.Debug|Win32.Build.0 = Debug|Win32
- {63011A7B-CE4D-4DF1-B5DA-1B133C14A2E8}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {63011A7B-CE4D-4DF1-B5DA-1B133C14A2E8}.Release|Mixed Platforms.Build.0 = Release|Win32
- {63011A7B-CE4D-4DF1-B5DA-1B133C14A2E8}.Release|Win32.ActiveCfg = Release|Win32
- {63011A7B-CE4D-4DF1-B5DA-1B133C14A2E8}.Release|Win32.Build.0 = Release|Win32
- {64D81334-DE73-457D-8FC1-9492508A2663}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {64D81334-DE73-457D-8FC1-9492508A2663}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {64D81334-DE73-457D-8FC1-9492508A2663}.Debug|Win32.ActiveCfg = Debug|Win32
- {64D81334-DE73-457D-8FC1-9492508A2663}.Debug|Win32.Build.0 = Debug|Win32
- {64D81334-DE73-457D-8FC1-9492508A2663}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {64D81334-DE73-457D-8FC1-9492508A2663}.Release|Mixed Platforms.Build.0 = Release|Win32
- {64D81334-DE73-457D-8FC1-9492508A2663}.Release|Win32.ActiveCfg = Release|Win32
- {64D81334-DE73-457D-8FC1-9492508A2663}.Release|Win32.Build.0 = Release|Win32
- {65C78BBB-8FCB-48E4-94C8-1F0F981929AF}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {65C78BBB-8FCB-48E4-94C8-1F0F981929AF}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {65C78BBB-8FCB-48E4-94C8-1F0F981929AF}.Debug|Win32.ActiveCfg = Debug|Win32
- {65C78BBB-8FCB-48E4-94C8-1F0F981929AF}.Debug|Win32.Build.0 = Debug|Win32
- {65C78BBB-8FCB-48E4-94C8-1F0F981929AF}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {65C78BBB-8FCB-48E4-94C8-1F0F981929AF}.Release|Mixed Platforms.Build.0 = Release|Win32
- {65C78BBB-8FCB-48E4-94C8-1F0F981929AF}.Release|Win32.ActiveCfg = Release|Win32
- {65C78BBB-8FCB-48E4-94C8-1F0F981929AF}.Release|Win32.Build.0 = Release|Win32
- {6AE76406-B03B-11DD-94B1-80B556D89593}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {6AE76406-B03B-11DD-94B1-80B556D89593}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {6AE76406-B03B-11DD-94B1-80B556D89593}.Debug|Win32.ActiveCfg = Debug|Win32
- {6AE76406-B03B-11DD-94B1-80B556D89593}.Debug|Win32.Build.0 = Debug|Win32
- {6AE76406-B03B-11DD-94B1-80B556D89593}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {6AE76406-B03B-11DD-94B1-80B556D89593}.Release|Mixed Platforms.Build.0 = Release|Win32
- {6AE76406-B03B-11DD-94B1-80B556D89593}.Release|Win32.ActiveCfg = Release|Win32
- {6AE76406-B03B-11DD-94B1-80B556D89593}.Release|Win32.Build.0 = Release|Win32
- {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9}.Debug|Win32.ActiveCfg = Debug|Win32
- {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9}.Debug|Win32.Build.0 = Debug|Win32
- {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9}.Release|Mixed Platforms.Build.0 = Release|Win32
- {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9}.Release|Win32.ActiveCfg = Release|Win32
- {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9}.Release|Win32.Build.0 = Release|Win32
- {6F9258E5-294F-47B2-919D-17FFE7A8B751}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {6F9258E5-294F-47B2-919D-17FFE7A8B751}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {6F9258E5-294F-47B2-919D-17FFE7A8B751}.Debug|Win32.ActiveCfg = Debug|Win32
- {6F9258E5-294F-47B2-919D-17FFE7A8B751}.Debug|Win32.Build.0 = Debug|Win32
- {6F9258E5-294F-47B2-919D-17FFE7A8B751}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {6F9258E5-294F-47B2-919D-17FFE7A8B751}.Release|Mixed Platforms.Build.0 = Release|Win32
- {6F9258E5-294F-47B2-919D-17FFE7A8B751}.Release|Win32.ActiveCfg = Release|Win32
- {6F9258E5-294F-47B2-919D-17FFE7A8B751}.Release|Win32.Build.0 = Release|Win32
- {7100F41F-868D-4E99-80A2-AF8E6574749D}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {7100F41F-868D-4E99-80A2-AF8E6574749D}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {7100F41F-868D-4E99-80A2-AF8E6574749D}.Debug|Win32.ActiveCfg = Debug|Win32
- {7100F41F-868D-4E99-80A2-AF8E6574749D}.Debug|Win32.Build.0 = Debug|Win32
- {7100F41F-868D-4E99-80A2-AF8E6574749D}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {7100F41F-868D-4E99-80A2-AF8E6574749D}.Release|Mixed Platforms.Build.0 = Release|Win32
- {7100F41F-868D-4E99-80A2-AF8E6574749D}.Release|Win32.ActiveCfg = Release|Win32
- {7100F41F-868D-4E99-80A2-AF8E6574749D}.Release|Win32.Build.0 = Release|Win32
- {76235B67-1C27-4627-8A33-4B2E1EF93EDE}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {76235B67-1C27-4627-8A33-4B2E1EF93EDE}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {76235B67-1C27-4627-8A33-4B2E1EF93EDE}.Debug|Win32.ActiveCfg = Debug|Win32
- {76235B67-1C27-4627-8A33-4B2E1EF93EDE}.Debug|Win32.Build.0 = Debug|Win32
- {76235B67-1C27-4627-8A33-4B2E1EF93EDE}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {76235B67-1C27-4627-8A33-4B2E1EF93EDE}.Release|Mixed Platforms.Build.0 = Release|Win32
- {76235B67-1C27-4627-8A33-4B2E1EF93EDE}.Release|Win32.ActiveCfg = Release|Win32
- {76235B67-1C27-4627-8A33-4B2E1EF93EDE}.Release|Win32.Build.0 = Release|Win32
- {7A0BA0C5-0D90-49AE-919A-4BE096F69E4F}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {7A0BA0C5-0D90-49AE-919A-4BE096F69E4F}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {7A0BA0C5-0D90-49AE-919A-4BE096F69E4F}.Debug|Win32.ActiveCfg = Debug|Win32
- {7A0BA0C5-0D90-49AE-919A-4BE096F69E4F}.Debug|Win32.Build.0 = Debug|Win32
- {7A0BA0C5-0D90-49AE-919A-4BE096F69E4F}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {7A0BA0C5-0D90-49AE-919A-4BE096F69E4F}.Release|Mixed Platforms.Build.0 = Release|Win32
- {7A0BA0C5-0D90-49AE-919A-4BE096F69E4F}.Release|Win32.ActiveCfg = Release|Win32
- {7A0BA0C5-0D90-49AE-919A-4BE096F69E4F}.Release|Win32.Build.0 = Release|Win32
- {7B219FAA-E360-43C8-B341-804A94EEFFAC}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {7B219FAA-E360-43C8-B341-804A94EEFFAC}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {7B219FAA-E360-43C8-B341-804A94EEFFAC}.Debug|Win32.ActiveCfg = Debug|Win32
- {7B219FAA-E360-43C8-B341-804A94EEFFAC}.Debug|Win32.Build.0 = Debug|Win32
- {7B219FAA-E360-43C8-B341-804A94EEFFAC}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {7B219FAA-E360-43C8-B341-804A94EEFFAC}.Release|Mixed Platforms.Build.0 = Release|Win32
- {7B219FAA-E360-43C8-B341-804A94EEFFAC}.Release|Win32.ActiveCfg = Release|Win32
- {7B219FAA-E360-43C8-B341-804A94EEFFAC}.Release|Win32.Build.0 = Release|Win32
- {7D1EC571-687B-5D48-E259-C5BA78E717D0}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {7D1EC571-687B-5D48-E259-C5BA78E717D0}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {7D1EC571-687B-5D48-E259-C5BA78E717D0}.Debug|Win32.ActiveCfg = Debug|Win32
- {7D1EC571-687B-5D48-E259-C5BA78E717D0}.Debug|Win32.Build.0 = Debug|Win32
- {7D1EC571-687B-5D48-E259-C5BA78E717D0}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {7D1EC571-687B-5D48-E259-C5BA78E717D0}.Release|Mixed Platforms.Build.0 = Release|Win32
- {7D1EC571-687B-5D48-E259-C5BA78E717D0}.Release|Win32.ActiveCfg = Release|Win32
- {7D1EC571-687B-5D48-E259-C5BA78E717D0}.Release|Win32.Build.0 = Release|Win32
- {7D456640-3619-4D23-A56D-E0084400CCBF}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {7D456640-3619-4D23-A56D-E0084400CCBF}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {7D456640-3619-4D23-A56D-E0084400CCBF}.Debug|Win32.ActiveCfg = Debug|Win32
- {7D456640-3619-4D23-A56D-E0084400CCBF}.Debug|Win32.Build.0 = Debug|Win32
- {7D456640-3619-4D23-A56D-E0084400CCBF}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {7D456640-3619-4D23-A56D-E0084400CCBF}.Release|Mixed Platforms.Build.0 = Release|Win32
- {7D456640-3619-4D23-A56D-E0084400CCBF}.Release|Win32.ActiveCfg = Release|Win32
- {7D456640-3619-4D23-A56D-E0084400CCBF}.Release|Win32.Build.0 = Release|Win32
+ {F7790A54-4078-4E4A-8231-818BE9FB1F94}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {F7790A54-4078-4E4A-8231-818BE9FB1F94}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {F7790A54-4078-4E4A-8231-818BE9FB1F94}.Debug|Win32.ActiveCfg = Debug|Win32
+ {F7790A54-4078-4E4A-8231-818BE9FB1F94}.Debug|Win32.Build.0 = Debug|Win32
+ {F7790A54-4078-4E4A-8231-818BE9FB1F94}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {F7790A54-4078-4E4A-8231-818BE9FB1F94}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {F7790A54-4078-4E4A-8231-818BE9FB1F94}.Release|Win32.ActiveCfg = Release|Win32
+ {F7790A54-4078-4E4A-8231-818BE9FB1F94}.Release|Win32.Build.0 = Release|Win32
{7EA8C4AB-F9C6-4FA1-8B0A-74F5650430B2}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{7EA8C4AB-F9C6-4FA1-8B0A-74F5650430B2}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{7EA8C4AB-F9C6-4FA1-8B0A-74F5650430B2}.Debug|Win32.ActiveCfg = Debug|Win32
@@ -2134,300 +2247,86 @@ Global
{7EA8C4AB-F9C6-4FA1-8B0A-74F5650430B2}.Release|Mixed Platforms.Build.0 = Release|Win32
{7EA8C4AB-F9C6-4FA1-8B0A-74F5650430B2}.Release|Win32.ActiveCfg = Release|Win32
{7EA8C4AB-F9C6-4FA1-8B0A-74F5650430B2}.Release|Win32.Build.0 = Release|Win32
- {7EFD0C91-198E-4043-9E71-4A4C7879B929}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {7EFD0C91-198E-4043-9E71-4A4C7879B929}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {7EFD0C91-198E-4043-9E71-4A4C7879B929}.Debug|Win32.ActiveCfg = Debug|Win32
- {7EFD0C91-198E-4043-9E71-4A4C7879B929}.Debug|Win32.Build.0 = Debug|Win32
- {7EFD0C91-198E-4043-9E71-4A4C7879B929}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {7EFD0C91-198E-4043-9E71-4A4C7879B929}.Release|Mixed Platforms.Build.0 = Release|Win32
- {7EFD0C91-198E-4043-9E71-4A4C7879B929}.Release|Win32.ActiveCfg = Release|Win32
- {7EFD0C91-198E-4043-9E71-4A4C7879B929}.Release|Win32.Build.0 = Release|Win32
- {7F0A70F6-BE3F-4C19-B435-956AB8F30BA4}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {7F0A70F6-BE3F-4C19-B435-956AB8F30BA4}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {7F0A70F6-BE3F-4C19-B435-956AB8F30BA4}.Debug|Win32.ActiveCfg = Debug|Win32
- {7F0A70F6-BE3F-4C19-B435-956AB8F30BA4}.Debug|Win32.Build.0 = Debug|Win32
- {7F0A70F6-BE3F-4C19-B435-956AB8F30BA4}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {7F0A70F6-BE3F-4C19-B435-956AB8F30BA4}.Release|Mixed Platforms.Build.0 = Release|Win32
- {7F0A70F6-BE3F-4C19-B435-956AB8F30BA4}.Release|Win32.ActiveCfg = Release|Win32
- {7F0A70F6-BE3F-4C19-B435-956AB8F30BA4}.Release|Win32.Build.0 = Release|Win32
- {80E37CB5-059D-4F4B-AEF6-08265468D368}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {80E37CB5-059D-4F4B-AEF6-08265468D368}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {80E37CB5-059D-4F4B-AEF6-08265468D368}.Debug|Win32.ActiveCfg = Debug|Win32
- {80E37CB5-059D-4F4B-AEF6-08265468D368}.Debug|Win32.Build.0 = Debug|Win32
- {80E37CB5-059D-4F4B-AEF6-08265468D368}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {80E37CB5-059D-4F4B-AEF6-08265468D368}.Release|Mixed Platforms.Build.0 = Release|Win32
- {80E37CB5-059D-4F4B-AEF6-08265468D368}.Release|Win32.ActiveCfg = Release|Win32
- {80E37CB5-059D-4F4B-AEF6-08265468D368}.Release|Win32.Build.0 = Release|Win32
- {82BC22B5-1D58-28BA-8735-58B591E1D154}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {82BC22B5-1D58-28BA-8735-58B591E1D154}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {82BC22B5-1D58-28BA-8735-58B591E1D154}.Debug|Win32.ActiveCfg = Debug|Win32
- {82BC22B5-1D58-28BA-8735-58B591E1D154}.Debug|Win32.Build.0 = Debug|Win32
- {82BC22B5-1D58-28BA-8735-58B591E1D154}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {82BC22B5-1D58-28BA-8735-58B591E1D154}.Release|Mixed Platforms.Build.0 = Release|Win32
- {82BC22B5-1D58-28BA-8735-58B591E1D154}.Release|Win32.ActiveCfg = Release|Win32
- {82BC22B5-1D58-28BA-8735-58B591E1D154}.Release|Win32.Build.0 = Release|Win32
- {82F5BFE5-FDCE-47D4-8B38-BEEBED561681}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {82F5BFE5-FDCE-47D4-8B38-BEEBED561681}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {82F5BFE5-FDCE-47D4-8B38-BEEBED561681}.Debug|Win32.ActiveCfg = Debug|Win32
- {82F5BFE5-FDCE-47D4-8B38-BEEBED561681}.Debug|Win32.Build.0 = Debug|Win32
- {82F5BFE5-FDCE-47D4-8B38-BEEBED561681}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {82F5BFE5-FDCE-47D4-8B38-BEEBED561681}.Release|Mixed Platforms.Build.0 = Release|Win32
- {82F5BFE5-FDCE-47D4-8B38-BEEBED561681}.Release|Win32.ActiveCfg = Release|Win32
- {82F5BFE5-FDCE-47D4-8B38-BEEBED561681}.Release|Win32.Build.0 = Release|Win32
- {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}.Debug|Win32.ActiveCfg = Debug|Win32
- {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}.Debug|Win32.Build.0 = Debug|Win32
- {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}.Release|Mixed Platforms.Build.0 = Release|Win32
- {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}.Release|Win32.ActiveCfg = Release|Win32
- {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C}.Release|Win32.Build.0 = Release|Win32
- {865575D0-37E2-405E-8CBA-5F6C485B5A26}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {865575D0-37E2-405E-8CBA-5F6C485B5A26}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {865575D0-37E2-405E-8CBA-5F6C485B5A26}.Debug|Win32.ActiveCfg = Debug|Win32
- {865575D0-37E2-405E-8CBA-5F6C485B5A26}.Debug|Win32.Build.0 = Debug|Win32
- {865575D0-37E2-405E-8CBA-5F6C485B5A26}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {865575D0-37E2-405E-8CBA-5F6C485B5A26}.Release|Mixed Platforms.Build.0 = Release|Win32
- {865575D0-37E2-405E-8CBA-5F6C485B5A26}.Release|Win32.ActiveCfg = Release|Win32
- {865575D0-37E2-405E-8CBA-5F6C485B5A26}.Release|Win32.Build.0 = Release|Win32
- {879286C0-3234-D14B-BB2C-32D4D1B809CE}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {879286C0-3234-D14B-BB2C-32D4D1B809CE}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {879286C0-3234-D14B-BB2C-32D4D1B809CE}.Debug|Win32.ActiveCfg = Debug|Win32
- {879286C0-3234-D14B-BB2C-32D4D1B809CE}.Debug|Win32.Build.0 = Debug|Win32
- {879286C0-3234-D14B-BB2C-32D4D1B809CE}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {879286C0-3234-D14B-BB2C-32D4D1B809CE}.Release|Mixed Platforms.Build.0 = Release|Win32
- {879286C0-3234-D14B-BB2C-32D4D1B809CE}.Release|Win32.ActiveCfg = Release|Win32
- {879286C0-3234-D14B-BB2C-32D4D1B809CE}.Release|Win32.Build.0 = Release|Win32
- {881F6A97-D539-4C48-B401-DF04385B2343}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {881F6A97-D539-4C48-B401-DF04385B2343}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {881F6A97-D539-4C48-B401-DF04385B2343}.Debug|Win32.ActiveCfg = Debug|Win32
- {881F6A97-D539-4C48-B401-DF04385B2343}.Debug|Win32.Build.0 = Debug|Win32
- {881F6A97-D539-4C48-B401-DF04385B2343}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {881F6A97-D539-4C48-B401-DF04385B2343}.Release|Mixed Platforms.Build.0 = Release|Win32
- {881F6A97-D539-4C48-B401-DF04385B2343}.Release|Win32.ActiveCfg = Release|Win32
- {881F6A97-D539-4C48-B401-DF04385B2343}.Release|Win32.Build.0 = Release|Win32
- {899F1280-3441-4D1F-BA04-CCD6208D9146}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {899F1280-3441-4D1F-BA04-CCD6208D9146}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {899F1280-3441-4D1F-BA04-CCD6208D9146}.Debug|Win32.ActiveCfg = Debug|Win32
- {899F1280-3441-4D1F-BA04-CCD6208D9146}.Debug|Win32.Build.0 = Debug|Win32
- {899F1280-3441-4D1F-BA04-CCD6208D9146}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {899F1280-3441-4D1F-BA04-CCD6208D9146}.Release|Mixed Platforms.Build.0 = Release|Win32
- {899F1280-3441-4D1F-BA04-CCD6208D9146}.Release|Win32.ActiveCfg = Release|Win32
- {899F1280-3441-4D1F-BA04-CCD6208D9146}.Release|Win32.Build.0 = Release|Win32
- {89C1C190-A5D1-4EC4-BD6A-67FF2195C7CC}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {89C1C190-A5D1-4EC4-BD6A-67FF2195C7CC}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {89C1C190-A5D1-4EC4-BD6A-67FF2195C7CC}.Debug|Win32.ActiveCfg = Debug|Win32
- {89C1C190-A5D1-4EC4-BD6A-67FF2195C7CC}.Debug|Win32.Build.0 = Debug|Win32
- {89C1C190-A5D1-4EC4-BD6A-67FF2195C7CC}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {89C1C190-A5D1-4EC4-BD6A-67FF2195C7CC}.Release|Mixed Platforms.Build.0 = Release|Win32
- {89C1C190-A5D1-4EC4-BD6A-67FF2195C7CC}.Release|Win32.ActiveCfg = Release|Win32
- {89C1C190-A5D1-4EC4-BD6A-67FF2195C7CC}.Release|Win32.Build.0 = Release|Win32
- {8A3E1774-1DE9-445C-982D-3EE37C8A752A}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {8A3E1774-1DE9-445C-982D-3EE37C8A752A}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {8A3E1774-1DE9-445C-982D-3EE37C8A752A}.Debug|Win32.ActiveCfg = Debug|Win32
- {8A3E1774-1DE9-445C-982D-3EE37C8A752A}.Debug|Win32.Build.0 = Debug|Win32
- {8A3E1774-1DE9-445C-982D-3EE37C8A752A}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {8A3E1774-1DE9-445C-982D-3EE37C8A752A}.Release|Mixed Platforms.Build.0 = Release|Win32
- {8A3E1774-1DE9-445C-982D-3EE37C8A752A}.Release|Win32.ActiveCfg = Release|Win32
- {8A3E1774-1DE9-445C-982D-3EE37C8A752A}.Release|Win32.Build.0 = Release|Win32
- {8B2EE5D9-41BC-4AA2-A401-2DC143A05D2E}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {8B2EE5D9-41BC-4AA2-A401-2DC143A05D2E}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {8B2EE5D9-41BC-4AA2-A401-2DC143A05D2E}.Debug|Win32.ActiveCfg = Debug|Win32
- {8B2EE5D9-41BC-4AA2-A401-2DC143A05D2E}.Debug|Win32.Build.0 = Debug|Win32
- {8B2EE5D9-41BC-4AA2-A401-2DC143A05D2E}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {8B2EE5D9-41BC-4AA2-A401-2DC143A05D2E}.Release|Mixed Platforms.Build.0 = Release|Win32
- {8B2EE5D9-41BC-4AA2-A401-2DC143A05D2E}.Release|Win32.ActiveCfg = Release|Win32
- {8B2EE5D9-41BC-4AA2-A401-2DC143A05D2E}.Release|Win32.Build.0 = Release|Win32
- {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Debug|Win32.ActiveCfg = Debug|Win32
- {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Debug|Win32.Build.0 = Debug|Win32
- {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Release|Mixed Platforms.Build.0 = Release|Win32
- {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Release|Win32.ActiveCfg = Release|Win32
- {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Release|Win32.Build.0 = Release|Win32
- {8C27D792-2648-4F5E-9ED0-374276327308}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {8C27D792-2648-4F5E-9ED0-374276327308}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {8C27D792-2648-4F5E-9ED0-374276327308}.Debug|Win32.ActiveCfg = Debug|Win32
- {8C27D792-2648-4F5E-9ED0-374276327308}.Debug|Win32.Build.0 = Debug|Win32
- {8C27D792-2648-4F5E-9ED0-374276327308}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {8C27D792-2648-4F5E-9ED0-374276327308}.Release|Mixed Platforms.Build.0 = Release|Win32
- {8C27D792-2648-4F5E-9ED0-374276327308}.Release|Win32.ActiveCfg = Release|Win32
- {8C27D792-2648-4F5E-9ED0-374276327308}.Release|Win32.Build.0 = Release|Win32
- {903F8C1E-537A-4C9E-97BE-075147CBE769}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {903F8C1E-537A-4C9E-97BE-075147CBE769}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {903F8C1E-537A-4C9E-97BE-075147CBE769}.Debug|Win32.ActiveCfg = Debug|Win32
- {903F8C1E-537A-4C9E-97BE-075147CBE769}.Debug|Win32.Build.0 = Debug|Win32
- {903F8C1E-537A-4C9E-97BE-075147CBE769}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {903F8C1E-537A-4C9E-97BE-075147CBE769}.Release|Mixed Platforms.Build.0 = Release|Win32
- {903F8C1E-537A-4C9E-97BE-075147CBE769}.Release|Win32.ActiveCfg = Release|Win32
- {903F8C1E-537A-4C9E-97BE-075147CBE769}.Release|Win32.Build.0 = Release|Win32
- {9055E088-25C6-47FD-87D5-D9DD9FD75C9F}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {9055E088-25C6-47FD-87D5-D9DD9FD75C9F}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {9055E088-25C6-47FD-87D5-D9DD9FD75C9F}.Debug|Win32.ActiveCfg = Debug|Win32
- {9055E088-25C6-47FD-87D5-D9DD9FD75C9F}.Debug|Win32.Build.0 = Debug|Win32
- {9055E088-25C6-47FD-87D5-D9DD9FD75C9F}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {9055E088-25C6-47FD-87D5-D9DD9FD75C9F}.Release|Mixed Platforms.Build.0 = Release|Win32
- {9055E088-25C6-47FD-87D5-D9DD9FD75C9F}.Release|Win32.ActiveCfg = Release|Win32
- {9055E088-25C6-47FD-87D5-D9DD9FD75C9F}.Release|Win32.Build.0 = Release|Win32
- {9301A569-5D2B-4D11-9332-B1E30AEACB8D}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {9301A569-5D2B-4D11-9332-B1E30AEACB8D}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {9301A569-5D2B-4D11-9332-B1E30AEACB8D}.Debug|Win32.ActiveCfg = Debug|Win32
- {9301A569-5D2B-4D11-9332-B1E30AEACB8D}.Debug|Win32.Build.0 = Debug|Win32
- {9301A569-5D2B-4D11-9332-B1E30AEACB8D}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {9301A569-5D2B-4D11-9332-B1E30AEACB8D}.Release|Mixed Platforms.Build.0 = Release|Win32
- {9301A569-5D2B-4D11-9332-B1E30AEACB8D}.Release|Win32.ActiveCfg = Release|Win32
- {9301A569-5D2B-4D11-9332-B1E30AEACB8D}.Release|Win32.Build.0 = Release|Win32
- {9946A048-043B-4F8F-9E07-9297B204714C}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {9946A048-043B-4F8F-9E07-9297B204714C}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {9946A048-043B-4F8F-9E07-9297B204714C}.Debug|Win32.ActiveCfg = Debug|Win32
- {9946A048-043B-4F8F-9E07-9297B204714C}.Debug|Win32.Build.0 = Debug|Win32
- {9946A048-043B-4F8F-9E07-9297B204714C}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {9946A048-043B-4F8F-9E07-9297B204714C}.Release|Mixed Platforms.Build.0 = Release|Win32
- {9946A048-043B-4F8F-9E07-9297B204714C}.Release|Win32.ActiveCfg = Release|Win32
- {9946A048-043B-4F8F-9E07-9297B204714C}.Release|Win32.Build.0 = Release|Win32
- {9A72A362-E617-4205-B9F2-43C6FB280FA1}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {9A72A362-E617-4205-B9F2-43C6FB280FA1}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {9A72A362-E617-4205-B9F2-43C6FB280FA1}.Debug|Win32.ActiveCfg = Debug|Win32
- {9A72A362-E617-4205-B9F2-43C6FB280FA1}.Debug|Win32.Build.0 = Debug|Win32
- {9A72A362-E617-4205-B9F2-43C6FB280FA1}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {9A72A362-E617-4205-B9F2-43C6FB280FA1}.Release|Mixed Platforms.Build.0 = Release|Win32
- {9A72A362-E617-4205-B9F2-43C6FB280FA1}.Release|Win32.ActiveCfg = Release|Win32
- {9A72A362-E617-4205-B9F2-43C6FB280FA1}.Release|Win32.Build.0 = Release|Win32
- {9B87804D-2502-480B-95AE-5A572CE91809}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {9B87804D-2502-480B-95AE-5A572CE91809}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {9B87804D-2502-480B-95AE-5A572CE91809}.Debug|Win32.ActiveCfg = Debug|Win32
- {9B87804D-2502-480B-95AE-5A572CE91809}.Debug|Win32.Build.0 = Debug|Win32
- {9B87804D-2502-480B-95AE-5A572CE91809}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {9B87804D-2502-480B-95AE-5A572CE91809}.Release|Mixed Platforms.Build.0 = Release|Win32
- {9B87804D-2502-480B-95AE-5A572CE91809}.Release|Win32.ActiveCfg = Release|Win32
- {9B87804D-2502-480B-95AE-5A572CE91809}.Release|Win32.Build.0 = Release|Win32
- {9D13D9B8-6C28-42A7-935C-B769EBC55BAA}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {9D13D9B8-6C28-42A7-935C-B769EBC55BAA}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {9D13D9B8-6C28-42A7-935C-B769EBC55BAA}.Debug|Win32.ActiveCfg = Debug|Win32
- {9D13D9B8-6C28-42A7-935C-B769EBC55BAA}.Debug|Win32.Build.0 = Debug|Win32
- {9D13D9B8-6C28-42A7-935C-B769EBC55BAA}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {9D13D9B8-6C28-42A7-935C-B769EBC55BAA}.Release|Mixed Platforms.Build.0 = Release|Win32
- {9D13D9B8-6C28-42A7-935C-B769EBC55BAA}.Release|Win32.ActiveCfg = Release|Win32
- {9D13D9B8-6C28-42A7-935C-B769EBC55BAA}.Release|Win32.Build.0 = Release|Win32
- {9E5416B9-B91B-4029-93F4-102C1AD5CAF4}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {9E5416B9-B91B-4029-93F4-102C1AD5CAF4}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {9E5416B9-B91B-4029-93F4-102C1AD5CAF4}.Debug|Win32.ActiveCfg = Debug|Win32
- {9E5416B9-B91B-4029-93F4-102C1AD5CAF4}.Debug|Win32.Build.0 = Debug|Win32
- {9E5416B9-B91B-4029-93F4-102C1AD5CAF4}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {9E5416B9-B91B-4029-93F4-102C1AD5CAF4}.Release|Mixed Platforms.Build.0 = Release|Win32
- {9E5416B9-B91B-4029-93F4-102C1AD5CAF4}.Release|Win32.ActiveCfg = Release|Win32
- {9E5416B9-B91B-4029-93F4-102C1AD5CAF4}.Release|Win32.Build.0 = Release|Win32
- {9F53807E-9382-47BD-8371-E5D04F517E9C}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {9F53807E-9382-47BD-8371-E5D04F517E9C}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {9F53807E-9382-47BD-8371-E5D04F517E9C}.Debug|Win32.ActiveCfg = Debug|Win32
- {9F53807E-9382-47BD-8371-E5D04F517E9C}.Debug|Win32.Build.0 = Debug|Win32
- {9F53807E-9382-47BD-8371-E5D04F517E9C}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {9F53807E-9382-47BD-8371-E5D04F517E9C}.Release|Mixed Platforms.Build.0 = Release|Win32
- {9F53807E-9382-47BD-8371-E5D04F517E9C}.Release|Win32.ActiveCfg = Release|Win32
- {9F53807E-9382-47BD-8371-E5D04F517E9C}.Release|Win32.Build.0 = Release|Win32
- {A0D94973-D355-47A5-A1E2-3456F321F010}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {A0D94973-D355-47A5-A1E2-3456F321F010}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {A0D94973-D355-47A5-A1E2-3456F321F010}.Debug|Win32.ActiveCfg = Debug|Win32
- {A0D94973-D355-47A5-A1E2-3456F321F010}.Debug|Win32.Build.0 = Debug|Win32
- {A0D94973-D355-47A5-A1E2-3456F321F010}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {A0D94973-D355-47A5-A1E2-3456F321F010}.Release|Mixed Platforms.Build.0 = Release|Win32
- {A0D94973-D355-47A5-A1E2-3456F321F010}.Release|Win32.ActiveCfg = Release|Win32
- {A0D94973-D355-47A5-A1E2-3456F321F010}.Release|Win32.Build.0 = Release|Win32
- {A1CAA831-C507-4B2E-87F3-AEC63C9907F9}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {A1CAA831-C507-4B2E-87F3-AEC63C9907F9}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {A1CAA831-C507-4B2E-87F3-AEC63C9907F9}.Debug|Win32.ActiveCfg = Debug|Win32
- {A1CAA831-C507-4B2E-87F3-AEC63C9907F9}.Debug|Win32.Build.0 = Debug|Win32
- {A1CAA831-C507-4B2E-87F3-AEC63C9907F9}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {A1CAA831-C507-4B2E-87F3-AEC63C9907F9}.Release|Mixed Platforms.Build.0 = Release|Win32
- {A1CAA831-C507-4B2E-87F3-AEC63C9907F9}.Release|Win32.ActiveCfg = Release|Win32
- {A1CAA831-C507-4B2E-87F3-AEC63C9907F9}.Release|Win32.Build.0 = Release|Win32
- {A1CE1DC3-3800-E6A1-F8ED-CC5D3B9D8B6F}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {A1CE1DC3-3800-E6A1-F8ED-CC5D3B9D8B6F}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {A1CE1DC3-3800-E6A1-F8ED-CC5D3B9D8B6F}.Debug|Win32.ActiveCfg = Debug|Win32
- {A1CE1DC3-3800-E6A1-F8ED-CC5D3B9D8B6F}.Debug|Win32.Build.0 = Debug|Win32
- {A1CE1DC3-3800-E6A1-F8ED-CC5D3B9D8B6F}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {A1CE1DC3-3800-E6A1-F8ED-CC5D3B9D8B6F}.Release|Mixed Platforms.Build.0 = Release|Win32
- {A1CE1DC3-3800-E6A1-F8ED-CC5D3B9D8B6F}.Release|Win32.ActiveCfg = Release|Win32
- {A1CE1DC3-3800-E6A1-F8ED-CC5D3B9D8B6F}.Release|Win32.Build.0 = Release|Win32
- {A28310B8-7BD0-4CDF-A7D8-59CAB42AA1C4}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {A28310B8-7BD0-4CDF-A7D8-59CAB42AA1C4}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {A28310B8-7BD0-4CDF-A7D8-59CAB42AA1C4}.Debug|Win32.ActiveCfg = Debug|Win32
- {A28310B8-7BD0-4CDF-A7D8-59CAB42AA1C4}.Debug|Win32.Build.0 = Debug|Win32
- {A28310B8-7BD0-4CDF-A7D8-59CAB42AA1C4}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {A28310B8-7BD0-4CDF-A7D8-59CAB42AA1C4}.Release|Mixed Platforms.Build.0 = Release|Win32
- {A28310B8-7BD0-4CDF-A7D8-59CAB42AA1C4}.Release|Win32.ActiveCfg = Release|Win32
- {A28310B8-7BD0-4CDF-A7D8-59CAB42AA1C4}.Release|Win32.Build.0 = Release|Win32
- {A34770EA-A574-43E8-9327-F79C04770E98}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {A34770EA-A574-43E8-9327-F79C04770E98}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {A34770EA-A574-43E8-9327-F79C04770E98}.Debug|Win32.ActiveCfg = Debug|Win32
- {A34770EA-A574-43E8-9327-F79C04770E98}.Debug|Win32.Build.0 = Debug|Win32
- {A34770EA-A574-43E8-9327-F79C04770E98}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {A34770EA-A574-43E8-9327-F79C04770E98}.Release|Mixed Platforms.Build.0 = Release|Win32
- {A34770EA-A574-43E8-9327-F79C04770E98}.Release|Win32.ActiveCfg = Release|Win32
- {A34770EA-A574-43E8-9327-F79C04770E98}.Release|Win32.Build.0 = Release|Win32
- {A464166F-8507-49B4-9B02-5CB77C498B25}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {A464166F-8507-49B4-9B02-5CB77C498B25}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {A464166F-8507-49B4-9B02-5CB77C498B25}.Debug|Win32.ActiveCfg = Debug|Win32
- {A464166F-8507-49B4-9B02-5CB77C498B25}.Debug|Win32.Build.0 = Debug|Win32
- {A464166F-8507-49B4-9B02-5CB77C498B25}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {A464166F-8507-49B4-9B02-5CB77C498B25}.Release|Mixed Platforms.Build.0 = Release|Win32
- {A464166F-8507-49B4-9B02-5CB77C498B25}.Release|Win32.ActiveCfg = Release|Win32
- {A464166F-8507-49B4-9B02-5CB77C498B25}.Release|Win32.Build.0 = Release|Win32
- {A493331B-3180-49FE-8D0E-D121645E63AD}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {A493331B-3180-49FE-8D0E-D121645E63AD}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {A493331B-3180-49FE-8D0E-D121645E63AD}.Debug|Win32.ActiveCfg = Debug|Win32
- {A493331B-3180-49FE-8D0E-D121645E63AD}.Debug|Win32.Build.0 = Debug|Win32
- {A493331B-3180-49FE-8D0E-D121645E63AD}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {A493331B-3180-49FE-8D0E-D121645E63AD}.Release|Mixed Platforms.Build.0 = Release|Win32
- {A493331B-3180-49FE-8D0E-D121645E63AD}.Release|Win32.ActiveCfg = Release|Win32
- {A493331B-3180-49FE-8D0E-D121645E63AD}.Release|Win32.Build.0 = Release|Win32
- {A508ADD3-CECE-4E0F-8448-2F5E454DF551}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {A508ADD3-CECE-4E0F-8448-2F5E454DF551}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {A508ADD3-CECE-4E0F-8448-2F5E454DF551}.Debug|Win32.ActiveCfg = Debug|Win32
- {A508ADD3-CECE-4E0F-8448-2F5E454DF551}.Debug|Win32.Build.0 = Debug|Win32
- {A508ADD3-CECE-4E0F-8448-2F5E454DF551}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {A508ADD3-CECE-4E0F-8448-2F5E454DF551}.Release|Mixed Platforms.Build.0 = Release|Win32
- {A508ADD3-CECE-4E0F-8448-2F5E454DF551}.Release|Win32.ActiveCfg = Release|Win32
- {A508ADD3-CECE-4E0F-8448-2F5E454DF551}.Release|Win32.Build.0 = Release|Win32
- {A5C5D801-4026-49F2-BBF1-250941855306}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {A5C5D801-4026-49F2-BBF1-250941855306}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {A5C5D801-4026-49F2-BBF1-250941855306}.Debug|Win32.ActiveCfg = Debug|Win32
- {A5C5D801-4026-49F2-BBF1-250941855306}.Debug|Win32.Build.0 = Debug|Win32
- {A5C5D801-4026-49F2-BBF1-250941855306}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {A5C5D801-4026-49F2-BBF1-250941855306}.Release|Mixed Platforms.Build.0 = Release|Win32
- {A5C5D801-4026-49F2-BBF1-250941855306}.Release|Win32.ActiveCfg = Release|Win32
- {A5C5D801-4026-49F2-BBF1-250941855306}.Release|Win32.Build.0 = Release|Win32
- {A5F831FD-9B9C-4FEF-9FBA-554817B734CE}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {A5F831FD-9B9C-4FEF-9FBA-554817B734CE}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {A5F831FD-9B9C-4FEF-9FBA-554817B734CE}.Debug|Win32.ActiveCfg = Debug|Win32
- {A5F831FD-9B9C-4FEF-9FBA-554817B734CE}.Debug|Win32.Build.0 = Debug|Win32
- {A5F831FD-9B9C-4FEF-9FBA-554817B734CE}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {A5F831FD-9B9C-4FEF-9FBA-554817B734CE}.Release|Mixed Platforms.Build.0 = Release|Win32
- {A5F831FD-9B9C-4FEF-9FBA-554817B734CE}.Release|Win32.ActiveCfg = Release|Win32
- {A5F831FD-9B9C-4FEF-9FBA-554817B734CE}.Release|Win32.Build.0 = Release|Win32
- {A763D879-02F0-B744-E6D5-E94C0197057C}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {A763D879-02F0-B744-E6D5-E94C0197057C}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {A763D879-02F0-B744-E6D5-E94C0197057C}.Debug|Win32.ActiveCfg = Debug|Win32
- {A763D879-02F0-B744-E6D5-E94C0197057C}.Debug|Win32.Build.0 = Debug|Win32
- {A763D879-02F0-B744-E6D5-E94C0197057C}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {A763D879-02F0-B744-E6D5-E94C0197057C}.Release|Mixed Platforms.Build.0 = Release|Win32
- {A763D879-02F0-B744-E6D5-E94C0197057C}.Release|Win32.ActiveCfg = Release|Win32
- {A763D879-02F0-B744-E6D5-E94C0197057C}.Release|Win32.Build.0 = Release|Win32
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Debug|Win32.ActiveCfg = Debug|Win32
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Debug|Win32.Build.0 = Debug|Win32
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release|Mixed Platforms.Build.0 = Release|Win32
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release|Win32.ActiveCfg = Release|Win32
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release|Win32.Build.0 = Release|Win32
- {AAC78796-B9A2-4CD9-BF89-09B03E92BF73}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {AAC78796-B9A2-4CD9-BF89-09B03E92BF73}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {AAC78796-B9A2-4CD9-BF89-09B03E92BF73}.Debug|Win32.ActiveCfg = Debug|Win32
- {AAC78796-B9A2-4CD9-BF89-09B03E92BF73}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {AAC78796-B9A2-4CD9-BF89-09B03E92BF73}.Release|Mixed Platforms.Build.0 = Release|Win32
- {AAC78796-B9A2-4CD9-BF89-09B03E92BF73}.Release|Win32.ActiveCfg = Release|Win32
+ {BA62FF5E-08A6-4102-9675-C12E8C9D4CC0}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {BA62FF5E-08A6-4102-9675-C12E8C9D4CC0}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {BA62FF5E-08A6-4102-9675-C12E8C9D4CC0}.Debug|Win32.ActiveCfg = Debug|Win32
+ {BA62FF5E-08A6-4102-9675-C12E8C9D4CC0}.Debug|Win32.Build.0 = Debug|Win32
+ {BA62FF5E-08A6-4102-9675-C12E8C9D4CC0}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {BA62FF5E-08A6-4102-9675-C12E8C9D4CC0}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {BA62FF5E-08A6-4102-9675-C12E8C9D4CC0}.Release|Win32.ActiveCfg = Release|Win32
+ {BA62FF5E-08A6-4102-9675-C12E8C9D4CC0}.Release|Win32.Build.0 = Release|Win32
+ {D314F1B3-9299-4866-8362-08BF811B0FA3}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {D314F1B3-9299-4866-8362-08BF811B0FA3}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {D314F1B3-9299-4866-8362-08BF811B0FA3}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D314F1B3-9299-4866-8362-08BF811B0FA3}.Debug|Win32.Build.0 = Debug|Win32
+ {D314F1B3-9299-4866-8362-08BF811B0FA3}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {D314F1B3-9299-4866-8362-08BF811B0FA3}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {D314F1B3-9299-4866-8362-08BF811B0FA3}.Release|Win32.ActiveCfg = Release|Win32
+ {D314F1B3-9299-4866-8362-08BF811B0FA3}.Release|Win32.Build.0 = Release|Win32
+ {34231B28-C51C-4C1C-AF07-C763668B1404}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {34231B28-C51C-4C1C-AF07-C763668B1404}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {34231B28-C51C-4C1C-AF07-C763668B1404}.Debug|Win32.ActiveCfg = Debug|Win32
+ {34231B28-C51C-4C1C-AF07-C763668B1404}.Debug|Win32.Build.0 = Debug|Win32
+ {34231B28-C51C-4C1C-AF07-C763668B1404}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {34231B28-C51C-4C1C-AF07-C763668B1404}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {34231B28-C51C-4C1C-AF07-C763668B1404}.Release|Win32.ActiveCfg = Release|Win32
+ {34231B28-C51C-4C1C-AF07-C763668B1404}.Release|Win32.Build.0 = Release|Win32
+ {5AEA4BF6-27CD-47FC-9370-D87771CFA196}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {5AEA4BF6-27CD-47FC-9370-D87771CFA196}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {5AEA4BF6-27CD-47FC-9370-D87771CFA196}.Debug|Win32.ActiveCfg = Debug|Win32
+ {5AEA4BF6-27CD-47FC-9370-D87771CFA196}.Debug|Win32.Build.0 = Debug|Win32
+ {5AEA4BF6-27CD-47FC-9370-D87771CFA196}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {5AEA4BF6-27CD-47FC-9370-D87771CFA196}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {5AEA4BF6-27CD-47FC-9370-D87771CFA196}.Release|Win32.ActiveCfg = Release|Win32
+ {5AEA4BF6-27CD-47FC-9370-D87771CFA196}.Release|Win32.Build.0 = Release|Win32
+ {0557BC3C-DE87-4127-BDAA-9BD9BDB13FB4}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {0557BC3C-DE87-4127-BDAA-9BD9BDB13FB4}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {0557BC3C-DE87-4127-BDAA-9BD9BDB13FB4}.Debug|Win32.ActiveCfg = Debug|Win32
+ {0557BC3C-DE87-4127-BDAA-9BD9BDB13FB4}.Debug|Win32.Build.0 = Debug|Win32
+ {0557BC3C-DE87-4127-BDAA-9BD9BDB13FB4}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {0557BC3C-DE87-4127-BDAA-9BD9BDB13FB4}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {0557BC3C-DE87-4127-BDAA-9BD9BDB13FB4}.Release|Win32.ActiveCfg = Release|Win32
+ {0557BC3C-DE87-4127-BDAA-9BD9BDB13FB4}.Release|Win32.Build.0 = Release|Win32
+ {64D81334-DE73-457D-8FC1-9492508A2663}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {64D81334-DE73-457D-8FC1-9492508A2663}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {64D81334-DE73-457D-8FC1-9492508A2663}.Debug|Win32.ActiveCfg = Debug|Win32
+ {64D81334-DE73-457D-8FC1-9492508A2663}.Debug|Win32.Build.0 = Debug|Win32
+ {64D81334-DE73-457D-8FC1-9492508A2663}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {64D81334-DE73-457D-8FC1-9492508A2663}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {64D81334-DE73-457D-8FC1-9492508A2663}.Release|Win32.ActiveCfg = Release|Win32
+ {64D81334-DE73-457D-8FC1-9492508A2663}.Release|Win32.Build.0 = Release|Win32
+ {3A932C39-AFA9-4BDC-B775-F71A426D04BF}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {3A932C39-AFA9-4BDC-B775-F71A426D04BF}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {3A932C39-AFA9-4BDC-B775-F71A426D04BF}.Debug|Win32.ActiveCfg = Debug|Win32
+ {3A932C39-AFA9-4BDC-B775-F71A426D04BF}.Debug|Win32.Build.0 = Debug|Win32
+ {3A932C39-AFA9-4BDC-B775-F71A426D04BF}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {3A932C39-AFA9-4BDC-B775-F71A426D04BF}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {3A932C39-AFA9-4BDC-B775-F71A426D04BF}.Release|Win32.ActiveCfg = Release|Win32
+ {3A932C39-AFA9-4BDC-B775-F71A426D04BF}.Release|Win32.Build.0 = Release|Win32
+ {0D54A5C4-B78B-41A2-BF8A-5DA48AC90495}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {0D54A5C4-B78B-41A2-BF8A-5DA48AC90495}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {0D54A5C4-B78B-41A2-BF8A-5DA48AC90495}.Debug|Win32.ActiveCfg = Debug|Win32
+ {0D54A5C4-B78B-41A2-BF8A-5DA48AC90495}.Debug|Win32.Build.0 = Debug|Win32
+ {0D54A5C4-B78B-41A2-BF8A-5DA48AC90495}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {0D54A5C4-B78B-41A2-BF8A-5DA48AC90495}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {0D54A5C4-B78B-41A2-BF8A-5DA48AC90495}.Release|Win32.ActiveCfg = Release|Win32
+ {0D54A5C4-B78B-41A2-BF8A-5DA48AC90495}.Release|Win32.Build.0 = Release|Win32
+ {228DD844-9926-420E-B193-6973BF2A4D0B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {228DD844-9926-420E-B193-6973BF2A4D0B}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {228DD844-9926-420E-B193-6973BF2A4D0B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {228DD844-9926-420E-B193-6973BF2A4D0B}.Debug|Win32.Build.0 = Debug|Win32
+ {228DD844-9926-420E-B193-6973BF2A4D0B}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {228DD844-9926-420E-B193-6973BF2A4D0B}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {228DD844-9926-420E-B193-6973BF2A4D0B}.Release|Win32.ActiveCfg = Release|Win32
+ {228DD844-9926-420E-B193-6973BF2A4D0B}.Release|Win32.Build.0 = Release|Win32
+ {CE1426F6-7D2B-4574-9929-58387BF7B05F}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {CE1426F6-7D2B-4574-9929-58387BF7B05F}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {CE1426F6-7D2B-4574-9929-58387BF7B05F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {CE1426F6-7D2B-4574-9929-58387BF7B05F}.Debug|Win32.Build.0 = Debug|Win32
+ {CE1426F6-7D2B-4574-9929-58387BF7B05F}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {CE1426F6-7D2B-4574-9929-58387BF7B05F}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {CE1426F6-7D2B-4574-9929-58387BF7B05F}.Release|Win32.ActiveCfg = Release|Win32
+ {CE1426F6-7D2B-4574-9929-58387BF7B05F}.Release|Win32.Build.0 = Release|Win32
{AFF332BF-AF3D-4D35-86FC-42A727F01D36}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{AFF332BF-AF3D-4D35-86FC-42A727F01D36}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{AFF332BF-AF3D-4D35-86FC-42A727F01D36}.Debug|Win32.ActiveCfg = Debug|Win32
@@ -2436,22 +2335,22 @@ Global
{AFF332BF-AF3D-4D35-86FC-42A727F01D36}.Release|Mixed Platforms.Build.0 = Release|Win32
{AFF332BF-AF3D-4D35-86FC-42A727F01D36}.Release|Win32.ActiveCfg = Release|Win32
{AFF332BF-AF3D-4D35-86FC-42A727F01D36}.Release|Win32.Build.0 = Release|Win32
- {B0D5BD91-6153-4CA6-BC2F-4E3BD43E5DB7}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {B0D5BD91-6153-4CA6-BC2F-4E3BD43E5DB7}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {B0D5BD91-6153-4CA6-BC2F-4E3BD43E5DB7}.Debug|Win32.ActiveCfg = Debug|Win32
- {B0D5BD91-6153-4CA6-BC2F-4E3BD43E5DB7}.Debug|Win32.Build.0 = Debug|Win32
- {B0D5BD91-6153-4CA6-BC2F-4E3BD43E5DB7}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {B0D5BD91-6153-4CA6-BC2F-4E3BD43E5DB7}.Release|Mixed Platforms.Build.0 = Release|Win32
- {B0D5BD91-6153-4CA6-BC2F-4E3BD43E5DB7}.Release|Win32.ActiveCfg = Release|Win32
- {B0D5BD91-6153-4CA6-BC2F-4E3BD43E5DB7}.Release|Win32.Build.0 = Release|Win32
- {B0EE0599-2913-46A0-A847-A3EC813658D3}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {B0EE0599-2913-46A0-A847-A3EC813658D3}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {B0EE0599-2913-46A0-A847-A3EC813658D3}.Debug|Win32.ActiveCfg = Debug|Win32
- {B0EE0599-2913-46A0-A847-A3EC813658D3}.Debug|Win32.Build.0 = Debug|Win32
- {B0EE0599-2913-46A0-A847-A3EC813658D3}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {B0EE0599-2913-46A0-A847-A3EC813658D3}.Release|Mixed Platforms.Build.0 = Release|Win32
- {B0EE0599-2913-46A0-A847-A3EC813658D3}.Release|Win32.ActiveCfg = Release|Win32
- {B0EE0599-2913-46A0-A847-A3EC813658D3}.Release|Win32.Build.0 = Release|Win32
+ {E3DF045F-2174-4685-9CF7-0630A79F324B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {E3DF045F-2174-4685-9CF7-0630A79F324B}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {E3DF045F-2174-4685-9CF7-0630A79F324B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E3DF045F-2174-4685-9CF7-0630A79F324B}.Debug|Win32.Build.0 = Debug|Win32
+ {E3DF045F-2174-4685-9CF7-0630A79F324B}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {E3DF045F-2174-4685-9CF7-0630A79F324B}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {E3DF045F-2174-4685-9CF7-0630A79F324B}.Release|Win32.ActiveCfg = Release|Win32
+ {E3DF045F-2174-4685-9CF7-0630A79F324B}.Release|Win32.Build.0 = Release|Win32
+ {275F2993-EE9B-4E00-9C85-10A182FD423A}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {275F2993-EE9B-4E00-9C85-10A182FD423A}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {275F2993-EE9B-4E00-9C85-10A182FD423A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {275F2993-EE9B-4E00-9C85-10A182FD423A}.Debug|Win32.Build.0 = Debug|Win32
+ {275F2993-EE9B-4E00-9C85-10A182FD423A}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {275F2993-EE9B-4E00-9C85-10A182FD423A}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {275F2993-EE9B-4E00-9C85-10A182FD423A}.Release|Win32.ActiveCfg = Release|Win32
+ {275F2993-EE9B-4E00-9C85-10A182FD423A}.Release|Win32.Build.0 = Release|Win32
{B2D715CE-4CBB-415A-A032-E700C90ADF91}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{B2D715CE-4CBB-415A-A032-E700C90ADF91}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{B2D715CE-4CBB-415A-A032-E700C90ADF91}.Debug|Win32.ActiveCfg = Debug|Win32
@@ -2460,6 +2359,38 @@ Global
{B2D715CE-4CBB-415A-A032-E700C90ADF91}.Release|Mixed Platforms.Build.0 = Release|Win32
{B2D715CE-4CBB-415A-A032-E700C90ADF91}.Release|Win32.ActiveCfg = Release|Win32
{B2D715CE-4CBB-415A-A032-E700C90ADF91}.Release|Win32.Build.0 = Release|Win32
+ {32167995-4014-4E4C-983B-F7E17C24EB25}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {32167995-4014-4E4C-983B-F7E17C24EB25}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {32167995-4014-4E4C-983B-F7E17C24EB25}.Debug|Win32.ActiveCfg = Debug|Win32
+ {32167995-4014-4E4C-983B-F7E17C24EB25}.Debug|Win32.Build.0 = Debug|Win32
+ {32167995-4014-4E4C-983B-F7E17C24EB25}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {32167995-4014-4E4C-983B-F7E17C24EB25}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {32167995-4014-4E4C-983B-F7E17C24EB25}.Release|Win32.ActiveCfg = Release|Win32
+ {32167995-4014-4E4C-983B-F7E17C24EB25}.Release|Win32.Build.0 = Release|Win32
+ {80E37CB5-059D-4F4B-AEF6-08265468D368}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {80E37CB5-059D-4F4B-AEF6-08265468D368}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {80E37CB5-059D-4F4B-AEF6-08265468D368}.Debug|Win32.ActiveCfg = Debug|Win32
+ {80E37CB5-059D-4F4B-AEF6-08265468D368}.Debug|Win32.Build.0 = Debug|Win32
+ {80E37CB5-059D-4F4B-AEF6-08265468D368}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {80E37CB5-059D-4F4B-AEF6-08265468D368}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {80E37CB5-059D-4F4B-AEF6-08265468D368}.Release|Win32.ActiveCfg = Release|Win32
+ {80E37CB5-059D-4F4B-AEF6-08265468D368}.Release|Win32.Build.0 = Release|Win32
+ {A5C5D801-4026-49F2-BBF1-250941855306}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {A5C5D801-4026-49F2-BBF1-250941855306}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {A5C5D801-4026-49F2-BBF1-250941855306}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A5C5D801-4026-49F2-BBF1-250941855306}.Debug|Win32.Build.0 = Debug|Win32
+ {A5C5D801-4026-49F2-BBF1-250941855306}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {A5C5D801-4026-49F2-BBF1-250941855306}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {A5C5D801-4026-49F2-BBF1-250941855306}.Release|Win32.ActiveCfg = Release|Win32
+ {A5C5D801-4026-49F2-BBF1-250941855306}.Release|Win32.Build.0 = Release|Win32
+ {63011A7B-CE4D-4DF1-B5DA-1B133C14A2E8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {63011A7B-CE4D-4DF1-B5DA-1B133C14A2E8}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {63011A7B-CE4D-4DF1-B5DA-1B133C14A2E8}.Debug|Win32.ActiveCfg = Debug|Win32
+ {63011A7B-CE4D-4DF1-B5DA-1B133C14A2E8}.Debug|Win32.Build.0 = Debug|Win32
+ {63011A7B-CE4D-4DF1-B5DA-1B133C14A2E8}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {63011A7B-CE4D-4DF1-B5DA-1B133C14A2E8}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {63011A7B-CE4D-4DF1-B5DA-1B133C14A2E8}.Release|Win32.ActiveCfg = Release|Win32
+ {63011A7B-CE4D-4DF1-B5DA-1B133C14A2E8}.Release|Win32.Build.0 = Release|Win32
{B30B0E1F-1CE9-4DEF-A752-7498FD709C1F}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{B30B0E1F-1CE9-4DEF-A752-7498FD709C1F}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{B30B0E1F-1CE9-4DEF-A752-7498FD709C1F}.Debug|Win32.ActiveCfg = Debug|Win32
@@ -2468,70 +2399,134 @@ Global
{B30B0E1F-1CE9-4DEF-A752-7498FD709C1F}.Release|Mixed Platforms.Build.0 = Release|Win32
{B30B0E1F-1CE9-4DEF-A752-7498FD709C1F}.Release|Win32.ActiveCfg = Release|Win32
{B30B0E1F-1CE9-4DEF-A752-7498FD709C1F}.Release|Win32.Build.0 = Release|Win32
- {B55CA863-B374-4BAF-95AC-539E4FA4C90C}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {B55CA863-B374-4BAF-95AC-539E4FA4C90C}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {B55CA863-B374-4BAF-95AC-539E4FA4C90C}.Debug|Win32.ActiveCfg = Debug|Win32
- {B55CA863-B374-4BAF-95AC-539E4FA4C90C}.Debug|Win32.Build.0 = Debug|Win32
- {B55CA863-B374-4BAF-95AC-539E4FA4C90C}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {B55CA863-B374-4BAF-95AC-539E4FA4C90C}.Release|Mixed Platforms.Build.0 = Release|Win32
- {B55CA863-B374-4BAF-95AC-539E4FA4C90C}.Release|Win32.ActiveCfg = Release|Win32
- {B55CA863-B374-4BAF-95AC-539E4FA4C90C}.Release|Win32.Build.0 = Release|Win32
- {B64B396B-8EF1-4B6B-A07E-48D40EB961AB}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {B64B396B-8EF1-4B6B-A07E-48D40EB961AB}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {B64B396B-8EF1-4B6B-A07E-48D40EB961AB}.Debug|Win32.ActiveCfg = Debug|Win32
- {B64B396B-8EF1-4B6B-A07E-48D40EB961AB}.Debug|Win32.Build.0 = Debug|Win32
- {B64B396B-8EF1-4B6B-A07E-48D40EB961AB}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {B64B396B-8EF1-4B6B-A07E-48D40EB961AB}.Release|Mixed Platforms.Build.0 = Release|Win32
- {B64B396B-8EF1-4B6B-A07E-48D40EB961AB}.Release|Win32.ActiveCfg = Release|Win32
- {B64B396B-8EF1-4B6B-A07E-48D40EB961AB}.Release|Win32.Build.0 = Release|Win32
- {B802A2FE-E4E2-4F5A-905A-D5128875C954}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {B802A2FE-E4E2-4F5A-905A-D5128875C954}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {B802A2FE-E4E2-4F5A-905A-D5128875C954}.Debug|Win32.ActiveCfg = Debug|Win32
- {B802A2FE-E4E2-4F5A-905A-D5128875C954}.Debug|Win32.Build.0 = Debug|Win32
- {B802A2FE-E4E2-4F5A-905A-D5128875C954}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {B802A2FE-E4E2-4F5A-905A-D5128875C954}.Release|Mixed Platforms.Build.0 = Release|Win32
- {B802A2FE-E4E2-4F5A-905A-D5128875C954}.Release|Win32.ActiveCfg = Release|Win32
- {B802A2FE-E4E2-4F5A-905A-D5128875C954}.Release|Win32.Build.0 = Release|Win32
- {B84553C8-5676-427B-B3E4-23DDDC4DBC7B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {B84553C8-5676-427B-B3E4-23DDDC4DBC7B}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {B84553C8-5676-427B-B3E4-23DDDC4DBC7B}.Debug|Win32.ActiveCfg = Debug|Win32
- {B84553C8-5676-427B-B3E4-23DDDC4DBC7B}.Debug|Win32.Build.0 = Debug|Win32
- {B84553C8-5676-427B-B3E4-23DDDC4DBC7B}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {B84553C8-5676-427B-B3E4-23DDDC4DBC7B}.Release|Mixed Platforms.Build.0 = Release|Win32
- {B84553C8-5676-427B-B3E4-23DDDC4DBC7B}.Release|Win32.ActiveCfg = Release|Win32
- {B84553C8-5676-427B-B3E4-23DDDC4DBC7B}.Release|Win32.Build.0 = Release|Win32
- {B92AE829-E1CD-4781-824A-DCB1603A1672}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {B92AE829-E1CD-4781-824A-DCB1603A1672}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {B92AE829-E1CD-4781-824A-DCB1603A1672}.Debug|Win32.ActiveCfg = Debug|Win32
- {B92AE829-E1CD-4781-824A-DCB1603A1672}.Debug|Win32.Build.0 = Debug|Win32
- {B92AE829-E1CD-4781-824A-DCB1603A1672}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {B92AE829-E1CD-4781-824A-DCB1603A1672}.Release|Mixed Platforms.Build.0 = Release|Win32
- {B92AE829-E1CD-4781-824A-DCB1603A1672}.Release|Win32.ActiveCfg = Release|Win32
- {B92AE829-E1CD-4781-824A-DCB1603A1672}.Release|Win32.Build.0 = Release|Win32
- {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE}.Debug|Win32.ActiveCfg = Debug|Win32
- {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE}.Debug|Win32.Build.0 = Debug|Win32
- {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE}.Release|Mixed Platforms.Build.0 = Release|Win32
- {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE}.Release|Win32.ActiveCfg = Release|Win32
- {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE}.Release|Win32.Build.0 = Release|Win32
- {BA62FF5E-08A6-4102-9675-C12E8C9D4CC0}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {BA62FF5E-08A6-4102-9675-C12E8C9D4CC0}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {BA62FF5E-08A6-4102-9675-C12E8C9D4CC0}.Debug|Win32.ActiveCfg = Debug|Win32
- {BA62FF5E-08A6-4102-9675-C12E8C9D4CC0}.Debug|Win32.Build.0 = Debug|Win32
- {BA62FF5E-08A6-4102-9675-C12E8C9D4CC0}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {BA62FF5E-08A6-4102-9675-C12E8C9D4CC0}.Release|Mixed Platforms.Build.0 = Release|Win32
- {BA62FF5E-08A6-4102-9675-C12E8C9D4CC0}.Release|Win32.ActiveCfg = Release|Win32
- {BA62FF5E-08A6-4102-9675-C12E8C9D4CC0}.Release|Win32.Build.0 = Release|Win32
- {BE6D5659-A8D5-4890-A42C-090DD10EF62C}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {BE6D5659-A8D5-4890-A42C-090DD10EF62C}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {BE6D5659-A8D5-4890-A42C-090DD10EF62C}.Debug|Win32.ActiveCfg = Debug|Win32
- {BE6D5659-A8D5-4890-A42C-090DD10EF62C}.Debug|Win32.Build.0 = Debug|Win32
- {BE6D5659-A8D5-4890-A42C-090DD10EF62C}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {BE6D5659-A8D5-4890-A42C-090DD10EF62C}.Release|Mixed Platforms.Build.0 = Release|Win32
- {BE6D5659-A8D5-4890-A42C-090DD10EF62C}.Release|Win32.ActiveCfg = Release|Win32
- {BE6D5659-A8D5-4890-A42C-090DD10EF62C}.Release|Win32.Build.0 = Release|Win32
+ {9F53807E-9382-47BD-8371-E5D04F517E9C}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {9F53807E-9382-47BD-8371-E5D04F517E9C}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {9F53807E-9382-47BD-8371-E5D04F517E9C}.Debug|Win32.ActiveCfg = Debug|Win32
+ {9F53807E-9382-47BD-8371-E5D04F517E9C}.Debug|Win32.Build.0 = Debug|Win32
+ {9F53807E-9382-47BD-8371-E5D04F517E9C}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {9F53807E-9382-47BD-8371-E5D04F517E9C}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {9F53807E-9382-47BD-8371-E5D04F517E9C}.Release|Win32.ActiveCfg = Release|Win32
+ {9F53807E-9382-47BD-8371-E5D04F517E9C}.Release|Win32.Build.0 = Release|Win32
+ {2F914112-2657-49EC-8EA6-3BA63340DE27}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {2F914112-2657-49EC-8EA6-3BA63340DE27}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {2F914112-2657-49EC-8EA6-3BA63340DE27}.Debug|Win32.ActiveCfg = Debug|Win32
+ {2F914112-2657-49EC-8EA6-3BA63340DE27}.Debug|Win32.Build.0 = Debug|Win32
+ {2F914112-2657-49EC-8EA6-3BA63340DE27}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {2F914112-2657-49EC-8EA6-3BA63340DE27}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {2F914112-2657-49EC-8EA6-3BA63340DE27}.Release|Win32.ActiveCfg = Release|Win32
+ {2F914112-2657-49EC-8EA6-3BA63340DE27}.Release|Win32.Build.0 = Release|Win32
+ {0A13F602-B497-4BC1-ABD8-03CA8E95B2AF}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {0A13F602-B497-4BC1-ABD8-03CA8E95B2AF}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {0A13F602-B497-4BC1-ABD8-03CA8E95B2AF}.Debug|Win32.ActiveCfg = Debug|Win32
+ {0A13F602-B497-4BC1-ABD8-03CA8E95B2AF}.Debug|Win32.Build.0 = Debug|Win32
+ {0A13F602-B497-4BC1-ABD8-03CA8E95B2AF}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {0A13F602-B497-4BC1-ABD8-03CA8E95B2AF}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {0A13F602-B497-4BC1-ABD8-03CA8E95B2AF}.Release|Win32.ActiveCfg = Release|Win32
+ {0A13F602-B497-4BC1-ABD8-03CA8E95B2AF}.Release|Win32.Build.0 = Release|Win32
+ {C70D3509-57C4-4326-90C1-2EC0AE34848D}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {C70D3509-57C4-4326-90C1-2EC0AE34848D}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {C70D3509-57C4-4326-90C1-2EC0AE34848D}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C70D3509-57C4-4326-90C1-2EC0AE34848D}.Debug|Win32.Build.0 = Debug|Win32
+ {C70D3509-57C4-4326-90C1-2EC0AE34848D}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {C70D3509-57C4-4326-90C1-2EC0AE34848D}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {C70D3509-57C4-4326-90C1-2EC0AE34848D}.Release|Win32.ActiveCfg = Release|Win32
+ {C70D3509-57C4-4326-90C1-2EC0AE34848D}.Release|Win32.Build.0 = Release|Win32
+ {7D456640-3619-4D23-A56D-E0084400CCBF}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {7D456640-3619-4D23-A56D-E0084400CCBF}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {7D456640-3619-4D23-A56D-E0084400CCBF}.Debug|Win32.ActiveCfg = Debug|Win32
+ {7D456640-3619-4D23-A56D-E0084400CCBF}.Debug|Win32.Build.0 = Debug|Win32
+ {7D456640-3619-4D23-A56D-E0084400CCBF}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {7D456640-3619-4D23-A56D-E0084400CCBF}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {7D456640-3619-4D23-A56D-E0084400CCBF}.Release|Win32.ActiveCfg = Release|Win32
+ {7D456640-3619-4D23-A56D-E0084400CCBF}.Release|Win32.Build.0 = Release|Win32
+ {82F5BFE5-FDCE-47D4-8B38-BEEBED561681}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {82F5BFE5-FDCE-47D4-8B38-BEEBED561681}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {82F5BFE5-FDCE-47D4-8B38-BEEBED561681}.Debug|Win32.ActiveCfg = Debug|Win32
+ {82F5BFE5-FDCE-47D4-8B38-BEEBED561681}.Debug|Win32.Build.0 = Debug|Win32
+ {82F5BFE5-FDCE-47D4-8B38-BEEBED561681}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {82F5BFE5-FDCE-47D4-8B38-BEEBED561681}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {82F5BFE5-FDCE-47D4-8B38-BEEBED561681}.Release|Win32.ActiveCfg = Release|Win32
+ {82F5BFE5-FDCE-47D4-8B38-BEEBED561681}.Release|Win32.Build.0 = Release|Win32
+ {C2A444C2-9D74-4AD7-AE7C-04F5EDA17060}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {C2A444C2-9D74-4AD7-AE7C-04F5EDA17060}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {C2A444C2-9D74-4AD7-AE7C-04F5EDA17060}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C2A444C2-9D74-4AD7-AE7C-04F5EDA17060}.Debug|Win32.Build.0 = Debug|Win32
+ {C2A444C2-9D74-4AD7-AE7C-04F5EDA17060}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {C2A444C2-9D74-4AD7-AE7C-04F5EDA17060}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {C2A444C2-9D74-4AD7-AE7C-04F5EDA17060}.Release|Win32.ActiveCfg = Release|Win32
+ {C2A444C2-9D74-4AD7-AE7C-04F5EDA17060}.Release|Win32.Build.0 = Release|Win32
+ {300C6A09-663E-48B6-8E07-A0D50CAF8F25}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {300C6A09-663E-48B6-8E07-A0D50CAF8F25}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {300C6A09-663E-48B6-8E07-A0D50CAF8F25}.Debug|Win32.ActiveCfg = Debug|Win32
+ {300C6A09-663E-48B6-8E07-A0D50CAF8F25}.Debug|Win32.Build.0 = Debug|Win32
+ {300C6A09-663E-48B6-8E07-A0D50CAF8F25}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {300C6A09-663E-48B6-8E07-A0D50CAF8F25}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {300C6A09-663E-48B6-8E07-A0D50CAF8F25}.Release|Win32.ActiveCfg = Release|Win32
+ {300C6A09-663E-48B6-8E07-A0D50CAF8F25}.Release|Win32.Build.0 = Release|Win32
+ {226B3533-1FF3-42F6-A8E3-C4DDBC955290}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {226B3533-1FF3-42F6-A8E3-C4DDBC955290}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {226B3533-1FF3-42F6-A8E3-C4DDBC955290}.Debug|Win32.ActiveCfg = Debug|Win32
+ {226B3533-1FF3-42F6-A8E3-C4DDBC955290}.Debug|Win32.Build.0 = Debug|Win32
+ {226B3533-1FF3-42F6-A8E3-C4DDBC955290}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {226B3533-1FF3-42F6-A8E3-C4DDBC955290}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {226B3533-1FF3-42F6-A8E3-C4DDBC955290}.Release|Win32.ActiveCfg = Release|Win32
+ {226B3533-1FF3-42F6-A8E3-C4DDBC955290}.Release|Win32.Build.0 = Release|Win32
+ {B0D5BD91-6153-4CA6-BC2F-4E3BD43E5DB7}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {B0D5BD91-6153-4CA6-BC2F-4E3BD43E5DB7}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {B0D5BD91-6153-4CA6-BC2F-4E3BD43E5DB7}.Debug|Win32.ActiveCfg = Debug|Win32
+ {B0D5BD91-6153-4CA6-BC2F-4E3BD43E5DB7}.Debug|Win32.Build.0 = Debug|Win32
+ {B0D5BD91-6153-4CA6-BC2F-4E3BD43E5DB7}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {B0D5BD91-6153-4CA6-BC2F-4E3BD43E5DB7}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {B0D5BD91-6153-4CA6-BC2F-4E3BD43E5DB7}.Release|Win32.ActiveCfg = Release|Win32
+ {B0D5BD91-6153-4CA6-BC2F-4E3BD43E5DB7}.Release|Win32.Build.0 = Release|Win32
+ {65C78BBB-8FCB-48E4-94C8-1F0F981929AF}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {65C78BBB-8FCB-48E4-94C8-1F0F981929AF}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {65C78BBB-8FCB-48E4-94C8-1F0F981929AF}.Debug|Win32.ActiveCfg = Debug|Win32
+ {65C78BBB-8FCB-48E4-94C8-1F0F981929AF}.Debug|Win32.Build.0 = Debug|Win32
+ {65C78BBB-8FCB-48E4-94C8-1F0F981929AF}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {65C78BBB-8FCB-48E4-94C8-1F0F981929AF}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {65C78BBB-8FCB-48E4-94C8-1F0F981929AF}.Release|Win32.ActiveCfg = Release|Win32
+ {65C78BBB-8FCB-48E4-94C8-1F0F981929AF}.Release|Win32.Build.0 = Release|Win32
+ {182D578D-2DAC-4BB7-AFEC-9A2855E56F94}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {182D578D-2DAC-4BB7-AFEC-9A2855E56F94}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {182D578D-2DAC-4BB7-AFEC-9A2855E56F94}.Debug|Win32.ActiveCfg = Debug|Win32
+ {182D578D-2DAC-4BB7-AFEC-9A2855E56F94}.Debug|Win32.Build.0 = Debug|Win32
+ {182D578D-2DAC-4BB7-AFEC-9A2855E56F94}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {182D578D-2DAC-4BB7-AFEC-9A2855E56F94}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {182D578D-2DAC-4BB7-AFEC-9A2855E56F94}.Release|Win32.ActiveCfg = Release|Win32
+ {182D578D-2DAC-4BB7-AFEC-9A2855E56F94}.Release|Win32.Build.0 = Release|Win32
+ {DA5C6FCB-FCFD-49B8-8DDA-8351638096DB}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {DA5C6FCB-FCFD-49B8-8DDA-8351638096DB}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {DA5C6FCB-FCFD-49B8-8DDA-8351638096DB}.Debug|Win32.ActiveCfg = Debug|Win32
+ {DA5C6FCB-FCFD-49B8-8DDA-8351638096DB}.Debug|Win32.Build.0 = Debug|Win32
+ {DA5C6FCB-FCFD-49B8-8DDA-8351638096DB}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {DA5C6FCB-FCFD-49B8-8DDA-8351638096DB}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {DA5C6FCB-FCFD-49B8-8DDA-8351638096DB}.Release|Win32.ActiveCfg = Release|Win32
+ {DA5C6FCB-FCFD-49B8-8DDA-8351638096DB}.Release|Win32.Build.0 = Release|Win32
+ {C0C7DA58-C90D-4BDE-AE44-588997339F5D}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {C0C7DA58-C90D-4BDE-AE44-588997339F5D}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {C0C7DA58-C90D-4BDE-AE44-588997339F5D}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C0C7DA58-C90D-4BDE-AE44-588997339F5D}.Debug|Win32.Build.0 = Debug|Win32
+ {C0C7DA58-C90D-4BDE-AE44-588997339F5D}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {C0C7DA58-C90D-4BDE-AE44-588997339F5D}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {C0C7DA58-C90D-4BDE-AE44-588997339F5D}.Release|Win32.ActiveCfg = Release|Win32
+ {C0C7DA58-C90D-4BDE-AE44-588997339F5D}.Release|Win32.Build.0 = Release|Win32
+ {89C1C190-A5D1-4EC4-BD6A-67FF2195C7CC}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {89C1C190-A5D1-4EC4-BD6A-67FF2195C7CC}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {89C1C190-A5D1-4EC4-BD6A-67FF2195C7CC}.Debug|Win32.ActiveCfg = Debug|Win32
+ {89C1C190-A5D1-4EC4-BD6A-67FF2195C7CC}.Debug|Win32.Build.0 = Debug|Win32
+ {89C1C190-A5D1-4EC4-BD6A-67FF2195C7CC}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {89C1C190-A5D1-4EC4-BD6A-67FF2195C7CC}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {89C1C190-A5D1-4EC4-BD6A-67FF2195C7CC}.Release|Win32.ActiveCfg = Release|Win32
+ {89C1C190-A5D1-4EC4-BD6A-67FF2195C7CC}.Release|Win32.Build.0 = Release|Win32
+ {3BD81303-4E14-4559-AA69-B30C3BAB08DD}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {3BD81303-4E14-4559-AA69-B30C3BAB08DD}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {3BD81303-4E14-4559-AA69-B30C3BAB08DD}.Debug|Win32.ActiveCfg = Debug|Win32
+ {3BD81303-4E14-4559-AA69-B30C3BAB08DD}.Debug|Win32.Build.0 = Debug|Win32
+ {3BD81303-4E14-4559-AA69-B30C3BAB08DD}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {3BD81303-4E14-4559-AA69-B30C3BAB08DD}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {3BD81303-4E14-4559-AA69-B30C3BAB08DD}.Release|Win32.ActiveCfg = Release|Win32
+ {3BD81303-4E14-4559-AA69-B30C3BAB08DD}.Release|Win32.Build.0 = Release|Win32
{BF4F447B-72B5-4059-BE1B-F94337B1F385}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{BF4F447B-72B5-4059-BE1B-F94337B1F385}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{BF4F447B-72B5-4059-BE1B-F94337B1F385}.Debug|Win32.ActiveCfg = Debug|Win32
@@ -2540,6 +2535,38 @@ Global
{BF4F447B-72B5-4059-BE1B-F94337B1F385}.Release|Mixed Platforms.Build.0 = Release|Win32
{BF4F447B-72B5-4059-BE1B-F94337B1F385}.Release|Win32.ActiveCfg = Release|Win32
{BF4F447B-72B5-4059-BE1B-F94337B1F385}.Release|Win32.Build.0 = Release|Win32
+ {FA660037-EB40-4A43-AA9D-9653C57F2789}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {FA660037-EB40-4A43-AA9D-9653C57F2789}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {FA660037-EB40-4A43-AA9D-9653C57F2789}.Debug|Win32.ActiveCfg = Debug|Win32
+ {FA660037-EB40-4A43-AA9D-9653C57F2789}.Debug|Win32.Build.0 = Debug|Win32
+ {FA660037-EB40-4A43-AA9D-9653C57F2789}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {FA660037-EB40-4A43-AA9D-9653C57F2789}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {FA660037-EB40-4A43-AA9D-9653C57F2789}.Release|Win32.ActiveCfg = Release|Win32
+ {FA660037-EB40-4A43-AA9D-9653C57F2789}.Release|Win32.Build.0 = Release|Win32
+ {A34770EA-A574-43E8-9327-F79C04770E98}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {A34770EA-A574-43E8-9327-F79C04770E98}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {A34770EA-A574-43E8-9327-F79C04770E98}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A34770EA-A574-43E8-9327-F79C04770E98}.Debug|Win32.Build.0 = Debug|Win32
+ {A34770EA-A574-43E8-9327-F79C04770E98}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {A34770EA-A574-43E8-9327-F79C04770E98}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {A34770EA-A574-43E8-9327-F79C04770E98}.Release|Win32.ActiveCfg = Release|Win32
+ {A34770EA-A574-43E8-9327-F79C04770E98}.Release|Win32.Build.0 = Release|Win32
+ {0026A376-C4F1-4575-A1BA-578C69F07013}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {0026A376-C4F1-4575-A1BA-578C69F07013}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {0026A376-C4F1-4575-A1BA-578C69F07013}.Debug|Win32.ActiveCfg = Debug|Win32
+ {0026A376-C4F1-4575-A1BA-578C69F07013}.Debug|Win32.Build.0 = Debug|Win32
+ {0026A376-C4F1-4575-A1BA-578C69F07013}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {0026A376-C4F1-4575-A1BA-578C69F07013}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {0026A376-C4F1-4575-A1BA-578C69F07013}.Release|Win32.ActiveCfg = Release|Win32
+ {0026A376-C4F1-4575-A1BA-578C69F07013}.Release|Win32.Build.0 = Release|Win32
+ {42ECD5EC-722F-41DE-B6B8-83764C8016DF}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {42ECD5EC-722F-41DE-B6B8-83764C8016DF}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {42ECD5EC-722F-41DE-B6B8-83764C8016DF}.Debug|Win32.ActiveCfg = Debug|Win32
+ {42ECD5EC-722F-41DE-B6B8-83764C8016DF}.Debug|Win32.Build.0 = Debug|Win32
+ {42ECD5EC-722F-41DE-B6B8-83764C8016DF}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {42ECD5EC-722F-41DE-B6B8-83764C8016DF}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {42ECD5EC-722F-41DE-B6B8-83764C8016DF}.Release|Win32.ActiveCfg = Release|Win32
+ {42ECD5EC-722F-41DE-B6B8-83764C8016DF}.Release|Win32.Build.0 = Release|Win32
{BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}.Debug|Win32.ActiveCfg = Debug|Win32
@@ -2548,86 +2575,94 @@ Global
{BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}.Release|Mixed Platforms.Build.0 = Release|Win32
{BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}.Release|Win32.ActiveCfg = Release|Win32
{BFE8E2A7-3B3B-43B0-A994-3058B852DB8B}.Release|Win32.Build.0 = Release|Win32
- {C0A7EE2C-2A6D-45BE-BA78-6D006FDF52D9}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {C0A7EE2C-2A6D-45BE-BA78-6D006FDF52D9}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {C0A7EE2C-2A6D-45BE-BA78-6D006FDF52D9}.Debug|Win32.ActiveCfg = Debug|Win32
- {C0A7EE2C-2A6D-45BE-BA78-6D006FDF52D9}.Debug|Win32.Build.0 = Debug|Win32
- {C0A7EE2C-2A6D-45BE-BA78-6D006FDF52D9}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {C0A7EE2C-2A6D-45BE-BA78-6D006FDF52D9}.Release|Mixed Platforms.Build.0 = Release|Win32
- {C0A7EE2C-2A6D-45BE-BA78-6D006FDF52D9}.Release|Win32.ActiveCfg = Release|Win32
- {C0A7EE2C-2A6D-45BE-BA78-6D006FDF52D9}.Release|Win32.Build.0 = Release|Win32
- {C0C7DA58-C90D-4BDE-AE44-588997339F5D}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {C0C7DA58-C90D-4BDE-AE44-588997339F5D}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {C0C7DA58-C90D-4BDE-AE44-588997339F5D}.Debug|Win32.ActiveCfg = Debug|Win32
- {C0C7DA58-C90D-4BDE-AE44-588997339F5D}.Debug|Win32.Build.0 = Debug|Win32
- {C0C7DA58-C90D-4BDE-AE44-588997339F5D}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {C0C7DA58-C90D-4BDE-AE44-588997339F5D}.Release|Mixed Platforms.Build.0 = Release|Win32
- {C0C7DA58-C90D-4BDE-AE44-588997339F5D}.Release|Win32.ActiveCfg = Release|Win32
- {C0C7DA58-C90D-4BDE-AE44-588997339F5D}.Release|Win32.Build.0 = Release|Win32
- {C2A444C2-9D74-4AD7-AE7C-04F5EDA17060}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {C2A444C2-9D74-4AD7-AE7C-04F5EDA17060}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {C2A444C2-9D74-4AD7-AE7C-04F5EDA17060}.Debug|Win32.ActiveCfg = Debug|Win32
- {C2A444C2-9D74-4AD7-AE7C-04F5EDA17060}.Debug|Win32.Build.0 = Debug|Win32
- {C2A444C2-9D74-4AD7-AE7C-04F5EDA17060}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {C2A444C2-9D74-4AD7-AE7C-04F5EDA17060}.Release|Mixed Platforms.Build.0 = Release|Win32
- {C2A444C2-9D74-4AD7-AE7C-04F5EDA17060}.Release|Win32.ActiveCfg = Release|Win32
- {C2A444C2-9D74-4AD7-AE7C-04F5EDA17060}.Release|Win32.Build.0 = Release|Win32
- {C564F145-9172-42C3-BFCB-6014CA97DBCD}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {C564F145-9172-42C3-BFCB-6014CA97DBCD}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {C564F145-9172-42C3-BFCB-6014CA97DBCD}.Debug|Win32.ActiveCfg = Debug|Win32
- {C564F145-9172-42C3-BFCB-6014CA97DBCD}.Debug|Win32.Build.0 = Debug|Win32
- {C564F145-9172-42C3-BFCB-6014CA97DBCD}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {C564F145-9172-42C3-BFCB-6014CA97DBCD}.Release|Mixed Platforms.Build.0 = Release|Win32
- {C564F145-9172-42C3-BFCB-6014CA97DBCD}.Release|Win32.ActiveCfg = Release|Win32
- {C564F145-9172-42C3-BFCB-6014CA97DBCD}.Release|Win32.Build.0 = Release|Win32
- {C564F145-9172-42C3-BFCB-60FDEA124321}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {C564F145-9172-42C3-BFCB-60FDEA124321}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {C564F145-9172-42C3-BFCB-60FDEA124321}.Debug|Win32.ActiveCfg = Debug|Win32
- {C564F145-9172-42C3-BFCB-60FDEA124321}.Debug|Win32.Build.0 = Debug|Win32
- {C564F145-9172-42C3-BFCB-60FDEA124321}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {C564F145-9172-42C3-BFCB-60FDEA124321}.Release|Mixed Platforms.Build.0 = Release|Win32
- {C564F145-9172-42C3-BFCB-60FDEA124321}.Release|Win32.ActiveCfg = Release|Win32
- {C564F145-9172-42C3-BFCB-60FDEA124321}.Release|Win32.Build.0 = Release|Win32
- {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09}.Debug|Win32.ActiveCfg = Debug|Win32
- {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09}.Debug|Win32.Build.0 = Debug|Win32
- {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09}.Release|Mixed Platforms.Build.0 = Release|Win32
- {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09}.Release|Win32.ActiveCfg = Release|Win32
- {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09}.Release|Win32.Build.0 = Release|Win32
- {C70D3509-57C4-4326-90C1-2EC0AE34848D}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {C70D3509-57C4-4326-90C1-2EC0AE34848D}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {C70D3509-57C4-4326-90C1-2EC0AE34848D}.Debug|Win32.ActiveCfg = Debug|Win32
- {C70D3509-57C4-4326-90C1-2EC0AE34848D}.Debug|Win32.Build.0 = Debug|Win32
- {C70D3509-57C4-4326-90C1-2EC0AE34848D}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {C70D3509-57C4-4326-90C1-2EC0AE34848D}.Release|Mixed Platforms.Build.0 = Release|Win32
- {C70D3509-57C4-4326-90C1-2EC0AE34848D}.Release|Win32.ActiveCfg = Release|Win32
- {C70D3509-57C4-4326-90C1-2EC0AE34848D}.Release|Win32.Build.0 = Release|Win32
- {C78D02D0-A366-4EC6-A248-AA8E64C4BA18}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {C78D02D0-A366-4EC6-A248-AA8E64C4BA18}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {C78D02D0-A366-4EC6-A248-AA8E64C4BA18}.Debug|Win32.ActiveCfg = Debug|Win32
- {C78D02D0-A366-4EC6-A248-AA8E64C4BA18}.Debug|Win32.Build.0 = Debug|Win32
- {C78D02D0-A366-4EC6-A248-AA8E64C4BA18}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {C78D02D0-A366-4EC6-A248-AA8E64C4BA18}.Release|Mixed Platforms.Build.0 = Release|Win32
- {C78D02D0-A366-4EC6-A248-AA8E64C4BA18}.Release|Win32.ActiveCfg = Release|Win32
- {C78D02D0-A366-4EC6-A248-AA8E64C4BA18}.Release|Win32.Build.0 = Release|Win32
- {C8C6183C-B03C-11DD-B471-DFD256D89593}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {C8C6183C-B03C-11DD-B471-DFD256D89593}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {C8C6183C-B03C-11DD-B471-DFD256D89593}.Debug|Win32.ActiveCfg = Debug|Win32
- {C8C6183C-B03C-11DD-B471-DFD256D89593}.Debug|Win32.Build.0 = Debug|Win32
- {C8C6183C-B03C-11DD-B471-DFD256D89593}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {C8C6183C-B03C-11DD-B471-DFD256D89593}.Release|Mixed Platforms.Build.0 = Release|Win32
- {C8C6183C-B03C-11DD-B471-DFD256D89593}.Release|Win32.ActiveCfg = Release|Win32
- {C8C6183C-B03C-11DD-B471-DFD256D89593}.Release|Win32.Build.0 = Release|Win32
- {C9E0BD1D-B175-4A91-8380-3FDC81FAB9D7}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {C9E0BD1D-B175-4A91-8380-3FDC81FAB9D7}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {C9E0BD1D-B175-4A91-8380-3FDC81FAB9D7}.Debug|Win32.ActiveCfg = Debug|Win32
- {C9E0BD1D-B175-4A91-8380-3FDC81FAB9D7}.Debug|Win32.Build.0 = Debug|Win32
- {C9E0BD1D-B175-4A91-8380-3FDC81FAB9D7}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {C9E0BD1D-B175-4A91-8380-3FDC81FAB9D7}.Release|Mixed Platforms.Build.0 = Release|Win32
- {C9E0BD1D-B175-4A91-8380-3FDC81FAB9D7}.Release|Win32.ActiveCfg = Release|Win32
- {C9E0BD1D-B175-4A91-8380-3FDC81FAB9D7}.Release|Win32.Build.0 = Release|Win32
+ {57823D8C-A317-4713-9125-2C91FDFD12D6}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {57823D8C-A317-4713-9125-2C91FDFD12D6}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {57823D8C-A317-4713-9125-2C91FDFD12D6}.Debug|Win32.ActiveCfg = Debug|Win32
+ {57823D8C-A317-4713-9125-2C91FDFD12D6}.Debug|Win32.Build.0 = Debug|Win32
+ {57823D8C-A317-4713-9125-2C91FDFD12D6}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {57823D8C-A317-4713-9125-2C91FDFD12D6}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {57823D8C-A317-4713-9125-2C91FDFD12D6}.Release|Win32.ActiveCfg = Release|Win32
+ {57823D8C-A317-4713-9125-2C91FDFD12D6}.Release|Win32.Build.0 = Release|Win32
+ {A5F831FD-9B9C-4FEF-9FBA-554817B734CE}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {A5F831FD-9B9C-4FEF-9FBA-554817B734CE}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {A5F831FD-9B9C-4FEF-9FBA-554817B734CE}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A5F831FD-9B9C-4FEF-9FBA-554817B734CE}.Debug|Win32.Build.0 = Debug|Win32
+ {A5F831FD-9B9C-4FEF-9FBA-554817B734CE}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {A5F831FD-9B9C-4FEF-9FBA-554817B734CE}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {A5F831FD-9B9C-4FEF-9FBA-554817B734CE}.Release|Win32.ActiveCfg = Release|Win32
+ {A5F831FD-9B9C-4FEF-9FBA-554817B734CE}.Release|Win32.Build.0 = Release|Win32
+ {EC8B7909-62AF-470D-A75D-E1D89C837142}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {EC8B7909-62AF-470D-A75D-E1D89C837142}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {EC8B7909-62AF-470D-A75D-E1D89C837142}.Debug|Win32.ActiveCfg = Debug|Win32
+ {EC8B7909-62AF-470D-A75D-E1D89C837142}.Debug|Win32.Build.0 = Debug|Win32
+ {EC8B7909-62AF-470D-A75D-E1D89C837142}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {EC8B7909-62AF-470D-A75D-E1D89C837142}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {EC8B7909-62AF-470D-A75D-E1D89C837142}.Release|Win32.ActiveCfg = Release|Win32
+ {EC8B7909-62AF-470D-A75D-E1D89C837142}.Release|Win32.Build.0 = Release|Win32
+ {21E22961-22BF-4493-BD3A-868F93DA5179}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {21E22961-22BF-4493-BD3A-868F93DA5179}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {21E22961-22BF-4493-BD3A-868F93DA5179}.Debug|Win32.ActiveCfg = Debug|Win32
+ {21E22961-22BF-4493-BD3A-868F93DA5179}.Debug|Win32.Build.0 = Debug|Win32
+ {21E22961-22BF-4493-BD3A-868F93DA5179}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {21E22961-22BF-4493-BD3A-868F93DA5179}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {21E22961-22BF-4493-BD3A-868F93DA5179}.Release|Win32.ActiveCfg = Release|Win32
+ {21E22961-22BF-4493-BD3A-868F93DA5179}.Release|Win32.Build.0 = Release|Win32
+ {865575D0-37E2-405E-8CBA-5F6C485B5A26}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {865575D0-37E2-405E-8CBA-5F6C485B5A26}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {865575D0-37E2-405E-8CBA-5F6C485B5A26}.Debug|Win32.ActiveCfg = Debug|Win32
+ {865575D0-37E2-405E-8CBA-5F6C485B5A26}.Debug|Win32.Build.0 = Debug|Win32
+ {865575D0-37E2-405E-8CBA-5F6C485B5A26}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {865575D0-37E2-405E-8CBA-5F6C485B5A26}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {865575D0-37E2-405E-8CBA-5F6C485B5A26}.Release|Win32.ActiveCfg = Release|Win32
+ {865575D0-37E2-405E-8CBA-5F6C485B5A26}.Release|Win32.Build.0 = Release|Win32
+ {FA537565-7B03-4FFC-AF15-F7A979B72E22}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {FA537565-7B03-4FFC-AF15-F7A979B72E22}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {FA537565-7B03-4FFC-AF15-F7A979B72E22}.Debug|Win32.ActiveCfg = Debug|Win32
+ {FA537565-7B03-4FFC-AF15-F7A979B72E22}.Debug|Win32.Build.0 = Debug|Win32
+ {FA537565-7B03-4FFC-AF15-F7A979B72E22}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {FA537565-7B03-4FFC-AF15-F7A979B72E22}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {FA537565-7B03-4FFC-AF15-F7A979B72E22}.Release|Win32.ActiveCfg = Release|Win32
+ {FA537565-7B03-4FFC-AF15-F7A979B72E22}.Release|Win32.Build.0 = Release|Win32
+ {31182CBE-9B7D-AAF2-65EE-F4D07012F4F3}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {31182CBE-9B7D-AAF2-65EE-F4D07012F4F3}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {31182CBE-9B7D-AAF2-65EE-F4D07012F4F3}.Debug|Win32.ActiveCfg = Debug|Win32
+ {31182CBE-9B7D-AAF2-65EE-F4D07012F4F3}.Debug|Win32.Build.0 = Debug|Win32
+ {31182CBE-9B7D-AAF2-65EE-F4D07012F4F3}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {31182CBE-9B7D-AAF2-65EE-F4D07012F4F3}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {31182CBE-9B7D-AAF2-65EE-F4D07012F4F3}.Release|Win32.ActiveCfg = Release|Win32
+ {31182CBE-9B7D-AAF2-65EE-F4D07012F4F3}.Release|Win32.Build.0 = Release|Win32
+ {F54ABC59-5C00-414A-A9BA-BAF26D1699F0}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {F54ABC59-5C00-414A-A9BA-BAF26D1699F0}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {F54ABC59-5C00-414A-A9BA-BAF26D1699F0}.Debug|Win32.ActiveCfg = Debug|Win32
+ {F54ABC59-5C00-414A-A9BA-BAF26D1699F0}.Debug|Win32.Build.0 = Debug|Win32
+ {F54ABC59-5C00-414A-A9BA-BAF26D1699F0}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {F54ABC59-5C00-414A-A9BA-BAF26D1699F0}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {F54ABC59-5C00-414A-A9BA-BAF26D1699F0}.Release|Win32.ActiveCfg = Release|Win32
+ {F54ABC59-5C00-414A-A9BA-BAF26D1699F0}.Release|Win32.Build.0 = Release|Win32
+ {3E6B24F6-9FA9-4066-859E-BF747FA3080A}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {3E6B24F6-9FA9-4066-859E-BF747FA3080A}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {3E6B24F6-9FA9-4066-859E-BF747FA3080A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {3E6B24F6-9FA9-4066-859E-BF747FA3080A}.Debug|Win32.Build.0 = Debug|Win32
+ {3E6B24F6-9FA9-4066-859E-BF747FA3080A}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {3E6B24F6-9FA9-4066-859E-BF747FA3080A}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {3E6B24F6-9FA9-4066-859E-BF747FA3080A}.Release|Win32.ActiveCfg = Release|Win32
+ {3E6B24F6-9FA9-4066-859E-BF747FA3080A}.Release|Win32.Build.0 = Release|Win32
+ {4B60E8B8-416F-40B2-8A54-F75970A21992}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {4B60E8B8-416F-40B2-8A54-F75970A21992}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {4B60E8B8-416F-40B2-8A54-F75970A21992}.Debug|Win32.ActiveCfg = Debug|Win32
+ {4B60E8B8-416F-40B2-8A54-F75970A21992}.Debug|Win32.Build.0 = Debug|Win32
+ {4B60E8B8-416F-40B2-8A54-F75970A21992}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {4B60E8B8-416F-40B2-8A54-F75970A21992}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {4B60E8B8-416F-40B2-8A54-F75970A21992}.Release|Win32.ActiveCfg = Release|Win32
+ {4B60E8B8-416F-40B2-8A54-F75970A21992}.Release|Win32.Build.0 = Release|Win32
+ {256DECCE-9886-4C21-96A5-EE47DF5E07E9}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {256DECCE-9886-4C21-96A5-EE47DF5E07E9}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {256DECCE-9886-4C21-96A5-EE47DF5E07E9}.Debug|Win32.ActiveCfg = Debug|Win32
+ {256DECCE-9886-4C21-96A5-EE47DF5E07E9}.Debug|Win32.Build.0 = Debug|Win32
+ {256DECCE-9886-4C21-96A5-EE47DF5E07E9}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {256DECCE-9886-4C21-96A5-EE47DF5E07E9}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {256DECCE-9886-4C21-96A5-EE47DF5E07E9}.Release|Win32.ActiveCfg = Release|Win32
+ {256DECCE-9886-4C21-96A5-EE47DF5E07E9}.Release|Win32.Build.0 = Release|Win32
{CAB69303-0F02-4C68-A12E-FFE55DB52526}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{CAB69303-0F02-4C68-A12E-FFE55DB52526}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{CAB69303-0F02-4C68-A12E-FFE55DB52526}.Debug|Win32.ActiveCfg = Debug|Win32
@@ -2636,14 +2671,38 @@ Global
{CAB69303-0F02-4C68-A12E-FFE55DB52526}.Release|Mixed Platforms.Build.0 = Release|Win32
{CAB69303-0F02-4C68-A12E-FFE55DB52526}.Release|Win32.ActiveCfg = Release|Win32
{CAB69303-0F02-4C68-A12E-FFE55DB52526}.Release|Win32.Build.0 = Release|Win32
- {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3}.Debug|Win32.ActiveCfg = Debug|Win32
- {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3}.Debug|Win32.Build.0 = Debug|Win32
- {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3}.Release|Mixed Platforms.Build.0 = Release|Win32
- {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3}.Release|Win32.ActiveCfg = Release|Win32
- {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3}.Release|Win32.Build.0 = Release|Win32
+ {A464166F-8507-49B4-9B02-5CB77C498B25}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {A464166F-8507-49B4-9B02-5CB77C498B25}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {A464166F-8507-49B4-9B02-5CB77C498B25}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A464166F-8507-49B4-9B02-5CB77C498B25}.Debug|Win32.Build.0 = Debug|Win32
+ {A464166F-8507-49B4-9B02-5CB77C498B25}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {A464166F-8507-49B4-9B02-5CB77C498B25}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {A464166F-8507-49B4-9B02-5CB77C498B25}.Release|Win32.ActiveCfg = Release|Win32
+ {A464166F-8507-49B4-9B02-5CB77C498B25}.Release|Win32.Build.0 = Release|Win32
+ {E07D267C-34C3-4DDB-8B41-94697808714A}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {E07D267C-34C3-4DDB-8B41-94697808714A}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {E07D267C-34C3-4DDB-8B41-94697808714A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E07D267C-34C3-4DDB-8B41-94697808714A}.Debug|Win32.Build.0 = Debug|Win32
+ {E07D267C-34C3-4DDB-8B41-94697808714A}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {E07D267C-34C3-4DDB-8B41-94697808714A}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {E07D267C-34C3-4DDB-8B41-94697808714A}.Release|Win32.ActiveCfg = Release|Win32
+ {E07D267C-34C3-4DDB-8B41-94697808714A}.Release|Win32.Build.0 = Release|Win32
+ {7A0BA0C5-0D90-49AE-919A-4BE096F69E4F}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {7A0BA0C5-0D90-49AE-919A-4BE096F69E4F}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {7A0BA0C5-0D90-49AE-919A-4BE096F69E4F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {7A0BA0C5-0D90-49AE-919A-4BE096F69E4F}.Debug|Win32.Build.0 = Debug|Win32
+ {7A0BA0C5-0D90-49AE-919A-4BE096F69E4F}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {7A0BA0C5-0D90-49AE-919A-4BE096F69E4F}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {7A0BA0C5-0D90-49AE-919A-4BE096F69E4F}.Release|Win32.ActiveCfg = Release|Win32
+ {7A0BA0C5-0D90-49AE-919A-4BE096F69E4F}.Release|Win32.Build.0 = Release|Win32
+ {9D13D9B8-6C28-42A7-935C-B769EBC55BAA}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {9D13D9B8-6C28-42A7-935C-B769EBC55BAA}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {9D13D9B8-6C28-42A7-935C-B769EBC55BAA}.Debug|Win32.ActiveCfg = Debug|Win32
+ {9D13D9B8-6C28-42A7-935C-B769EBC55BAA}.Debug|Win32.Build.0 = Debug|Win32
+ {9D13D9B8-6C28-42A7-935C-B769EBC55BAA}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {9D13D9B8-6C28-42A7-935C-B769EBC55BAA}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {9D13D9B8-6C28-42A7-935C-B769EBC55BAA}.Release|Win32.ActiveCfg = Release|Win32
+ {9D13D9B8-6C28-42A7-935C-B769EBC55BAA}.Release|Win32.Build.0 = Release|Win32
{CD2FD73A-6AAB-4886-B887-760D18E8B635}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{CD2FD73A-6AAB-4886-B887-760D18E8B635}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{CD2FD73A-6AAB-4886-B887-760D18E8B635}.Debug|Win32.ActiveCfg = Debug|Win32
@@ -2652,70 +2711,158 @@ Global
{CD2FD73A-6AAB-4886-B887-760D18E8B635}.Release|Mixed Platforms.Build.0 = Release|Win32
{CD2FD73A-6AAB-4886-B887-760D18E8B635}.Release|Win32.ActiveCfg = Release|Win32
{CD2FD73A-6AAB-4886-B887-760D18E8B635}.Release|Win32.Build.0 = Release|Win32
- {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}.Debug|Win32.ActiveCfg = Debug|Win32
- {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}.Debug|Win32.Build.0 = Debug|Win32
- {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}.Release|Mixed Platforms.Build.0 = Release|Win32
- {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}.Release|Win32.ActiveCfg = Release|Win32
- {CD9CA56E-4E94-444C-87D4-58CA1E6F300D}.Release|Win32.Build.0 = Release|Win32
- {CE1426F6-7D2B-4574-9929-58387BF7B05F}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {CE1426F6-7D2B-4574-9929-58387BF7B05F}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {CE1426F6-7D2B-4574-9929-58387BF7B05F}.Debug|Win32.ActiveCfg = Debug|Win32
- {CE1426F6-7D2B-4574-9929-58387BF7B05F}.Debug|Win32.Build.0 = Debug|Win32
- {CE1426F6-7D2B-4574-9929-58387BF7B05F}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {CE1426F6-7D2B-4574-9929-58387BF7B05F}.Release|Mixed Platforms.Build.0 = Release|Win32
- {CE1426F6-7D2B-4574-9929-58387BF7B05F}.Release|Win32.ActiveCfg = Release|Win32
- {CE1426F6-7D2B-4574-9929-58387BF7B05F}.Release|Win32.Build.0 = Release|Win32
- {D2250C20-3A94-4FB9-AF73-11BC5B73884B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {D2250C20-3A94-4FB9-AF73-11BC5B73884B}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {D2250C20-3A94-4FB9-AF73-11BC5B73884B}.Debug|Win32.ActiveCfg = Debug|Win32
- {D2250C20-3A94-4FB9-AF73-11BC5B73884B}.Debug|Win32.Build.0 = Debug|Win32
- {D2250C20-3A94-4FB9-AF73-11BC5B73884B}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {D2250C20-3A94-4FB9-AF73-11BC5B73884B}.Release|Mixed Platforms.Build.0 = Release|Win32
- {D2250C20-3A94-4FB9-AF73-11BC5B73884B}.Release|Win32.ActiveCfg = Release|Win32
- {D2250C20-3A94-4FB9-AF73-11BC5B73884B}.Release|Win32.Build.0 = Release|Win32
- {D314F1B3-9299-4866-8362-08BF811B0FA3}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {D314F1B3-9299-4866-8362-08BF811B0FA3}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {D314F1B3-9299-4866-8362-08BF811B0FA3}.Debug|Win32.ActiveCfg = Debug|Win32
- {D314F1B3-9299-4866-8362-08BF811B0FA3}.Debug|Win32.Build.0 = Debug|Win32
- {D314F1B3-9299-4866-8362-08BF811B0FA3}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {D314F1B3-9299-4866-8362-08BF811B0FA3}.Release|Mixed Platforms.Build.0 = Release|Win32
- {D314F1B3-9299-4866-8362-08BF811B0FA3}.Release|Win32.ActiveCfg = Release|Win32
- {D314F1B3-9299-4866-8362-08BF811B0FA3}.Release|Win32.Build.0 = Release|Win32
- {D3E6C0FD-54C7-4FF2-9AE1-72F2DAFD820C}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {D3E6C0FD-54C7-4FF2-9AE1-72F2DAFD820C}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {D3E6C0FD-54C7-4FF2-9AE1-72F2DAFD820C}.Debug|Win32.ActiveCfg = Debug|Win32
- {D3E6C0FD-54C7-4FF2-9AE1-72F2DAFD820C}.Debug|Win32.Build.0 = Debug|Win32
- {D3E6C0FD-54C7-4FF2-9AE1-72F2DAFD820C}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {D3E6C0FD-54C7-4FF2-9AE1-72F2DAFD820C}.Release|Mixed Platforms.Build.0 = Release|Win32
- {D3E6C0FD-54C7-4FF2-9AE1-72F2DAFD820C}.Release|Win32.ActiveCfg = Release|Win32
- {D3E6C0FD-54C7-4FF2-9AE1-72F2DAFD820C}.Release|Win32.Build.0 = Release|Win32
- {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E}.Debug|Win32.ActiveCfg = Debug|Win32
- {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E}.Debug|Win32.Build.0 = Debug|Win32
- {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E}.Release|Mixed Platforms.Build.0 = Release|Win32
- {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E}.Release|Win32.ActiveCfg = Release|Win32
- {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E}.Release|Win32.Build.0 = Release|Win32
- {D6047981-23AE-4623-9373-514FDAFAE60F}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {D6047981-23AE-4623-9373-514FDAFAE60F}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {D6047981-23AE-4623-9373-514FDAFAE60F}.Debug|Win32.ActiveCfg = Debug|Win32
- {D6047981-23AE-4623-9373-514FDAFAE60F}.Debug|Win32.Build.0 = Debug|Win32
- {D6047981-23AE-4623-9373-514FDAFAE60F}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {D6047981-23AE-4623-9373-514FDAFAE60F}.Release|Mixed Platforms.Build.0 = Release|Win32
- {D6047981-23AE-4623-9373-514FDAFAE60F}.Release|Win32.ActiveCfg = Release|Win32
- {D6047981-23AE-4623-9373-514FDAFAE60F}.Release|Win32.Build.0 = Release|Win32
- {D703D7A0-EDC1-4FE6-9E22-56154155B24E}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {D703D7A0-EDC1-4FE6-9E22-56154155B24E}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {D703D7A0-EDC1-4FE6-9E22-56154155B24E}.Debug|Win32.ActiveCfg = Debug|Win32
- {D703D7A0-EDC1-4FE6-9E22-56154155B24E}.Debug|Win32.Build.0 = Debug|Win32
- {D703D7A0-EDC1-4FE6-9E22-56154155B24E}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {D703D7A0-EDC1-4FE6-9E22-56154155B24E}.Release|Mixed Platforms.Build.0 = Release|Win32
- {D703D7A0-EDC1-4FE6-9E22-56154155B24E}.Release|Win32.ActiveCfg = Release|Win32
- {D703D7A0-EDC1-4FE6-9E22-56154155B24E}.Release|Win32.Build.0 = Release|Win32
+ {B802A2FE-E4E2-4F5A-905A-D5128875C954}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {B802A2FE-E4E2-4F5A-905A-D5128875C954}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {B802A2FE-E4E2-4F5A-905A-D5128875C954}.Debug|Win32.ActiveCfg = Debug|Win32
+ {B802A2FE-E4E2-4F5A-905A-D5128875C954}.Debug|Win32.Build.0 = Debug|Win32
+ {B802A2FE-E4E2-4F5A-905A-D5128875C954}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {B802A2FE-E4E2-4F5A-905A-D5128875C954}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {B802A2FE-E4E2-4F5A-905A-D5128875C954}.Release|Win32.ActiveCfg = Release|Win32
+ {B802A2FE-E4E2-4F5A-905A-D5128875C954}.Release|Win32.Build.0 = Release|Win32
+ {B64B396B-8EF1-4B6B-A07E-48D40EB961AB}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {B64B396B-8EF1-4B6B-A07E-48D40EB961AB}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {B64B396B-8EF1-4B6B-A07E-48D40EB961AB}.Debug|Win32.ActiveCfg = Debug|Win32
+ {B64B396B-8EF1-4B6B-A07E-48D40EB961AB}.Debug|Win32.Build.0 = Debug|Win32
+ {B64B396B-8EF1-4B6B-A07E-48D40EB961AB}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {B64B396B-8EF1-4B6B-A07E-48D40EB961AB}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {B64B396B-8EF1-4B6B-A07E-48D40EB961AB}.Release|Win32.ActiveCfg = Release|Win32
+ {B64B396B-8EF1-4B6B-A07E-48D40EB961AB}.Release|Win32.Build.0 = Release|Win32
+ {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Debug|Win32.ActiveCfg = Debug|Win32
+ {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Debug|Win32.Build.0 = Debug|Win32
+ {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Release|Win32.ActiveCfg = Release|Win32
+ {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Release|Win32.Build.0 = Release|Win32
+ {0B469837-3D46-484A-AFB3-C5A6C68730B9}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {0B469837-3D46-484A-AFB3-C5A6C68730B9}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {0B469837-3D46-484A-AFB3-C5A6C68730B9}.Debug|Win32.ActiveCfg = Debug|Win32
+ {0B469837-3D46-484A-AFB3-C5A6C68730B9}.Debug|Win32.Build.0 = Debug|Win32
+ {0B469837-3D46-484A-AFB3-C5A6C68730B9}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {0B469837-3D46-484A-AFB3-C5A6C68730B9}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {0B469837-3D46-484A-AFB3-C5A6C68730B9}.Release|Win32.ActiveCfg = Release|Win32
+ {0B469837-3D46-484A-AFB3-C5A6C68730B9}.Release|Win32.Build.0 = Release|Win32
+ {1444235E-0E97-4C80-A73E-EE73F3706C32}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {1444235E-0E97-4C80-A73E-EE73F3706C32}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {1444235E-0E97-4C80-A73E-EE73F3706C32}.Debug|Win32.ActiveCfg = Debug|Win32
+ {1444235E-0E97-4C80-A73E-EE73F3706C32}.Debug|Win32.Build.0 = Debug|Win32
+ {1444235E-0E97-4C80-A73E-EE73F3706C32}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {1444235E-0E97-4C80-A73E-EE73F3706C32}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {1444235E-0E97-4C80-A73E-EE73F3706C32}.Release|Win32.ActiveCfg = Release|Win32
+ {1444235E-0E97-4C80-A73E-EE73F3706C32}.Release|Win32.Build.0 = Release|Win32
+ {B0EE0599-2913-46A0-A847-A3EC813658D3}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {B0EE0599-2913-46A0-A847-A3EC813658D3}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {B0EE0599-2913-46A0-A847-A3EC813658D3}.Debug|Win32.ActiveCfg = Debug|Win32
+ {B0EE0599-2913-46A0-A847-A3EC813658D3}.Debug|Win32.Build.0 = Debug|Win32
+ {B0EE0599-2913-46A0-A847-A3EC813658D3}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {B0EE0599-2913-46A0-A847-A3EC813658D3}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {B0EE0599-2913-46A0-A847-A3EC813658D3}.Release|Win32.ActiveCfg = Release|Win32
+ {B0EE0599-2913-46A0-A847-A3EC813658D3}.Release|Win32.Build.0 = Release|Win32
+ {7D1EC571-687B-5D48-E259-C5BA78E717D0}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {7D1EC571-687B-5D48-E259-C5BA78E717D0}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {7D1EC571-687B-5D48-E259-C5BA78E717D0}.Debug|Win32.ActiveCfg = Debug|Win32
+ {7D1EC571-687B-5D48-E259-C5BA78E717D0}.Debug|Win32.Build.0 = Debug|Win32
+ {7D1EC571-687B-5D48-E259-C5BA78E717D0}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {7D1EC571-687B-5D48-E259-C5BA78E717D0}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {7D1EC571-687B-5D48-E259-C5BA78E717D0}.Release|Win32.ActiveCfg = Release|Win32
+ {7D1EC571-687B-5D48-E259-C5BA78E717D0}.Release|Win32.Build.0 = Release|Win32
+ {A763D879-02F0-B744-E6D5-E94C0197057C}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {A763D879-02F0-B744-E6D5-E94C0197057C}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {A763D879-02F0-B744-E6D5-E94C0197057C}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A763D879-02F0-B744-E6D5-E94C0197057C}.Debug|Win32.Build.0 = Debug|Win32
+ {A763D879-02F0-B744-E6D5-E94C0197057C}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {A763D879-02F0-B744-E6D5-E94C0197057C}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {A763D879-02F0-B744-E6D5-E94C0197057C}.Release|Win32.ActiveCfg = Release|Win32
+ {A763D879-02F0-B744-E6D5-E94C0197057C}.Release|Win32.Build.0 = Release|Win32
+ {9E5416B9-B91B-4029-93F4-102C1AD5CAF4}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {9E5416B9-B91B-4029-93F4-102C1AD5CAF4}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {9E5416B9-B91B-4029-93F4-102C1AD5CAF4}.Debug|Win32.ActiveCfg = Debug|Win32
+ {9E5416B9-B91B-4029-93F4-102C1AD5CAF4}.Debug|Win32.Build.0 = Debug|Win32
+ {9E5416B9-B91B-4029-93F4-102C1AD5CAF4}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {9E5416B9-B91B-4029-93F4-102C1AD5CAF4}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {9E5416B9-B91B-4029-93F4-102C1AD5CAF4}.Release|Win32.ActiveCfg = Release|Win32
+ {9E5416B9-B91B-4029-93F4-102C1AD5CAF4}.Release|Win32.Build.0 = Release|Win32
+ {8B2EE5D9-41BC-4AA2-A401-2DC143A05D2E}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {8B2EE5D9-41BC-4AA2-A401-2DC143A05D2E}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {8B2EE5D9-41BC-4AA2-A401-2DC143A05D2E}.Debug|Win32.ActiveCfg = Debug|Win32
+ {8B2EE5D9-41BC-4AA2-A401-2DC143A05D2E}.Debug|Win32.Build.0 = Debug|Win32
+ {8B2EE5D9-41BC-4AA2-A401-2DC143A05D2E}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {8B2EE5D9-41BC-4AA2-A401-2DC143A05D2E}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {8B2EE5D9-41BC-4AA2-A401-2DC143A05D2E}.Release|Win32.ActiveCfg = Release|Win32
+ {8B2EE5D9-41BC-4AA2-A401-2DC143A05D2E}.Release|Win32.Build.0 = Release|Win32
+ {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65}.Debug|Win32.ActiveCfg = Debug|Win32
+ {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65}.Debug|Win32.Build.0 = Debug|Win32
+ {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65}.Release|Win32.ActiveCfg = Release|Win32
+ {5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65}.Release|Win32.Build.0 = Release|Win32
+ {C78D02D0-A366-4EC6-A248-AA8E64C4BA18}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {C78D02D0-A366-4EC6-A248-AA8E64C4BA18}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {C78D02D0-A366-4EC6-A248-AA8E64C4BA18}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C78D02D0-A366-4EC6-A248-AA8E64C4BA18}.Debug|Win32.Build.0 = Debug|Win32
+ {C78D02D0-A366-4EC6-A248-AA8E64C4BA18}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {C78D02D0-A366-4EC6-A248-AA8E64C4BA18}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {C78D02D0-A366-4EC6-A248-AA8E64C4BA18}.Release|Win32.ActiveCfg = Release|Win32
+ {C78D02D0-A366-4EC6-A248-AA8E64C4BA18}.Release|Win32.Build.0 = Release|Win32
+ {F22022F0-2D3B-5610-4E80-C674A8E01C5A}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {F22022F0-2D3B-5610-4E80-C674A8E01C5A}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {F22022F0-2D3B-5610-4E80-C674A8E01C5A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {F22022F0-2D3B-5610-4E80-C674A8E01C5A}.Debug|Win32.Build.0 = Debug|Win32
+ {F22022F0-2D3B-5610-4E80-C674A8E01C5A}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {F22022F0-2D3B-5610-4E80-C674A8E01C5A}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {F22022F0-2D3B-5610-4E80-C674A8E01C5A}.Release|Win32.ActiveCfg = Release|Win32
+ {F22022F0-2D3B-5610-4E80-C674A8E01C5A}.Release|Win32.Build.0 = Release|Win32
+ {ED19720A-8F14-D3FC-9C6D-EEB5AE4D5BD7}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {ED19720A-8F14-D3FC-9C6D-EEB5AE4D5BD7}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {ED19720A-8F14-D3FC-9C6D-EEB5AE4D5BD7}.Debug|Win32.ActiveCfg = Debug|Win32
+ {ED19720A-8F14-D3FC-9C6D-EEB5AE4D5BD7}.Debug|Win32.Build.0 = Debug|Win32
+ {ED19720A-8F14-D3FC-9C6D-EEB5AE4D5BD7}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {ED19720A-8F14-D3FC-9C6D-EEB5AE4D5BD7}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {ED19720A-8F14-D3FC-9C6D-EEB5AE4D5BD7}.Release|Win32.ActiveCfg = Release|Win32
+ {ED19720A-8F14-D3FC-9C6D-EEB5AE4D5BD7}.Release|Win32.Build.0 = Release|Win32
+ {1846F110-8263-413F-9924-36F64DD8FE41}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {1846F110-8263-413F-9924-36F64DD8FE41}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {1846F110-8263-413F-9924-36F64DD8FE41}.Debug|Win32.ActiveCfg = Debug|Win32
+ {1846F110-8263-413F-9924-36F64DD8FE41}.Debug|Win32.Build.0 = Debug|Win32
+ {1846F110-8263-413F-9924-36F64DD8FE41}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {1846F110-8263-413F-9924-36F64DD8FE41}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {1846F110-8263-413F-9924-36F64DD8FE41}.Release|Win32.ActiveCfg = Release|Win32
+ {1846F110-8263-413F-9924-36F64DD8FE41}.Release|Win32.Build.0 = Release|Win32
+ {7EFD0C91-198E-4043-9E71-4A4C7879B929}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {7EFD0C91-198E-4043-9E71-4A4C7879B929}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {7EFD0C91-198E-4043-9E71-4A4C7879B929}.Debug|Win32.ActiveCfg = Debug|Win32
+ {7EFD0C91-198E-4043-9E71-4A4C7879B929}.Debug|Win32.Build.0 = Debug|Win32
+ {7EFD0C91-198E-4043-9E71-4A4C7879B929}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {7EFD0C91-198E-4043-9E71-4A4C7879B929}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {7EFD0C91-198E-4043-9E71-4A4C7879B929}.Release|Win32.ActiveCfg = Release|Win32
+ {7EFD0C91-198E-4043-9E71-4A4C7879B929}.Release|Win32.Build.0 = Release|Win32
+ {3E03D462-780D-4C4D-B22E-5E095E6CF110}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {3E03D462-780D-4C4D-B22E-5E095E6CF110}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {3E03D462-780D-4C4D-B22E-5E095E6CF110}.Debug|Win32.ActiveCfg = Debug|Win32
+ {3E03D462-780D-4C4D-B22E-5E095E6CF110}.Debug|Win32.Build.0 = Debug|Win32
+ {3E03D462-780D-4C4D-B22E-5E095E6CF110}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {3E03D462-780D-4C4D-B22E-5E095E6CF110}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {3E03D462-780D-4C4D-B22E-5E095E6CF110}.Release|Win32.ActiveCfg = Release|Win32
+ {3E03D462-780D-4C4D-B22E-5E095E6CF110}.Release|Win32.Build.0 = Release|Win32
+ {82BC22B5-1D58-28BA-8735-58B591E1D154}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {82BC22B5-1D58-28BA-8735-58B591E1D154}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {82BC22B5-1D58-28BA-8735-58B591E1D154}.Debug|Win32.ActiveCfg = Debug|Win32
+ {82BC22B5-1D58-28BA-8735-58B591E1D154}.Debug|Win32.Build.0 = Debug|Win32
+ {82BC22B5-1D58-28BA-8735-58B591E1D154}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {82BC22B5-1D58-28BA-8735-58B591E1D154}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {82BC22B5-1D58-28BA-8735-58B591E1D154}.Release|Win32.ActiveCfg = Release|Win32
+ {82BC22B5-1D58-28BA-8735-58B591E1D154}.Release|Win32.Build.0 = Release|Win32
+ {879286C0-3234-D14B-BB2C-32D4D1B809CE}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {879286C0-3234-D14B-BB2C-32D4D1B809CE}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {879286C0-3234-D14B-BB2C-32D4D1B809CE}.Debug|Win32.ActiveCfg = Debug|Win32
+ {879286C0-3234-D14B-BB2C-32D4D1B809CE}.Debug|Win32.Build.0 = Debug|Win32
+ {879286C0-3234-D14B-BB2C-32D4D1B809CE}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {879286C0-3234-D14B-BB2C-32D4D1B809CE}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {879286C0-3234-D14B-BB2C-32D4D1B809CE}.Release|Win32.ActiveCfg = Release|Win32
+ {879286C0-3234-D14B-BB2C-32D4D1B809CE}.Release|Win32.Build.0 = Release|Win32
{D7589D0D-304E-4589-85A4-153B7D84B07F}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{D7589D0D-304E-4589-85A4-153B7D84B07F}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{D7589D0D-304E-4589-85A4-153B7D84B07F}.Debug|Win32.ActiveCfg = Debug|Win32
@@ -2724,106 +2871,62 @@ Global
{D7589D0D-304E-4589-85A4-153B7D84B07F}.Release|Mixed Platforms.Build.0 = Release|Win32
{D7589D0D-304E-4589-85A4-153B7D84B07F}.Release|Win32.ActiveCfg = Release|Win32
{D7589D0D-304E-4589-85A4-153B7D84B07F}.Release|Win32.Build.0 = Release|Win32
- {D7A94F58-576A-45D9-A45F-EB87C63ABBB0}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {D7A94F58-576A-45D9-A45F-EB87C63ABBB0}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {D7A94F58-576A-45D9-A45F-EB87C63ABBB0}.Debug|Win32.ActiveCfg = Debug|Win32
- {D7A94F58-576A-45D9-A45F-EB87C63ABBB0}.Debug|Win32.Build.0 = Debug|Win32
- {D7A94F58-576A-45D9-A45F-EB87C63ABBB0}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {D7A94F58-576A-45D9-A45F-EB87C63ABBB0}.Release|Mixed Platforms.Build.0 = Release|Win32
- {D7A94F58-576A-45D9-A45F-EB87C63ABBB0}.Release|Win32.ActiveCfg = Release|Win32
- {D7A94F58-576A-45D9-A45F-EB87C63ABBB0}.Release|Win32.Build.0 = Release|Win32
- {D7ED06E8-6138-4CE3-A906-5EF1D9C804E0}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {D7ED06E8-6138-4CE3-A906-5EF1D9C804E0}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {D7ED06E8-6138-4CE3-A906-5EF1D9C804E0}.Debug|Win32.ActiveCfg = Debug|Win32
- {D7ED06E8-6138-4CE3-A906-5EF1D9C804E0}.Debug|Win32.Build.0 = Debug|Win32
- {D7ED06E8-6138-4CE3-A906-5EF1D9C804E0}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {D7ED06E8-6138-4CE3-A906-5EF1D9C804E0}.Release|Mixed Platforms.Build.0 = Release|Win32
- {D7ED06E8-6138-4CE3-A906-5EF1D9C804E0}.Release|Win32.ActiveCfg = Release|Win32
- {D7ED06E8-6138-4CE3-A906-5EF1D9C804E0}.Release|Win32.Build.0 = Release|Win32
- {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}.Debug|Win32.ActiveCfg = Debug|Win32
- {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}.Debug|Win32.Build.0 = Debug|Win32
- {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}.Release|Mixed Platforms.Build.0 = Release|Win32
- {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}.Release|Win32.ActiveCfg = Release|Win32
- {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28}.Release|Win32.Build.0 = Release|Win32
- {DA5C6FCB-FCFD-49B8-8DDA-8351638096DB}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {DA5C6FCB-FCFD-49B8-8DDA-8351638096DB}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {DA5C6FCB-FCFD-49B8-8DDA-8351638096DB}.Debug|Win32.ActiveCfg = Debug|Win32
- {DA5C6FCB-FCFD-49B8-8DDA-8351638096DB}.Debug|Win32.Build.0 = Debug|Win32
- {DA5C6FCB-FCFD-49B8-8DDA-8351638096DB}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {DA5C6FCB-FCFD-49B8-8DDA-8351638096DB}.Release|Mixed Platforms.Build.0 = Release|Win32
- {DA5C6FCB-FCFD-49B8-8DDA-8351638096DB}.Release|Win32.ActiveCfg = Release|Win32
- {DA5C6FCB-FCFD-49B8-8DDA-8351638096DB}.Release|Win32.Build.0 = Release|Win32
- {E07D267C-34C3-4DDB-8B41-94697808714A}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {E07D267C-34C3-4DDB-8B41-94697808714A}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {E07D267C-34C3-4DDB-8B41-94697808714A}.Debug|Win32.ActiveCfg = Debug|Win32
- {E07D267C-34C3-4DDB-8B41-94697808714A}.Debug|Win32.Build.0 = Debug|Win32
- {E07D267C-34C3-4DDB-8B41-94697808714A}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {E07D267C-34C3-4DDB-8B41-94697808714A}.Release|Mixed Platforms.Build.0 = Release|Win32
- {E07D267C-34C3-4DDB-8B41-94697808714A}.Release|Win32.ActiveCfg = Release|Win32
- {E07D267C-34C3-4DDB-8B41-94697808714A}.Release|Win32.Build.0 = Release|Win32
- {E13045CD-7E1F-4A41-9B18-8D288B2E7B41}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {E13045CD-7E1F-4A41-9B18-8D288B2E7B41}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {E13045CD-7E1F-4A41-9B18-8D288B2E7B41}.Debug|Win32.ActiveCfg = Debug|Win32
- {E13045CD-7E1F-4A41-9B18-8D288B2E7B41}.Debug|Win32.Build.0 = Debug|Win32
- {E13045CD-7E1F-4A41-9B18-8D288B2E7B41}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {E13045CD-7E1F-4A41-9B18-8D288B2E7B41}.Release|Mixed Platforms.Build.0 = Release|Win32
- {E13045CD-7E1F-4A41-9B18-8D288B2E7B41}.Release|Win32.ActiveCfg = Release|Win32
- {E13045CD-7E1F-4A41-9B18-8D288B2E7B41}.Release|Win32.Build.0 = Release|Win32
- {E1D0B89E-257B-4BCA-A0C6-A2CD997A2FDC}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {E1D0B89E-257B-4BCA-A0C6-A2CD997A2FDC}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {E1D0B89E-257B-4BCA-A0C6-A2CD997A2FDC}.Debug|Win32.ActiveCfg = Debug|Win32
- {E1D0B89E-257B-4BCA-A0C6-A2CD997A2FDC}.Debug|Win32.Build.0 = Debug|Win32
- {E1D0B89E-257B-4BCA-A0C6-A2CD997A2FDC}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {E1D0B89E-257B-4BCA-A0C6-A2CD997A2FDC}.Release|Mixed Platforms.Build.0 = Release|Win32
- {E1D0B89E-257B-4BCA-A0C6-A2CD997A2FDC}.Release|Win32.ActiveCfg = Release|Win32
- {E1D0B89E-257B-4BCA-A0C6-A2CD997A2FDC}.Release|Win32.Build.0 = Release|Win32
- {E3749617-BA3D-4230-B54C-B758E56D9FA5}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {E3749617-BA3D-4230-B54C-B758E56D9FA5}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {E3749617-BA3D-4230-B54C-B758E56D9FA5}.Debug|Win32.ActiveCfg = Debug|Win32
- {E3749617-BA3D-4230-B54C-B758E56D9FA5}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {E3749617-BA3D-4230-B54C-B758E56D9FA5}.Release|Mixed Platforms.Build.0 = Release|Win32
- {E3749617-BA3D-4230-B54C-B758E56D9FA5}.Release|Win32.ActiveCfg = Release|Win32
- {E3749617-BA3D-4230-B54C-B758E56D9FA5}.Release|Win32.Build.0 = Release|Win32
- {E3DF045F-2174-4685-9CF7-0630A79F324B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {E3DF045F-2174-4685-9CF7-0630A79F324B}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {E3DF045F-2174-4685-9CF7-0630A79F324B}.Debug|Win32.ActiveCfg = Debug|Win32
- {E3DF045F-2174-4685-9CF7-0630A79F324B}.Debug|Win32.Build.0 = Debug|Win32
- {E3DF045F-2174-4685-9CF7-0630A79F324B}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {E3DF045F-2174-4685-9CF7-0630A79F324B}.Release|Mixed Platforms.Build.0 = Release|Win32
- {E3DF045F-2174-4685-9CF7-0630A79F324B}.Release|Win32.ActiveCfg = Release|Win32
- {E3DF045F-2174-4685-9CF7-0630A79F324B}.Release|Win32.Build.0 = Release|Win32
- {E6766F81-1FCD-4CD7-BC16-E36964A14867}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {E6766F81-1FCD-4CD7-BC16-E36964A14867}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {E6766F81-1FCD-4CD7-BC16-E36964A14867}.Debug|Win32.ActiveCfg = Debug|Win32
- {E6766F81-1FCD-4CD7-BC16-E36964A14867}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {E6766F81-1FCD-4CD7-BC16-E36964A14867}.Release|Mixed Platforms.Build.0 = Release|Win32
- {E6766F81-1FCD-4CD7-BC16-E36964A14867}.Release|Win32.ActiveCfg = Release|Win32
- {E6766F81-1FCD-4CD7-BC16-E36964A14867}.Release|Win32.Build.0 = Release|Win32
- {E750512D-FC7C-4C98-BF04-0A0DAF882055}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {E750512D-FC7C-4C98-BF04-0A0DAF882055}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {E750512D-FC7C-4C98-BF04-0A0DAF882055}.Debug|Win32.ActiveCfg = Debug|Win32
- {E750512D-FC7C-4C98-BF04-0A0DAF882055}.Debug|Win32.Build.0 = Debug|Win32
- {E750512D-FC7C-4C98-BF04-0A0DAF882055}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {E750512D-FC7C-4C98-BF04-0A0DAF882055}.Release|Mixed Platforms.Build.0 = Release|Win32
- {E750512D-FC7C-4C98-BF04-0A0DAF882055}.Release|Win32.ActiveCfg = Release|Win32
- {E750512D-FC7C-4C98-BF04-0A0DAF882055}.Release|Win32.Build.0 = Release|Win32
- {E7B11CF0-FE40-4A69-AE20-1B882F4D7585}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {E7B11CF0-FE40-4A69-AE20-1B882F4D7585}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {E7B11CF0-FE40-4A69-AE20-1B882F4D7585}.Debug|Win32.ActiveCfg = Debug|Win32
- {E7B11CF0-FE40-4A69-AE20-1B882F4D7585}.Debug|Win32.Build.0 = Debug|Win32
- {E7B11CF0-FE40-4A69-AE20-1B882F4D7585}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {E7B11CF0-FE40-4A69-AE20-1B882F4D7585}.Release|Mixed Platforms.Build.0 = Release|Win32
- {E7B11CF0-FE40-4A69-AE20-1B882F4D7585}.Release|Win32.ActiveCfg = Release|Win32
- {E7B11CF0-FE40-4A69-AE20-1B882F4D7585}.Release|Win32.Build.0 = Release|Win32
- {E99DA267-BE90-4F45-88A1-6919DB2C7567}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {E99DA267-BE90-4F45-88A1-6919DB2C7567}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {E99DA267-BE90-4F45-88A1-6919DB2C7567}.Debug|Win32.ActiveCfg = Debug|Win32
- {E99DA267-BE90-4F45-88A1-6919DB2C7567}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {E99DA267-BE90-4F45-88A1-6919DB2C7567}.Release|Mixed Platforms.Build.0 = Release|Win32
- {E99DA267-BE90-4F45-88A1-6919DB2C7567}.Release|Win32.ActiveCfg = Release|Win32
+ {9B87804D-2502-480B-95AE-5A572CE91809}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {9B87804D-2502-480B-95AE-5A572CE91809}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {9B87804D-2502-480B-95AE-5A572CE91809}.Debug|Win32.ActiveCfg = Debug|Win32
+ {9B87804D-2502-480B-95AE-5A572CE91809}.Debug|Win32.Build.0 = Debug|Win32
+ {9B87804D-2502-480B-95AE-5A572CE91809}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {9B87804D-2502-480B-95AE-5A572CE91809}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {9B87804D-2502-480B-95AE-5A572CE91809}.Release|Win32.ActiveCfg = Release|Win32
+ {9B87804D-2502-480B-95AE-5A572CE91809}.Release|Win32.Build.0 = Release|Win32
+ {C564F145-9172-42C3-BFCB-60FDEA124321}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {C564F145-9172-42C3-BFCB-60FDEA124321}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {C564F145-9172-42C3-BFCB-60FDEA124321}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C564F145-9172-42C3-BFCB-60FDEA124321}.Debug|Win32.Build.0 = Debug|Win32
+ {C564F145-9172-42C3-BFCB-60FDEA124321}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {C564F145-9172-42C3-BFCB-60FDEA124321}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {C564F145-9172-42C3-BFCB-60FDEA124321}.Release|Win32.ActiveCfg = Release|Win32
+ {C564F145-9172-42C3-BFCB-60FDEA124321}.Release|Win32.Build.0 = Release|Win32
+ {4631946D-7D5F-44BD-A5A8-504C0A7033BE}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {4631946D-7D5F-44BD-A5A8-504C0A7033BE}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {4631946D-7D5F-44BD-A5A8-504C0A7033BE}.Debug|Win32.ActiveCfg = Debug|Win32
+ {4631946D-7D5F-44BD-A5A8-504C0A7033BE}.Debug|Win32.Build.0 = Debug|Win32
+ {4631946D-7D5F-44BD-A5A8-504C0A7033BE}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {4631946D-7D5F-44BD-A5A8-504C0A7033BE}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {4631946D-7D5F-44BD-A5A8-504C0A7033BE}.Release|Win32.ActiveCfg = Release|Win32
+ {4631946D-7D5F-44BD-A5A8-504C0A7033BE}.Release|Win32.Build.0 = Release|Win32
+ {9A72A362-E617-4205-B9F2-43C6FB280FA1}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {9A72A362-E617-4205-B9F2-43C6FB280FA1}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {9A72A362-E617-4205-B9F2-43C6FB280FA1}.Debug|Win32.ActiveCfg = Debug|Win32
+ {9A72A362-E617-4205-B9F2-43C6FB280FA1}.Debug|Win32.Build.0 = Debug|Win32
+ {9A72A362-E617-4205-B9F2-43C6FB280FA1}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {9A72A362-E617-4205-B9F2-43C6FB280FA1}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {9A72A362-E617-4205-B9F2-43C6FB280FA1}.Release|Win32.ActiveCfg = Release|Win32
+ {9A72A362-E617-4205-B9F2-43C6FB280FA1}.Release|Win32.Build.0 = Release|Win32
+ {57C27529-8CA9-4FC3-9C02-DA05B172F785}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {57C27529-8CA9-4FC3-9C02-DA05B172F785}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {57C27529-8CA9-4FC3-9C02-DA05B172F785}.Debug|Win32.ActiveCfg = Debug|Win32
+ {57C27529-8CA9-4FC3-9C02-DA05B172F785}.Debug|Win32.Build.0 = Debug|Win32
+ {57C27529-8CA9-4FC3-9C02-DA05B172F785}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {57C27529-8CA9-4FC3-9C02-DA05B172F785}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {57C27529-8CA9-4FC3-9C02-DA05B172F785}.Release|Win32.ActiveCfg = Release|Win32
+ {57C27529-8CA9-4FC3-9C02-DA05B172F785}.Release|Win32.Build.0 = Release|Win32
+ {24309F1A-4035-46F9-A3D8-F47DC4BCC2B8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {24309F1A-4035-46F9-A3D8-F47DC4BCC2B8}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {24309F1A-4035-46F9-A3D8-F47DC4BCC2B8}.Debug|Win32.ActiveCfg = Debug|Win32
+ {24309F1A-4035-46F9-A3D8-F47DC4BCC2B8}.Debug|Win32.Build.0 = Debug|Win32
+ {24309F1A-4035-46F9-A3D8-F47DC4BCC2B8}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {24309F1A-4035-46F9-A3D8-F47DC4BCC2B8}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {24309F1A-4035-46F9-A3D8-F47DC4BCC2B8}.Release|Win32.ActiveCfg = Release|Win32
+ {24309F1A-4035-46F9-A3D8-F47DC4BCC2B8}.Release|Win32.Build.0 = Release|Win32
+ {4EA8CE12-9C6F-45E5-9D08-720383FE3685}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {4EA8CE12-9C6F-45E5-9D08-720383FE3685}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {4EA8CE12-9C6F-45E5-9D08-720383FE3685}.Debug|Win32.ActiveCfg = Debug|Win32
+ {4EA8CE12-9C6F-45E5-9D08-720383FE3685}.Debug|Win32.Build.0 = Debug|Win32
+ {4EA8CE12-9C6F-45E5-9D08-720383FE3685}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {4EA8CE12-9C6F-45E5-9D08-720383FE3685}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {4EA8CE12-9C6F-45E5-9D08-720383FE3685}.Release|Win32.ActiveCfg = Release|Win32
+ {4EA8CE12-9C6F-45E5-9D08-720383FE3685}.Release|Win32.Build.0 = Release|Win32
{EB79415F-2F17-4BDC-AADD-4CA4C2D21B73}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{EB79415F-2F17-4BDC-AADD-4CA4C2D21B73}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{EB79415F-2F17-4BDC-AADD-4CA4C2D21B73}.Debug|Win32.ActiveCfg = Debug|Win32
@@ -2832,308 +2935,205 @@ Global
{EB79415F-2F17-4BDC-AADD-4CA4C2D21B73}.Release|Mixed Platforms.Build.0 = Release|Win32
{EB79415F-2F17-4BDC-AADD-4CA4C2D21B73}.Release|Win32.ActiveCfg = Release|Win32
{EB79415F-2F17-4BDC-AADD-4CA4C2D21B73}.Release|Win32.Build.0 = Release|Win32
- {EC8B7909-62AF-470D-A75D-E1D89C837142}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {EC8B7909-62AF-470D-A75D-E1D89C837142}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {EC8B7909-62AF-470D-A75D-E1D89C837142}.Debug|Win32.ActiveCfg = Debug|Win32
- {EC8B7909-62AF-470D-A75D-E1D89C837142}.Debug|Win32.Build.0 = Debug|Win32
- {EC8B7909-62AF-470D-A75D-E1D89C837142}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {EC8B7909-62AF-470D-A75D-E1D89C837142}.Release|Mixed Platforms.Build.0 = Release|Win32
- {EC8B7909-62AF-470D-A75D-E1D89C837142}.Release|Win32.ActiveCfg = Release|Win32
- {EC8B7909-62AF-470D-A75D-E1D89C837142}.Release|Win32.Build.0 = Release|Win32
- {ECFC2BEC-9FC0-4AD9-9649-5F26793F65FC}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {ECFC2BEC-9FC0-4AD9-9649-5F26793F65FC}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {ECFC2BEC-9FC0-4AD9-9649-5F26793F65FC}.Debug|Win32.ActiveCfg = Debug|Win32
- {ECFC2BEC-9FC0-4AD9-9649-5F26793F65FC}.Debug|Win32.Build.0 = Debug|Win32
- {ECFC2BEC-9FC0-4AD9-9649-5F26793F65FC}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {ECFC2BEC-9FC0-4AD9-9649-5F26793F65FC}.Release|Mixed Platforms.Build.0 = Release|Win32
- {ECFC2BEC-9FC0-4AD9-9649-5F26793F65FC}.Release|Win32.ActiveCfg = Release|Win32
- {ECFC2BEC-9FC0-4AD9-9649-5F26793F65FC}.Release|Win32.Build.0 = Release|Win32
- {ED19720A-8F14-D3FC-9C6D-EEB5AE4D5BD7}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {ED19720A-8F14-D3FC-9C6D-EEB5AE4D5BD7}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {ED19720A-8F14-D3FC-9C6D-EEB5AE4D5BD7}.Debug|Win32.ActiveCfg = Debug|Win32
- {ED19720A-8F14-D3FC-9C6D-EEB5AE4D5BD7}.Debug|Win32.Build.0 = Debug|Win32
- {ED19720A-8F14-D3FC-9C6D-EEB5AE4D5BD7}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {ED19720A-8F14-D3FC-9C6D-EEB5AE4D5BD7}.Release|Mixed Platforms.Build.0 = Release|Win32
- {ED19720A-8F14-D3FC-9C6D-EEB5AE4D5BD7}.Release|Win32.ActiveCfg = Release|Win32
- {ED19720A-8F14-D3FC-9C6D-EEB5AE4D5BD7}.Release|Win32.Build.0 = Release|Win32
- {EF5E94AB-B646-4E5B-A058-52EF07B8351C}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {EF5E94AB-B646-4E5B-A058-52EF07B8351C}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {EF5E94AB-B646-4E5B-A058-52EF07B8351C}.Debug|Win32.ActiveCfg = Debug|Win32
- {EF5E94AB-B646-4E5B-A058-52EF07B8351C}.Debug|Win32.Build.0 = Debug|Win32
- {EF5E94AB-B646-4E5B-A058-52EF07B8351C}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {EF5E94AB-B646-4E5B-A058-52EF07B8351C}.Release|Mixed Platforms.Build.0 = Release|Win32
- {EF5E94AB-B646-4E5B-A058-52EF07B8351C}.Release|Win32.ActiveCfg = Release|Win32
- {EF5E94AB-B646-4E5B-A058-52EF07B8351C}.Release|Win32.Build.0 = Release|Win32
- {EFBB1436-A63F-4CD8-9E99-B89226E782EC}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {EFBB1436-A63F-4CD8-9E99-B89226E782EC}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {EFBB1436-A63F-4CD8-9E99-B89226E782EC}.Debug|Win32.ActiveCfg = Debug|Win32
- {EFBB1436-A63F-4CD8-9E99-B89226E782EC}.Debug|Win32.Build.0 = Debug|Win32
- {EFBB1436-A63F-4CD8-9E99-B89226E782EC}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {EFBB1436-A63F-4CD8-9E99-B89226E782EC}.Release|Mixed Platforms.Build.0 = Release|Win32
- {EFBB1436-A63F-4CD8-9E99-B89226E782EC}.Release|Win32.ActiveCfg = Release|Win32
- {EFBB1436-A63F-4CD8-9E99-B89226E782EC}.Release|Win32.Build.0 = Release|Win32
- {F22022F0-2D3B-5610-4E80-C674A8E01C5A}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {F22022F0-2D3B-5610-4E80-C674A8E01C5A}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {F22022F0-2D3B-5610-4E80-C674A8E01C5A}.Debug|Win32.ActiveCfg = Debug|Win32
- {F22022F0-2D3B-5610-4E80-C674A8E01C5A}.Debug|Win32.Build.0 = Debug|Win32
- {F22022F0-2D3B-5610-4E80-C674A8E01C5A}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {F22022F0-2D3B-5610-4E80-C674A8E01C5A}.Release|Mixed Platforms.Build.0 = Release|Win32
- {F22022F0-2D3B-5610-4E80-C674A8E01C5A}.Release|Win32.ActiveCfg = Release|Win32
- {F22022F0-2D3B-5610-4E80-C674A8E01C5A}.Release|Win32.Build.0 = Release|Win32
- {F4F4BCAA-EA59-445C-A119-3E6C29647A51}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {F4F4BCAA-EA59-445C-A119-3E6C29647A51}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {F4F4BCAA-EA59-445C-A119-3E6C29647A51}.Debug|Win32.ActiveCfg = Debug|Win32
- {F4F4BCAA-EA59-445C-A119-3E6C29647A51}.Debug|Win32.Build.0 = Debug|Win32
- {F4F4BCAA-EA59-445C-A119-3E6C29647A51}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {F4F4BCAA-EA59-445C-A119-3E6C29647A51}.Release|Mixed Platforms.Build.0 = Release|Win32
- {F4F4BCAA-EA59-445C-A119-3E6C29647A51}.Release|Win32.ActiveCfg = Release|Win32
- {F4F4BCAA-EA59-445C-A119-3E6C29647A51}.Release|Win32.Build.0 = Release|Win32
- {F54ABC59-5C00-414A-A9BA-BAF26D1699F0}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {F54ABC59-5C00-414A-A9BA-BAF26D1699F0}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {F54ABC59-5C00-414A-A9BA-BAF26D1699F0}.Debug|Win32.ActiveCfg = Debug|Win32
- {F54ABC59-5C00-414A-A9BA-BAF26D1699F0}.Debug|Win32.Build.0 = Debug|Win32
- {F54ABC59-5C00-414A-A9BA-BAF26D1699F0}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {F54ABC59-5C00-414A-A9BA-BAF26D1699F0}.Release|Mixed Platforms.Build.0 = Release|Win32
- {F54ABC59-5C00-414A-A9BA-BAF26D1699F0}.Release|Win32.ActiveCfg = Release|Win32
- {F54ABC59-5C00-414A-A9BA-BAF26D1699F0}.Release|Win32.Build.0 = Release|Win32
- {F7790A54-4078-4E4A-8231-818BE9FB1F94}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {F7790A54-4078-4E4A-8231-818BE9FB1F94}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {F7790A54-4078-4E4A-8231-818BE9FB1F94}.Debug|Win32.ActiveCfg = Debug|Win32
- {F7790A54-4078-4E4A-8231-818BE9FB1F94}.Debug|Win32.Build.0 = Debug|Win32
- {F7790A54-4078-4E4A-8231-818BE9FB1F94}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {F7790A54-4078-4E4A-8231-818BE9FB1F94}.Release|Mixed Platforms.Build.0 = Release|Win32
- {F7790A54-4078-4E4A-8231-818BE9FB1F94}.Release|Win32.ActiveCfg = Release|Win32
- {F7790A54-4078-4E4A-8231-818BE9FB1F94}.Release|Win32.Build.0 = Release|Win32
- {F9810DE8-CBC3-4605-A7B1-ECA2D5292FD7}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {F9810DE8-CBC3-4605-A7B1-ECA2D5292FD7}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {F9810DE8-CBC3-4605-A7B1-ECA2D5292FD7}.Debug|Win32.ActiveCfg = Debug|Win32
- {F9810DE8-CBC3-4605-A7B1-ECA2D5292FD7}.Debug|Win32.Build.0 = Debug|Win32
- {F9810DE8-CBC3-4605-A7B1-ECA2D5292FD7}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {F9810DE8-CBC3-4605-A7B1-ECA2D5292FD7}.Release|Mixed Platforms.Build.0 = Release|Win32
- {F9810DE8-CBC3-4605-A7B1-ECA2D5292FD7}.Release|Win32.ActiveCfg = Release|Win32
- {F9810DE8-CBC3-4605-A7B1-ECA2D5292FD7}.Release|Win32.Build.0 = Release|Win32
- {FA39524D-3067-4141-888D-28A86C66F2B9}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {FA39524D-3067-4141-888D-28A86C66F2B9}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {FA39524D-3067-4141-888D-28A86C66F2B9}.Debug|Win32.ActiveCfg = Debug|Win32
- {FA39524D-3067-4141-888D-28A86C66F2B9}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {FA39524D-3067-4141-888D-28A86C66F2B9}.Release|Mixed Platforms.Build.0 = Release|Win32
- {FA39524D-3067-4141-888D-28A86C66F2B9}.Release|Win32.ActiveCfg = Release|Win32
- {FA39524D-3067-4141-888D-28A86C66F2B9}.Release|Win32.Build.0 = Release|Win32
- {FA537565-7B03-4FFC-AF15-F7A979B72E22}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {FA537565-7B03-4FFC-AF15-F7A979B72E22}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {FA537565-7B03-4FFC-AF15-F7A979B72E22}.Debug|Win32.ActiveCfg = Debug|Win32
- {FA537565-7B03-4FFC-AF15-F7A979B72E22}.Debug|Win32.Build.0 = Debug|Win32
- {FA537565-7B03-4FFC-AF15-F7A979B72E22}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {FA537565-7B03-4FFC-AF15-F7A979B72E22}.Release|Mixed Platforms.Build.0 = Release|Win32
- {FA537565-7B03-4FFC-AF15-F7A979B72E22}.Release|Win32.ActiveCfg = Release|Win32
- {FA537565-7B03-4FFC-AF15-F7A979B72E22}.Release|Win32.Build.0 = Release|Win32
- {FA660037-EB40-4A43-AA9D-9653C57F2789}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {FA660037-EB40-4A43-AA9D-9653C57F2789}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {FA660037-EB40-4A43-AA9D-9653C57F2789}.Debug|Win32.ActiveCfg = Debug|Win32
- {FA660037-EB40-4A43-AA9D-9653C57F2789}.Debug|Win32.Build.0 = Debug|Win32
- {FA660037-EB40-4A43-AA9D-9653C57F2789}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {FA660037-EB40-4A43-AA9D-9653C57F2789}.Release|Mixed Platforms.Build.0 = Release|Win32
- {FA660037-EB40-4A43-AA9D-9653C57F2789}.Release|Win32.ActiveCfg = Release|Win32
- {FA660037-EB40-4A43-AA9D-9653C57F2789}.Release|Win32.Build.0 = Release|Win32
- {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED}.Debug|Win32.ActiveCfg = Debug|Win32
- {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED}.Debug|Win32.Build.0 = Debug|Win32
- {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED}.Release|Mixed Platforms.Build.0 = Release|Win32
- {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED}.Release|Win32.ActiveCfg = Release|Win32
- {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED}.Release|Win32.Build.0 = Release|Win32
- {FD683DD6-D9BF-4B1B-AB6D-A3AC03EDAA4D}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
- {FD683DD6-D9BF-4B1B-AB6D-A3AC03EDAA4D}.Debug|Mixed Platforms.Build.0 = Debug|Win32
- {FD683DD6-D9BF-4B1B-AB6D-A3AC03EDAA4D}.Debug|Win32.ActiveCfg = Debug|Win32
- {FD683DD6-D9BF-4B1B-AB6D-A3AC03EDAA4D}.Debug|Win32.Build.0 = Debug|Win32
- {FD683DD6-D9BF-4B1B-AB6D-A3AC03EDAA4D}.Release|Mixed Platforms.ActiveCfg = Release|Win32
- {FD683DD6-D9BF-4B1B-AB6D-A3AC03EDAA4D}.Release|Mixed Platforms.Build.0 = Release|Win32
- {FD683DD6-D9BF-4B1B-AB6D-A3AC03EDAA4D}.Release|Win32.ActiveCfg = Release|Win32
- {FD683DD6-D9BF-4B1B-AB6D-A3AC03EDAA4D}.Release|Win32.Build.0 = Release|Win32
+ {A1CE1DC3-3800-E6A1-F8ED-CC5D3B9D8B6F}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {A1CE1DC3-3800-E6A1-F8ED-CC5D3B9D8B6F}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {A1CE1DC3-3800-E6A1-F8ED-CC5D3B9D8B6F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A1CE1DC3-3800-E6A1-F8ED-CC5D3B9D8B6F}.Debug|Win32.Build.0 = Debug|Win32
+ {A1CE1DC3-3800-E6A1-F8ED-CC5D3B9D8B6F}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {A1CE1DC3-3800-E6A1-F8ED-CC5D3B9D8B6F}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {A1CE1DC3-3800-E6A1-F8ED-CC5D3B9D8B6F}.Release|Win32.ActiveCfg = Release|Win32
+ {A1CE1DC3-3800-E6A1-F8ED-CC5D3B9D8B6F}.Release|Win32.Build.0 = Release|Win32
+ {6F9258E5-294F-47B2-919D-17FFE7A8B751}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {6F9258E5-294F-47B2-919D-17FFE7A8B751}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {6F9258E5-294F-47B2-919D-17FFE7A8B751}.Debug|Win32.ActiveCfg = Debug|Win32
+ {6F9258E5-294F-47B2-919D-17FFE7A8B751}.Debug|Win32.Build.0 = Debug|Win32
+ {6F9258E5-294F-47B2-919D-17FFE7A8B751}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {6F9258E5-294F-47B2-919D-17FFE7A8B751}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {6F9258E5-294F-47B2-919D-17FFE7A8B751}.Release|Win32.ActiveCfg = Release|Win32
+ {6F9258E5-294F-47B2-919D-17FFE7A8B751}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
- {0026A376-C4F1-4575-A1BA-578C69F07013} = {EB684A4B-98F7-4E68-8EA7-EA74ACF7060B}
- {018D4F38-6272-448F-A864-976DA09F05D0} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
- {0557BC3C-DE87-4127-BDAA-9BD9BDB13FB4} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {0A13F602-B497-4BC1-ABD8-03CA8E95B2AF} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {0B469837-3D46-484A-AFB3-C5A6C68730B9} = {CB43561E-A6F8-49E2-96A2-3F2BA1FFF21E}
- {0D04AEC1-6B68-492C-BCCF-808DFD69ABC6} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
- {0D54A5C4-B78B-41A2-BF8A-5DA48AC90495} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {1444235E-0E97-4C80-A73E-EE73F3706C32} = {1088577A-0C49-4DE0-85CD-B68AD0BE55AA}
- {1556EF78-C7E6-43C8-951F-F6B43AC0DD12} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
- {182D578D-2DAC-4BB7-AFEC-9A2855E56F94} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {1832A374-8A74-4F9E-B536-69A699B3E165} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
- {1846F110-8263-413F-9924-36F64DD8FE41} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
- {1AFC1EC3-24FA-4260-B099-76319EC9977A} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
- {1C16337B-ACF3-4D03-AA90-851C5B5EADA6} = {1088577A-0C49-4DE0-85CD-B68AD0BE55AA}
- {20A560A0-2CD0-4D9E-A58B-1F24B99C087A} = {97555540-8163-4D0F-BCAC-EFA0FFED3453}
- {21C76E6E-8B38-44D6-8148-B589C13B9554} = {EB684A4B-98F7-4E68-8EA7-EA74ACF7060B}
- {21E22961-22BF-4493-BD3A-868F93DA5179} = {B353A6A5-9551-4B76-908E-0F0A9B31E4CE}
- {226B3533-1FF3-42F6-A8E3-C4DDBC955290} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {228DD844-9926-420E-B193-6973BF2A4D0B} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {B6867423-23BD-4588-9321-2D500F128A3D}
+ {C0A7EE2C-2A6D-45BE-BA78-6D006FDF52D9} = {B6867423-23BD-4588-9321-2D500F128A3D}
+ {7B219FAA-E360-43C8-B341-804A94EEFFAC} = {B6867423-23BD-4588-9321-2D500F128A3D}
{2325D8C4-8EF5-42AC-8900-492225750DE4} = {B6867423-23BD-4588-9321-2D500F128A3D}
- {238CE175-76CE-4A25-A676-69D115885601} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
- {24309F1A-4035-46F9-A3D8-F47DC4BCC2B8} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
- {24A5AC7C-280B-4899-9153-6BA570A081E7} = {EB684A4B-98F7-4E68-8EA7-EA74ACF7060B}
- {256DECCE-9886-4C21-96A5-EE47DF5E07E9} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {275F2993-EE9B-4E00-9C85-10A182FD423A} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE} = {B6867423-23BD-4588-9321-2D500F128A3D}
+ {FD683DD6-D9BF-4B1B-AB6D-A3AC03EDAA4D} = {B6867423-23BD-4588-9321-2D500F128A3D}
+ {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA} = {97555540-8163-4D0F-BCAC-EFA0FFED3453}
+ {9301A569-5D2B-4D11-9332-B1E30AEACB8D} = {97555540-8163-4D0F-BCAC-EFA0FFED3453}
+ {899F1280-3441-4D1F-BA04-CCD6208D9146} = {97555540-8163-4D0F-BCAC-EFA0FFED3453}
+ {20A560A0-2CD0-4D9E-A58B-1F24B99C087A} = {97555540-8163-4D0F-BCAC-EFA0FFED3453}
+ {D703D7A0-EDC1-4FE6-9E22-56154155B24E} = {97555540-8163-4D0F-BCAC-EFA0FFED3453}
+ {BF4F447B-72B5-4059-BE1B-F94337B1F385} = {97555540-8163-4D0F-BCAC-EFA0FFED3453}
+ {57823D8C-A317-4713-9125-2C91FDFD12D6} = {97555540-8163-4D0F-BCAC-EFA0FFED3453}
+ {FA537565-7B03-4FFC-AF15-F7A979B72E22} = {97555540-8163-4D0F-BCAC-EFA0FFED3453}
+ {C78D02D0-A366-4EC6-A248-AA8E64C4BA18} = {97555540-8163-4D0F-BCAC-EFA0FFED3453}
+ {1556EF78-C7E6-43C8-951F-F6B43AC0DD12} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
+ {50B079C7-CD01-42D3-B8C4-9F8D9322E822} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
+ {BE6D5659-A8D5-4890-A42C-090DD10EF62C} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
+ {FA39524D-3067-4141-888D-28A86C66F2B9} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
+ {9055E088-25C6-47FD-87D5-D9DD9FD75C9F} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
+ {ECFC2BEC-9FC0-4AD9-9649-5F26793F65FC} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
+ {B92AE829-E1CD-4781-824A-DCB1603A1672} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
+ {C9E0BD1D-B175-4A91-8380-3FDC81FAB9D7} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
+ {8A3E1774-1DE9-445C-982D-3EE37C8A752A} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
+ {E3749617-BA3D-4230-B54C-B758E56D9FA5} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
+ {D3E6C0FD-54C7-4FF2-9AE1-72F2DAFD820C} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
+ {76235B67-1C27-4627-8A33-4B2E1EF93EDE} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
+ {E6766F81-1FCD-4CD7-BC16-E36964A14867} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
+ {E750512D-FC7C-4C98-BF04-0A0DAF882055} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
+ {0D04AEC1-6B68-492C-BCCF-808DFD69ABC6} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
+ {E99DA267-BE90-4F45-88A1-6919DB2C7567} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
+ {AAC78796-B9A2-4CD9-BF89-09B03E92BF73} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
+ {C8C6183C-B03C-11DD-B471-DFD256D89593} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
{27A30967-4BBA-48D1-8522-CDE95F7B1CEC} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
- {2A70CBF0-847E-4E3A-B926-542A656DC7FE} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
- {2E2D3301-2EC4-4C0F-B889-87073B30F673} = {1088577A-0C49-4DE0-85CD-B68AD0BE55AA}
- {2E969AE9-7B12-4EDB-8E8B-48C7AE7BE357} = {846901FD-A619-4BD5-A303-38174730CDD6}
- {2F7EDFA2-EE27-4D83-8454-9EFBD5779203} = {CB43561E-A6F8-49E2-96A2-3F2BA1FFF21E}
- {2F914112-2657-49EC-8EA6-3BA63340DE27} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {300C6A09-663E-48B6-8E07-A0D50CAF8F25} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {32167995-4014-4E4C-983B-F7E17C24EB25} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {326E9795-E760-410A-B69A-3F79DB3F5243} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
- {34231B28-C51C-4C1C-AF07-C763668B1404} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {3A932C39-AFA9-4BDC-B775-F71A426D04BF} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {3AB90E6A-56FF-4C9D-B918-AB76DDBF8BE8} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {3BD81303-4E14-4559-AA69-B30C3BAB08DD} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
- {3E03D462-780D-4C4D-B22E-5E095E6CF110} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
- {3E6B24F6-9FA9-4066-859E-BF747FA3080A} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {4052059A-D72B-4183-B5C2-9D1B099E9E35} = {EB684A4B-98F7-4E68-8EA7-EA74ACF7060B}
+ {A1CAA831-C507-4B2E-87F3-AEC63C9907F9} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
+ {018D4F38-6272-448F-A864-976DA09F05D0} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
+ {903F8C1E-537A-4C9E-97BE-075147CBE769} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
{414D4D24-5D65-498B-A33F-3A29AD3CDEDC} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
- {41735CD9-3E35-47F7-9FD1-4A9950B6B131} = {846901FD-A619-4BD5-A303-38174730CDD6}
- {42ECD5EC-722F-41DE-B6B8-83764C8016DF} = {846901FD-A619-4BD5-A303-38174730CDD6}
- {4539AFB3-B8DC-47F3-A491-6DAC8FD26657} = {846901FD-A619-4BD5-A303-38174730CDD6}
- {4631946D-7D5F-44BD-A5A8-504C0A7033BE} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
- {49909552-0B0C-4C14-8CF6-DB8A2ADE0934} = {1088577A-0C49-4DE0-85CD-B68AD0BE55AA}
- {4B60E8B8-416F-40B2-8A54-F75970A21992} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {7F0A70F6-BE3F-4C19-B435-956AB8F30BA4} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
+ {D2250C20-3A94-4FB9-AF73-11BC5B73884B} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
{4B6E199A-034A-49BD-AB93-458DD37E45B1} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
- {4EA8CE12-9C6F-45E5-9D08-720383FE3685} = {846901FD-A619-4BD5-A303-38174730CDD6}
- {50B079C7-CD01-42D3-B8C4-9F8D9322E822} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
- {5597AD47-3494-4750-A235-4F9C2F864700} = {CB43561E-A6F8-49E2-96A2-3F2BA1FFF21E}
- {57823D8C-A317-4713-9125-2C91FDFD12D6} = {97555540-8163-4D0F-BCAC-EFA0FFED3453}
+ {A34770EA-A574-43E8-9327-F79C04770E98} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
+ {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
+ {A5F831FD-9B9C-4FEF-9FBA-554817B734CE} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
+ {B64B396B-8EF1-4B6B-A07E-48D40EB961AB} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
+ {8B2EE5D9-41BC-4AA2-A401-2DC143A05D2E} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
+ {7EFD0C91-198E-4043-9E71-4A4C7879B929} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
+ {3E03D462-780D-4C4D-B22E-5E095E6CF110} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
+ {D7589D0D-304E-4589-85A4-153B7D84B07F} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
+ {9B87804D-2502-480B-95AE-5A572CE91809} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
{57C27529-8CA9-4FC3-9C02-DA05B172F785} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
- {5916D37D-8C97-424F-A904-74E52594C2D6} = {CB43561E-A6F8-49E2-96A2-3F2BA1FFF21E}
- {5AEA4BF6-27CD-47FC-9370-D87771CFA196} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {5BDB7EE1-A1FD-410C-9598-21519A1B7952} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA} = {97555540-8163-4D0F-BCAC-EFA0FFED3453}
+ {24309F1A-4035-46F9-A3D8-F47DC4BCC2B8} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
+ {A1CE1DC3-3800-E6A1-F8ED-CC5D3B9D8B6F} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
+ {1C16337B-ACF3-4D03-AA90-851C5B5EADA6} = {1088577A-0C49-4DE0-85CD-B68AD0BE55AA}
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6} = {1088577A-0C49-4DE0-85CD-B68AD0BE55AA}
+ {2E2D3301-2EC4-4C0F-B889-87073B30F673} = {1088577A-0C49-4DE0-85CD-B68AD0BE55AA}
+ {49909552-0B0C-4C14-8CF6-DB8A2ADE0934} = {1088577A-0C49-4DE0-85CD-B68AD0BE55AA}
+ {1444235E-0E97-4C80-A73E-EE73F3706C32} = {1088577A-0C49-4DE0-85CD-B68AD0BE55AA}
{5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65} = {1088577A-0C49-4DE0-85CD-B68AD0BE55AA}
- {60B43839-95E6-4526-A661-209F16335E0E} = {CB43561E-A6F8-49E2-96A2-3F2BA1FFF21E}
+ {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09} = {CB43561E-A6F8-49E2-96A2-3F2BA1FFF21E}
+ {5597AD47-3494-4750-A235-4F9C2F864700} = {CB43561E-A6F8-49E2-96A2-3F2BA1FFF21E}
{625A8F11-2B4E-45B4-BD99-C6D629C606C0} = {CB43561E-A6F8-49E2-96A2-3F2BA1FFF21E}
- {63011A7B-CE4D-4DF1-B5DA-1B133C14A2E8} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {64D81334-DE73-457D-8FC1-9492508A2663} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {65C78BBB-8FCB-48E4-94C8-1F0F981929AF} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {6AE76406-B03B-11DD-94B1-80B556D89593} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
+ {60B43839-95E6-4526-A661-209F16335E0E} = {CB43561E-A6F8-49E2-96A2-3F2BA1FFF21E}
+ {F4F4BCAA-EA59-445C-A119-3E6C29647A51} = {CB43561E-A6F8-49E2-96A2-3F2BA1FFF21E}
+ {5916D37D-8C97-424F-A904-74E52594C2D6} = {CB43561E-A6F8-49E2-96A2-3F2BA1FFF21E}
+ {2F7EDFA2-EE27-4D83-8454-9EFBD5779203} = {CB43561E-A6F8-49E2-96A2-3F2BA1FFF21E}
+ {0B469837-3D46-484A-AFB3-C5A6C68730B9} = {CB43561E-A6F8-49E2-96A2-3F2BA1FFF21E}
{6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
- {6F9258E5-294F-47B2-919D-17FFE7A8B751} = {97555540-8163-4D0F-BCAC-EFA0FFED3453}
- {7100F41F-868D-4E99-80A2-AF8E6574749D} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
- {76235B67-1C27-4627-8A33-4B2E1EF93EDE} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
- {7A0BA0C5-0D90-49AE-919A-4BE096F69E4F} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {7B219FAA-E360-43C8-B341-804A94EEFFAC} = {B6867423-23BD-4588-9321-2D500F128A3D}
- {7D1EC571-687B-5D48-E259-C5BA78E717D0} = {846901FD-A619-4BD5-A303-38174730CDD6}
- {7D456640-3619-4D23-A56D-E0084400CCBF} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {7EA8C4AB-F9C6-4FA1-8B0A-74F5650430B2} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {7EFD0C91-198E-4043-9E71-4A4C7879B929} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
- {7F0A70F6-BE3F-4C19-B435-956AB8F30BA4} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
- {80E37CB5-059D-4F4B-AEF6-08265468D368} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {82BC22B5-1D58-28BA-8735-58B591E1D154} = {B353A6A5-9551-4B76-908E-0F0A9B31E4CE}
- {82F5BFE5-FDCE-47D4-8B38-BEEBED561681} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
+ {1AFC1EC3-24FA-4260-B099-76319EC9977A} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
+ {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
{8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
- {865575D0-37E2-405E-8CBA-5F6C485B5A26} = {B353A6A5-9551-4B76-908E-0F0A9B31E4CE}
+ {238CE175-76CE-4A25-A676-69D115885601} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
+ {D7A94F58-576A-45D9-A45F-EB87C63ABBB0} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
{873D095E-150E-4262-8C41-2D8ED02F0F57} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
- {879286C0-3234-D14B-BB2C-32D4D1B809CE} = {B353A6A5-9551-4B76-908E-0F0A9B31E4CE}
+ {F9810DE8-CBC3-4605-A7B1-ECA2D5292FD7} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
+ {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
+ {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
+ {B84553C8-5676-427B-B3E4-23DDDC4DBC7B} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
+ {2A70CBF0-847E-4E3A-B926-542A656DC7FE} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
{881F6A97-D539-4C48-B401-DF04385B2343} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
- {899F1280-3441-4D1F-BA04-CCD6208D9146} = {97555540-8163-4D0F-BCAC-EFA0FFED3453}
- {89C1C190-A5D1-4EC4-BD6A-67FF2195C7CC} = {846901FD-A619-4BD5-A303-38174730CDD6}
- {8A3E1774-1DE9-445C-982D-3EE37C8A752A} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
- {8B2EE5D9-41BC-4AA2-A401-2DC143A05D2E} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
+ {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
+ {7100F41F-868D-4E99-80A2-AF8E6574749D} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
+ {326E9795-E760-410A-B69A-3F79DB3F5243} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
+ {6AE76406-B03B-11DD-94B1-80B556D89593} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
+ {1832A374-8A74-4F9E-B536-69A699B3E165} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
+ {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
+ {D6047981-23AE-4623-9373-514FDAFAE60F} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
+ {D7ED06E8-6138-4CE3-A906-5EF1D9C804E0} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
+ {3BD81303-4E14-4559-AA69-B30C3BAB08DD} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
+ {F54ABC59-5C00-414A-A9BA-BAF26D1699F0} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
- {8C27D792-2648-4F5E-9ED0-374276327308} = {1AFC1EC3-24FA-4260-B099-76319EC9977A}
- {903F8C1E-537A-4C9E-97BE-075147CBE769} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
- {9055E088-25C6-47FD-87D5-D9DD9FD75C9F} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
- {9301A569-5D2B-4D11-9332-B1E30AEACB8D} = {97555540-8163-4D0F-BCAC-EFA0FFED3453}
- {9946A048-043B-4F8F-9E07-9297B204714C} = {873D095E-150E-4262-8C41-2D8ED02F0F57}
- {9A72A362-E617-4205-B9F2-43C6FB280FA1} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
- {9B87804D-2502-480B-95AE-5A572CE91809} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
- {9D13D9B8-6C28-42A7-935C-B769EBC55BAA} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
{9E5416B9-B91B-4029-93F4-102C1AD5CAF4} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
- {9F53807E-9382-47BD-8371-E5D04F517E9C} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {ED19720A-8F14-D3FC-9C6D-EEB5AE4D5BD7} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
+ {1846F110-8263-413F-9924-36F64DD8FE41} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
+ {C564F145-9172-42C3-BFCB-60FDEA124321} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
+ {4631946D-7D5F-44BD-A5A8-504C0A7033BE} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
+ {9A72A362-E617-4205-B9F2-43C6FB280FA1} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
+ {6F9258E5-294F-47B2-919D-17FFE7A8B751} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
{A0D94973-D355-47A5-A1E2-3456F321F010} = {1AFC1EC3-24FA-4260-B099-76319EC9977A}
- {A1CAA831-C507-4B2E-87F3-AEC63C9907F9} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
- {A1CE1DC3-3800-E6A1-F8ED-CC5D3B9D8B6F} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
- {A28310B8-7BD0-4CDF-A7D8-59CAB42AA1C4} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {A34770EA-A574-43E8-9327-F79C04770E98} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
- {A464166F-8507-49B4-9B02-5CB77C498B25} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {A493331B-3180-49FE-8D0E-D121645E63AD} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
- {A5C5D801-4026-49F2-BBF1-250941855306} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {A5F831FD-9B9C-4FEF-9FBA-554817B734CE} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
+ {8C27D792-2648-4F5E-9ED0-374276327308} = {1AFC1EC3-24FA-4260-B099-76319EC9977A}
+ {F22022F0-2D3B-5610-4E80-C674A8E01C5A} = {1AFC1EC3-24FA-4260-B099-76319EC9977A}
+ {B55CA863-B374-4BAF-95AC-539E4FA4C90C} = {873D095E-150E-4262-8C41-2D8ED02F0F57}
+ {9946A048-043B-4F8F-9E07-9297B204714C} = {873D095E-150E-4262-8C41-2D8ED02F0F57}
+ {EC8B7909-62AF-470D-A75D-E1D89C837142} = {B353A6A5-9551-4B76-908E-0F0A9B31E4CE}
+ {21E22961-22BF-4493-BD3A-868F93DA5179} = {B353A6A5-9551-4B76-908E-0F0A9B31E4CE}
+ {865575D0-37E2-405E-8CBA-5F6C485B5A26} = {B353A6A5-9551-4B76-908E-0F0A9B31E4CE}
+ {82BC22B5-1D58-28BA-8735-58B591E1D154} = {B353A6A5-9551-4B76-908E-0F0A9B31E4CE}
+ {879286C0-3234-D14B-BB2C-32D4D1B809CE} = {B353A6A5-9551-4B76-908E-0F0A9B31E4CE}
+ {2E969AE9-7B12-4EDB-8E8B-48C7AE7BE357} = {846901FD-A619-4BD5-A303-38174730CDD6}
+ {41735CD9-3E35-47F7-9FD1-4A9950B6B131} = {846901FD-A619-4BD5-A303-38174730CDD6}
+ {4539AFB3-B8DC-47F3-A491-6DAC8FD26657} = {846901FD-A619-4BD5-A303-38174730CDD6}
+ {E13045CD-7E1F-4A41-9B18-8D288B2E7B41} = {846901FD-A619-4BD5-A303-38174730CDD6}
+ {E1D0B89E-257B-4BCA-A0C6-A2CD997A2FDC} = {846901FD-A619-4BD5-A303-38174730CDD6}
+ {89C1C190-A5D1-4EC4-BD6A-67FF2195C7CC} = {846901FD-A619-4BD5-A303-38174730CDD6}
+ {42ECD5EC-722F-41DE-B6B8-83764C8016DF} = {846901FD-A619-4BD5-A303-38174730CDD6}
+ {B0EE0599-2913-46A0-A847-A3EC813658D3} = {846901FD-A619-4BD5-A303-38174730CDD6}
+ {7D1EC571-687B-5D48-E259-C5BA78E717D0} = {846901FD-A619-4BD5-A303-38174730CDD6}
{A763D879-02F0-B744-E6D5-E94C0197057C} = {846901FD-A619-4BD5-A303-38174730CDD6}
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6} = {1088577A-0C49-4DE0-85CD-B68AD0BE55AA}
- {AAC78796-B9A2-4CD9-BF89-09B03E92BF73} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
+ {4EA8CE12-9C6F-45E5-9D08-720383FE3685} = {846901FD-A619-4BD5-A303-38174730CDD6}
+ {EB79415F-2F17-4BDC-AADD-4CA4C2D21B73} = {846901FD-A619-4BD5-A303-38174730CDD6}
+ {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {A493331B-3180-49FE-8D0E-D121645E63AD} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {E7B11CF0-FE40-4A69-AE20-1B882F4D7585} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {A28310B8-7BD0-4CDF-A7D8-59CAB42AA1C4} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {D13F055D-4428-48F4-ABF6-18359C76EDB0} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {3AB90E6A-56FF-4C9D-B918-AB76DDBF8BE8} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {5BDB7EE1-A1FD-410C-9598-21519A1B7952} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {F7790A54-4078-4E4A-8231-818BE9FB1F94} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {7EA8C4AB-F9C6-4FA1-8B0A-74F5650430B2} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {BA62FF5E-08A6-4102-9675-C12E8C9D4CC0} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {D314F1B3-9299-4866-8362-08BF811B0FA3} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {34231B28-C51C-4C1C-AF07-C763668B1404} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {5AEA4BF6-27CD-47FC-9370-D87771CFA196} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {0557BC3C-DE87-4127-BDAA-9BD9BDB13FB4} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {64D81334-DE73-457D-8FC1-9492508A2663} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {3A932C39-AFA9-4BDC-B775-F71A426D04BF} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {0D54A5C4-B78B-41A2-BF8A-5DA48AC90495} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {228DD844-9926-420E-B193-6973BF2A4D0B} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {CE1426F6-7D2B-4574-9929-58387BF7B05F} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
{AFF332BF-AF3D-4D35-86FC-42A727F01D36} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {B0D5BD91-6153-4CA6-BC2F-4E3BD43E5DB7} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {B0EE0599-2913-46A0-A847-A3EC813658D3} = {846901FD-A619-4BD5-A303-38174730CDD6}
+ {E3DF045F-2174-4685-9CF7-0630A79F324B} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {275F2993-EE9B-4E00-9C85-10A182FD423A} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
{B2D715CE-4CBB-415A-A032-E700C90ADF91} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {32167995-4014-4E4C-983B-F7E17C24EB25} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {80E37CB5-059D-4F4B-AEF6-08265468D368} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {A5C5D801-4026-49F2-BBF1-250941855306} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {63011A7B-CE4D-4DF1-B5DA-1B133C14A2E8} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
{B30B0E1F-1CE9-4DEF-A752-7498FD709C1F} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {B55CA863-B374-4BAF-95AC-539E4FA4C90C} = {873D095E-150E-4262-8C41-2D8ED02F0F57}
- {B64B396B-8EF1-4B6B-A07E-48D40EB961AB} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
- {B802A2FE-E4E2-4F5A-905A-D5128875C954} = {EB684A4B-98F7-4E68-8EA7-EA74ACF7060B}
- {B84553C8-5676-427B-B3E4-23DDDC4DBC7B} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
- {B92AE829-E1CD-4781-824A-DCB1603A1672} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
- {B95AB527-F7DB-41E9-AD91-EB51EE0F56BE} = {B6867423-23BD-4588-9321-2D500F128A3D}
- {BA62FF5E-08A6-4102-9675-C12E8C9D4CC0} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {BE6D5659-A8D5-4890-A42C-090DD10EF62C} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
- {BF4F447B-72B5-4059-BE1B-F94337B1F385} = {97555540-8163-4D0F-BCAC-EFA0FFED3453}
- {BFE8E2A7-3B3B-43B0-A994-3058B852DB8B} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
- {C0A7EE2C-2A6D-45BE-BA78-6D006FDF52D9} = {B6867423-23BD-4588-9321-2D500F128A3D}
- {C0C7DA58-C90D-4BDE-AE44-588997339F5D} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {C2A444C2-9D74-4AD7-AE7C-04F5EDA17060} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
- {C564F145-9172-42C3-BFCB-60FDEA124321} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
- {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09} = {CB43561E-A6F8-49E2-96A2-3F2BA1FFF21E}
+ {9F53807E-9382-47BD-8371-E5D04F517E9C} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {2F914112-2657-49EC-8EA6-3BA63340DE27} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {0A13F602-B497-4BC1-ABD8-03CA8E95B2AF} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
{C70D3509-57C4-4326-90C1-2EC0AE34848D} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {C78D02D0-A366-4EC6-A248-AA8E64C4BA18} = {97555540-8163-4D0F-BCAC-EFA0FFED3453}
- {C8C6183C-B03C-11DD-B471-DFD256D89593} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
- {C9E0BD1D-B175-4A91-8380-3FDC81FAB9D7} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
- {CAB69303-0F02-4C68-A12E-FFE55DB52526} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {CAE2D1E6-3F19-492F-A35C-68AA7ACAD6D3} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {CD2FD73A-6AAB-4886-B887-760D18E8B635} = {EB684A4B-98F7-4E68-8EA7-EA74ACF7060B}
- {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
- {CE1426F6-7D2B-4574-9929-58387BF7B05F} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {D13F055D-4428-48F4-ABF6-18359C76EDB0} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {D2250C20-3A94-4FB9-AF73-11BC5B73884B} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
- {D314F1B3-9299-4866-8362-08BF811B0FA3} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {D3E6C0FD-54C7-4FF2-9AE1-72F2DAFD820C} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
- {D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
- {D6047981-23AE-4623-9373-514FDAFAE60F} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
- {D703D7A0-EDC1-4FE6-9E22-56154155B24E} = {97555540-8163-4D0F-BCAC-EFA0FFED3453}
- {D7589D0D-304E-4589-85A4-153B7D84B07F} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
- {D7A94F58-576A-45D9-A45F-EB87C63ABBB0} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
- {D7ED06E8-6138-4CE3-A906-5EF1D9C804E0} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
- {D9DDAF60-663F-49CC-90DC-3D08CC3D1B28} = {B6867423-23BD-4588-9321-2D500F128A3D}
+ {7D456640-3619-4D23-A56D-E0084400CCBF} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {82F5BFE5-FDCE-47D4-8B38-BEEBED561681} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {C2A444C2-9D74-4AD7-AE7C-04F5EDA17060} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {300C6A09-663E-48B6-8E07-A0D50CAF8F25} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {226B3533-1FF3-42F6-A8E3-C4DDBC955290} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {B0D5BD91-6153-4CA6-BC2F-4E3BD43E5DB7} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {65C78BBB-8FCB-48E4-94C8-1F0F981929AF} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {182D578D-2DAC-4BB7-AFEC-9A2855E56F94} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
{DA5C6FCB-FCFD-49B8-8DDA-8351638096DB} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {C0C7DA58-C90D-4BDE-AE44-588997339F5D} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {FA660037-EB40-4A43-AA9D-9653C57F2789} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {3E6B24F6-9FA9-4066-859E-BF747FA3080A} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {4B60E8B8-416F-40B2-8A54-F75970A21992} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {256DECCE-9886-4C21-96A5-EE47DF5E07E9} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {CAB69303-0F02-4C68-A12E-FFE55DB52526} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {A464166F-8507-49B4-9B02-5CB77C498B25} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
{E07D267C-34C3-4DDB-8B41-94697808714A} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {E13045CD-7E1F-4A41-9B18-8D288B2E7B41} = {846901FD-A619-4BD5-A303-38174730CDD6}
- {E1D0B89E-257B-4BCA-A0C6-A2CD997A2FDC} = {846901FD-A619-4BD5-A303-38174730CDD6}
- {E3749617-BA3D-4230-B54C-B758E56D9FA5} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
- {E3DF045F-2174-4685-9CF7-0630A79F324B} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {E6766F81-1FCD-4CD7-BC16-E36964A14867} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
- {E750512D-FC7C-4C98-BF04-0A0DAF882055} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
- {E7B11CF0-FE40-4A69-AE20-1B882F4D7585} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {E99DA267-BE90-4F45-88A1-6919DB2C7567} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
- {EB79415F-2F17-4BDC-AADD-4CA4C2D21B73} = {846901FD-A619-4BD5-A303-38174730CDD6}
- {EC8B7909-62AF-470D-A75D-E1D89C837142} = {B353A6A5-9551-4B76-908E-0F0A9B31E4CE}
- {ECFC2BEC-9FC0-4AD9-9649-5F26793F65FC} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
- {ED19720A-8F14-D3FC-9C6D-EEB5AE4D5BD7} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
- {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
+ {7A0BA0C5-0D90-49AE-919A-4BE096F69E4F} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {9D13D9B8-6C28-42A7-935C-B769EBC55BAA} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
+ {21C76E6E-8B38-44D6-8148-B589C13B9554} = {EB684A4B-98F7-4E68-8EA7-EA74ACF7060B}
{EFBB1436-A63F-4CD8-9E99-B89226E782EC} = {EB684A4B-98F7-4E68-8EA7-EA74ACF7060B}
- {F22022F0-2D3B-5610-4E80-C674A8E01C5A} = {1AFC1EC3-24FA-4260-B099-76319EC9977A}
- {F4F4BCAA-EA59-445C-A119-3E6C29647A51} = {CB43561E-A6F8-49E2-96A2-3F2BA1FFF21E}
- {F54ABC59-5C00-414A-A9BA-BAF26D1699F0} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
- {F7790A54-4078-4E4A-8231-818BE9FB1F94} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {F9810DE8-CBC3-4605-A7B1-ECA2D5292FD7} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
- {FA39524D-3067-4141-888D-28A86C66F2B9} = {1174D37F-6ABB-45DA-81B3-C631281273B7}
- {FA537565-7B03-4FFC-AF15-F7A979B72E22} = {97555540-8163-4D0F-BCAC-EFA0FFED3453}
- {FA660037-EB40-4A43-AA9D-9653C57F2789} = {2325D8C4-8EF5-42AC-8900-492225750DE4}
- {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA}
- {FD683DD6-D9BF-4B1B-AB6D-A3AC03EDAA4D} = {B6867423-23BD-4588-9321-2D500F128A3D}
+ {24A5AC7C-280B-4899-9153-6BA570A081E7} = {EB684A4B-98F7-4E68-8EA7-EA74ACF7060B}
+ {4052059A-D72B-4183-B5C2-9D1B099E9E35} = {EB684A4B-98F7-4E68-8EA7-EA74ACF7060B}
+ {0026A376-C4F1-4575-A1BA-578C69F07013} = {EB684A4B-98F7-4E68-8EA7-EA74ACF7060B}
+ {CD2FD73A-6AAB-4886-B887-760D18E8B635} = {EB684A4B-98F7-4E68-8EA7-EA74ACF7060B}
+ {B802A2FE-E4E2-4F5A-905A-D5128875C954} = {EB684A4B-98F7-4E68-8EA7-EA74ACF7060B}
EndGlobalSection
EndGlobal
diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc
index 4db143d..1c2f7c4 100644
--- a/chrome/renderer/render_view.cc
+++ b/chrome/renderer/render_view.cc
@@ -86,8 +86,8 @@
#include "base/gfx/gdi_util.h"
#include "base/gfx/native_theme.h"
#include "chrome/common/gfx/emf.h"
-#include "chrome/views/controls/message_box_view.h"
#include "skia/ext/vector_canvas.h"
+#include "views/controls/message_box_view.h"
#endif
using base::Time;
diff --git a/chrome/test/automated_ui_tests/automated_ui_tests.cc b/chrome/test/automated_ui_tests/automated_ui_tests.cc
index bd66201..098ddd7 100644
--- a/chrome/test/automated_ui_tests/automated_ui_tests.cc
+++ b/chrome/test/automated_ui_tests/automated_ui_tests.cc
@@ -25,8 +25,8 @@
#include "chrome/test/automation/tab_proxy.h"
#include "chrome/test/automation/window_proxy.h"
#include "chrome/test/ui/ui_test.h"
-#include "chrome/views/view.h"
#include "googleurl/src/gurl.h"
+#include "views/view.h"
namespace {
diff --git a/chrome/test/automation/automation_proxy.cc b/chrome/test/automation/automation_proxy.cc
index 5489745..f005b92 100644
--- a/chrome/test/automation/automation_proxy.cc
+++ b/chrome/test/automation/automation_proxy.cc
@@ -18,10 +18,9 @@
#include "chrome/test/automation/browser_proxy.h"
#include "chrome/test/automation/tab_proxy.h"
#include "chrome/test/automation/window_proxy.h"
-
#if defined(OS_WIN)
// TODO(port): Enable when dialog_delegate is ported.
-#include "chrome/views/window/dialog_delegate.h"
+#include "views/window/dialog_delegate.h"
#endif
using base::TimeDelta;
diff --git a/chrome/test/automation/automation_proxy_uitest.cc b/chrome/test/automation/automation_proxy_uitest.cc
index b782a6c..f997166 100644
--- a/chrome/test/automation/automation_proxy_uitest.cc
+++ b/chrome/test/automation/automation_proxy_uitest.cc
@@ -19,8 +19,8 @@
#include "chrome/test/automation/tab_proxy.h"
#include "chrome/test/automation/window_proxy.h"
#include "chrome/test/ui/ui_test.h"
-#include "chrome/views/event.h"
#include "net/base/net_util.h"
+#include "views/event.h"
class AutomationProxyTest : public UITest {
protected:
diff --git a/chrome/test/interactive_ui/view_event_test_base.cc b/chrome/test/interactive_ui/view_event_test_base.cc
index 0af65ef..785688e 100644
--- a/chrome/test/interactive_ui/view_event_test_base.cc
+++ b/chrome/test/interactive_ui/view_event_test_base.cc
@@ -6,8 +6,8 @@
#include "base/message_loop.h"
#include "chrome/browser/automation/ui_controls.h"
-#include "chrome/views/view.h"
-#include "chrome/views/window/window.h"
+#include "views/view.h"
+#include "views/window/window.h"
namespace {
diff --git a/chrome/test/interactive_ui/view_event_test_base.h b/chrome/test/interactive_ui/view_event_test_base.h
index fa01e81..1bb7bd0 100644
--- a/chrome/test/interactive_ui/view_event_test_base.h
+++ b/chrome/test/interactive_ui/view_event_test_base.h
@@ -7,8 +7,8 @@
#include "base/message_loop.h"
#include "base/thread.h"
-#include "chrome/views/window/window_delegate.h"
#include "testing/gtest/include/gtest/gtest.h"
+#include "views/window/window_delegate.h"
class Task;
diff --git a/chrome/test/ui_test_utils.cc b/chrome/test/ui_test_utils.cc
index 6d9094b..2e92105 100644
--- a/chrome/test/ui_test_utils.cc
+++ b/chrome/test/ui_test_utils.cc
@@ -12,8 +12,8 @@
#include "chrome/browser/tab_contents/tab_contents.h"
#include "chrome/common/notification_registrar.h"
#include "chrome/common/notification_service.h"
-#include "chrome/views/widget/accelerator_handler.h"
#include "googleurl/src/gurl.h"
+#include "views/widget/accelerator_handler.h"
namespace ui_test_utils {
diff --git a/chrome/test/unit/unittests.vcproj b/chrome/test/unit/unittests.vcproj
index a27f4b8..9ea93b5 100644
--- a/chrome/test/unit/unittests.vcproj
+++ b/chrome/test/unit/unittests.vcproj
@@ -1044,27 +1044,27 @@
Name="views"
>
<File
- RelativePath="..\..\views\focus\focus_manager_unittest.cc"
+ RelativePath="..\..\..\views\focus\focus_manager_unittest.cc"
>
</File>
<File
- RelativePath="..\..\views\grid_layout_unittest.cc"
+ RelativePath="..\..\..\views\grid_layout_unittest.cc"
>
</File>
<File
- RelativePath="..\..\views\controls\label_unittest.cc"
+ RelativePath="..\..\..\views\controls\label_unittest.cc"
>
</File>
<File
- RelativePath="..\..\views\controls\table\table_view_unittest.cc"
+ RelativePath="..\..\..\views\controls\table\table_view_unittest.cc"
>
</File>
<File
- RelativePath="..\..\views\controls\tree\tree_node_iterator_unittest.cc"
+ RelativePath="..\..\..\views\controls\tree\tree_node_iterator_unittest.cc"
>
</File>
<File
- RelativePath="..\..\views\view_unittest.cc"
+ RelativePath="..\..\..\views\view_unittest.cc"
>
</File>
</Filter>
diff --git a/chrome/views/DEPS b/chrome/views/DEPS
deleted file mode 100644
index e0edd3e..0000000
--- a/chrome/views/DEPS
+++ /dev/null
@@ -1,10 +0,0 @@
-include_rules = [
- "+chrome/app",
- "+chrome/app/theme",
- "+chrome/browser",
- "+chrome/browser/views",
- "+grit", # For generated headers
- "+skia/ext",
- "+skia/include",
- "+webkit/glue",
-]
diff --git a/chrome/views/accelerator.cc b/chrome/views/accelerator.cc
deleted file mode 100644
index b1c6191..0000000
--- a/chrome/views/accelerator.cc
+++ /dev/null
@@ -1,130 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/accelerator.h"
-
-#include <windows.h>
-
-#include "app/l10n_util.h"
-#include "base/logging.h"
-#include "base/string_util.h"
-#include "grit/generated_resources.h"
-
-namespace views {
-
-std::wstring Accelerator::GetShortcutText() const {
- int string_id = 0;
- switch(key_code_) {
- case VK_TAB:
- string_id = IDS_TAB_KEY;
- break;
- case VK_RETURN:
- string_id = IDS_ENTER_KEY;
- break;
- case VK_ESCAPE:
- string_id = IDS_ESC_KEY;
- break;
- case VK_PRIOR:
- string_id = IDS_PAGEUP_KEY;
- break;
- case VK_NEXT:
- string_id = IDS_PAGEDOWN_KEY;
- break;
- case VK_END:
- string_id = IDS_END_KEY;
- break;
- case VK_HOME:
- string_id = IDS_HOME_KEY;
- break;
- case VK_INSERT:
- string_id = IDS_INSERT_KEY;
- break;
- case VK_DELETE:
- string_id = IDS_DELETE_KEY;
- break;
- case VK_F1:
- string_id = IDS_F1_KEY;
- break;
- case VK_F11:
- string_id = IDS_F11_KEY;
- break;
- }
-
- std::wstring shortcut;
- if (!string_id) {
- // Our fallback is to try translate the key code to a regular character
- // unless it is one of digits (VK_0 to VK_9). Some keyboard
- // layouts have characters other than digits assigned in
- // an unshifted mode (e.g. French AZERY layout has 'a with grave
- // accent' for '0'). For display in the menu (e.g. Ctrl-0 for the
- // default zoom level), we leave VK_[0-9] alone without translation.
- wchar_t key;
- if (key_code_ >= '0' && key_code_ <= '9')
- key = key_code_;
- else
- key = LOWORD(::MapVirtualKeyW(key_code_, MAPVK_VK_TO_CHAR));
- shortcut += key;
- } else {
- shortcut = l10n_util::GetString(string_id);
- }
-
- // Checking whether the character used for the accelerator is alphanumeric.
- // If it is not, then we need to adjust the string later on if the locale is
- // right-to-left. See below for more information of why such adjustment is
- // required.
- std::wstring shortcut_rtl;
- bool adjust_shortcut_for_rtl = false;
- if (l10n_util::GetTextDirection() == l10n_util::RIGHT_TO_LEFT &&
- shortcut.length() == 1 &&
- !IsAsciiAlpha(shortcut.at(0)) &&
- !IsAsciiDigit(shortcut.at(0))) {
- adjust_shortcut_for_rtl = true;
- shortcut_rtl.assign(shortcut);
- }
-
- if (IsShiftDown())
- shortcut = l10n_util::GetStringF(IDS_SHIFT_MODIFIER, shortcut);
-
- // Note that we use 'else-if' in order to avoid using Ctrl+Alt as a shortcut.
- // See http://blogs.msdn.com/oldnewthing/archive/2004/03/29/101121.aspx for
- // more information.
- if (IsCtrlDown())
- shortcut = l10n_util::GetStringF(IDS_CONTROL_MODIFIER, shortcut);
- else if (IsAltDown())
- shortcut = l10n_util::GetStringF(IDS_ALT_MODIFIER, shortcut);
-
- // For some reason, menus in Windows ignore standard Unicode directionality
- // marks (such as LRE, PDF, etc.). On RTL locales, we use RTL menus and
- // therefore any text we draw for the menu items is drawn in an RTL context.
- // Thus, the text "Ctrl++" (which we currently use for the Zoom In option)
- // appears as "++Ctrl" in RTL because the Unicode BiDi algorithm puts
- // punctuations on the left when the context is right-to-left. Shortcuts that
- // do not end with a punctuation mark (such as "Ctrl+H" do not have this
- // problem).
- //
- // The only way to solve this problem is to adjust the string if the locale
- // is RTL so that it is drawn correnctly in an RTL context. Instead of
- // returning "Ctrl++" in the above example, we return "++Ctrl". This will
- // cause the text to appear as "Ctrl++" when Windows draws the string in an
- // RTL context because the punctunation no longer appears at the end of the
- // string.
- //
- // TODO(idana) bug# 1232732: this hack can be avoided if instead of using
- // views::Menu we use views::MenuItemView because the latter is a View
- // subclass and therefore it supports marking text as RTL or LTR using
- // standard Unicode directionality marks.
- if (adjust_shortcut_for_rtl) {
- int key_length = static_cast<int>(shortcut_rtl.length());
- DCHECK_GT(key_length, 0);
- shortcut_rtl.append(L"+");
-
- // Subtracting the size of the shortcut key and 1 for the '+' sign.
- shortcut_rtl.append(shortcut, 0, shortcut.length() - key_length - 1);
- shortcut.swap(shortcut_rtl);
- }
-
- return shortcut;
-}
-
-} // namespace views
diff --git a/chrome/views/accelerator.h b/chrome/views/accelerator.h
deleted file mode 100644
index a851b0c..0000000
--- a/chrome/views/accelerator.h
+++ /dev/null
@@ -1,101 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// This class describe a keyboard accelerator (or keyboard shortcut).
-// Keyboard accelerators are registered with the FocusManager.
-// It has a copy constructor and assignment operator so that it can be copied.
-// It also defines the < operator so that it can be used as a key in a std::map.
-//
-
-#ifndef CHROME_VIEWS_ACCELERATOR_H_
-#define CHROME_VIEWS_ACCELERATOR_H_
-
-#include <string>
-
-#include "chrome/views/event.h"
-
-namespace views {
-
-class Accelerator {
- public:
- Accelerator(int keycode,
- bool shift_pressed, bool ctrl_pressed, bool alt_pressed)
- : key_code_(keycode) {
- modifiers_ = 0;
- if (shift_pressed)
- modifiers_ |= Event::EF_SHIFT_DOWN;
- if (ctrl_pressed)
- modifiers_ |= Event::EF_CONTROL_DOWN;
- if (alt_pressed)
- modifiers_ |= Event::EF_ALT_DOWN;
- }
-
- Accelerator(const Accelerator& accelerator) {
- key_code_ = accelerator.key_code_;
- modifiers_ = accelerator.modifiers_;
- }
-
- ~Accelerator() { };
-
- Accelerator& operator=(const Accelerator& accelerator) {
- if (this != &accelerator) {
- key_code_ = accelerator.key_code_;
- modifiers_ = accelerator.modifiers_;
- }
- return *this;
- }
-
- // We define the < operator so that the KeyboardShortcut can be used as a key
- // in a std::map.
- bool operator <(const Accelerator& rhs) const {
- if (key_code_ != rhs.key_code_)
- return key_code_ < rhs.key_code_;
- return modifiers_ < rhs.modifiers_;
- }
-
- bool operator ==(const Accelerator& rhs) const {
- return (key_code_ == rhs.key_code_) && (modifiers_ == rhs.modifiers_);
- }
-
- bool operator !=(const Accelerator& rhs) const {
- return !(*this == rhs);
- }
-
- bool IsShiftDown() const {
- return (modifiers_ & Event::EF_SHIFT_DOWN) == Event::EF_SHIFT_DOWN;
- }
-
- bool IsCtrlDown() const {
- return (modifiers_ & Event::EF_CONTROL_DOWN) == Event::EF_CONTROL_DOWN;
- }
-
- bool IsAltDown() const {
- return (modifiers_ & Event::EF_ALT_DOWN) == Event::EF_ALT_DOWN;
- }
-
- int GetKeyCode() const {
- return key_code_;
- }
-
- // Returns a string with the localized shortcut if any.
- std::wstring GetShortcutText() const;
-
- private:
- // The window keycode (VK_...).
- int key_code_;
-
- // The state of the Shift/Ctrl/Alt keys (see event.h).
- int modifiers_;
-};
-
-// An interface that classes that want to register for keyboard accelerators
-// should implement.
-class AcceleratorTarget {
- public:
- // This method should return true if the accelerator was processed.
- virtual bool AcceleratorPressed(const Accelerator& accelerator) = 0;
-};
-}
-
-#endif // CHROME_VIEWS_ACCELERATOR_H_
diff --git a/chrome/views/accessibility/view_accessibility.cc b/chrome/views/accessibility/view_accessibility.cc
deleted file mode 100644
index be91849..0000000
--- a/chrome/views/accessibility/view_accessibility.cc
+++ /dev/null
@@ -1,698 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/accessibility/view_accessibility.h"
-
-#include "chrome/views/accessibility/view_accessibility_wrapper.h"
-#include "chrome/views/widget/widget.h"
-
-HRESULT ViewAccessibility::Initialize(views::View* view) {
- if (!view) {
- return E_INVALIDARG;
- }
-
- view_ = view;
- return S_OK;
-}
-
-// TODO(klink): Handle case where child View is not contained by parent.
-STDMETHODIMP ViewAccessibility::accHitTest(LONG x_left, LONG y_top,
- VARIANT* child) {
- if (!child) {
- return E_INVALIDARG;
- }
-
- gfx::Point pt(x_left, y_top);
- views::View::ConvertPointToView(NULL, view_, &pt);
-
- if (!view_->HitTest(pt)) {
- // If containing parent is not hit, return with failure.
- child->vt = VT_EMPTY;
- return S_FALSE;
- }
-
- int child_count = view_->GetChildViewCount();
- bool child_hit = false;
- views::View* child_view = NULL;
- for (int child_id = 0; child_id < child_count; ++child_id) {
- // Search for hit within any of the children.
- child_view = view_->GetChildViewAt(child_id);
- views::View::ConvertPointToView(view_, child_view, &pt);
- if (child_view->HitTest(pt)) {
- // Store child_id (adjusted with +1 to convert to MSAA indexing).
- child->lVal = child_id + 1;
- child_hit = true;
- break;
- }
- // Convert point back to parent view to test next child.
- views::View::ConvertPointToView(child_view, view_, &pt);
- }
-
- child->vt = VT_I4;
-
- if (!child_hit) {
- // No child hit, return parent id.
- child->lVal = CHILDID_SELF;
- } else {
- if (child_view == NULL) {
- return E_FAIL;
- } else if (child_view->GetChildViewCount() != 0) {
- // Retrieve IDispatch for child, if it is not a leaf.
- child->vt = VT_DISPATCH;
- if ((GetViewAccessibilityWrapper(child_view))->
- GetInstance(IID_IAccessible,
- reinterpret_cast<void**>(&child->pdispVal)) == S_OK) {
- // Increment the reference count for the retrieved interface.
- child->pdispVal->AddRef();
- return S_OK;
- } else {
- return E_NOINTERFACE;
- }
- }
- }
-
- return S_OK;
-}
-
-STDMETHODIMP ViewAccessibility::accLocation(LONG* x_left, LONG* y_top,
- LONG* width, LONG* height,
- VARIANT var_id) {
- if (var_id.vt != VT_I4 || !x_left || !y_top || !width || !height) {
- return E_INVALIDARG;
- }
-
- gfx::Rect view_bounds;
- // Retrieving the parent View to be used for converting from view-to-screen
- // coordinates.
- views::View* parent = view_->GetParent();
-
- if (parent == NULL) {
- // If no parent, remain within the same View.
- parent = view_;
- }
-
- if (var_id.lVal == CHILDID_SELF) {
- // Retrieve active View's bounds.
- view_bounds = view_->bounds();
- } else {
- // Check to see if child is out-of-bounds.
- if (!IsValidChild((var_id.lVal - 1), view_)) {
- return E_INVALIDARG;
- }
- // Retrieve child bounds.
- view_bounds = view_->GetChildViewAt(var_id.lVal - 1)->bounds();
- // Parent View is current View.
- parent = view_;
- }
-
- if (!view_bounds.IsEmpty()) {
- *width = view_bounds.width();
- *height = view_bounds.height();
-
- gfx::Point topleft(view_bounds.origin());
- views::View::ConvertPointToScreen(parent, &topleft);
- *x_left = topleft.x();
- *y_top = topleft.y();
- } else {
- return E_FAIL;
- }
- return S_OK;
-}
-
-STDMETHODIMP ViewAccessibility::accNavigate(LONG nav_dir, VARIANT start,
- VARIANT* end) {
- if (start.vt != VT_I4 || !end) {
- return E_INVALIDARG;
- }
-
- switch (nav_dir) {
- case NAVDIR_FIRSTCHILD:
- case NAVDIR_LASTCHILD: {
- if (start.lVal != CHILDID_SELF) {
- // Start of navigation must be on the View itself.
- return E_INVALIDARG;
- } else if (view_->GetChildViewCount() == 0) {
- // No children found.
- return S_FALSE;
- }
-
- // Set child_id based on first or last child.
- int child_id = 0;
- if (nav_dir == NAVDIR_LASTCHILD) {
- child_id = view_->GetChildViewCount() - 1;
- }
-
- views::View* child = view_->GetChildViewAt(child_id);
-
- if (child->GetChildViewCount() != 0) {
- end->vt = VT_DISPATCH;
- if ((GetViewAccessibilityWrapper(child))->
- GetInstance(IID_IAccessible,
- reinterpret_cast<void**>(&end->pdispVal)) == S_OK) {
- // Increment the reference count for the retrieved interface.
- end->pdispVal->AddRef();
- return S_OK;
- } else {
- return E_NOINTERFACE;
- }
- } else {
- end->vt = VT_I4;
- // Set return child lVal, adjusted for MSAA indexing. (MSAA
- // child indexing starts with 1, whereas View indexing starts with 0).
- end->lVal = child_id + 1;
- }
- break;
- }
- case NAVDIR_LEFT:
- case NAVDIR_UP:
- case NAVDIR_PREVIOUS:
- case NAVDIR_RIGHT:
- case NAVDIR_DOWN:
- case NAVDIR_NEXT: {
- // Retrieve parent to access view index and perform bounds checking.
- views::View* parent = view_->GetParent();
- if (!parent) {
- return E_FAIL;
- }
-
- if (start.lVal == CHILDID_SELF) {
- int view_index = parent->GetChildIndex(view_);
- // Check navigation bounds, adjusting for View child indexing (MSAA
- // child indexing starts with 1, whereas View indexing starts with 0).
- if (!IsValidNav(nav_dir, view_index, -1,
- parent->GetChildViewCount())) {
- // Navigation attempted to go out-of-bounds.
- end->vt = VT_EMPTY;
- return S_FALSE;
- } else {
- if (IsNavDirNext(nav_dir)) {
- view_index += 1;
- } else {
- view_index -=1;
- }
- }
-
- views::View* child = parent->GetChildViewAt(view_index);
- if (child->GetChildViewCount() != 0) {
- end->vt = VT_DISPATCH;
- // Retrieve IDispatch for non-leaf child.
- if ((GetViewAccessibilityWrapper(child))->
- GetInstance(IID_IAccessible,
- reinterpret_cast<void**>(&end->pdispVal)) == S_OK) {
- // Increment the reference count for the retrieved interface.
- end->pdispVal->AddRef();
- return S_OK;
- } else {
- return E_NOINTERFACE;
- }
- } else {
- end->vt = VT_I4;
- // Modifying view_index to give lVal correct MSAA-based value. (MSAA
- // child indexing starts with 1, whereas View indexing starts with 0).
- end->lVal = view_index + 1;
- }
- } else {
- // Check navigation bounds, adjusting for MSAA child indexing (MSAA
- // child indexing starts with 1, whereas View indexing starts with 0).
- if (!IsValidNav(nav_dir, start.lVal, 0,
- parent->GetChildViewCount() + 1)) {
- // Navigation attempted to go out-of-bounds.
- end->vt = VT_EMPTY;
- return S_FALSE;
- } else {
- if (IsNavDirNext(nav_dir)) {
- start.lVal += 1;
- } else {
- start.lVal -= 1;
- }
- }
-
- HRESULT result = this->get_accChild(start, &end->pdispVal);
- if (result == S_FALSE) {
- // Child is a leaf.
- end->vt = VT_I4;
- end->lVal = start.lVal;
- } else if (result == E_INVALIDARG) {
- return E_INVALIDARG;
- } else {
- // Child is not a leaf.
- end->vt = VT_DISPATCH;
- }
- }
- break;
- }
- default:
- return E_INVALIDARG;
- }
- // Navigation performed correctly. Global return for this function, if no
- // error triggered an escape earlier.
- return S_OK;
-}
-
-STDMETHODIMP ViewAccessibility::get_accChild(VARIANT var_child,
- IDispatch** disp_child) {
- if (var_child.vt != VT_I4 || !disp_child) {
- return E_INVALIDARG;
- }
-
- // If var_child is the parent, remain with the same IDispatch.
- if (var_child.lVal == CHILDID_SELF) {
- return S_OK;
- }
-
- views::View* child_view = NULL;
- bool get_iaccessible = false;
-
- // Check to see if child is out-of-bounds.
- if (IsValidChild((var_child.lVal - 1), view_)) {
- child_view = view_->GetChildViewAt(var_child.lVal - 1);
- } else {
- // Child is located elsewhere in the hierarchy, get ID and adjust for MSAA.
- child_view = view_->GetViewByID(static_cast<int>(var_child.lVal));
- get_iaccessible = true;
- }
-
- if (!child_view) {
- // No child found.
- *disp_child = NULL;
- return E_FAIL;
- }
-
- if (get_iaccessible || child_view->GetChildViewCount() != 0) {
- // Retrieve the IUnknown interface for the requested child view, and
- // assign the IDispatch returned.
- if ((GetViewAccessibilityWrapper(child_view))->
- GetInstance(IID_IAccessible,
- reinterpret_cast<void**>(disp_child)) == S_OK) {
- // Increment the reference count for the retrieved interface.
- (*disp_child)->AddRef();
- return S_OK;
- } else {
- // No interface, return failure.
- return E_NOINTERFACE;
- }
- } else {
- // When at a leaf, children are handled by the parent object.
- *disp_child = NULL;
- return S_FALSE;
- }
-}
-
-STDMETHODIMP ViewAccessibility::get_accChildCount(LONG* child_count) {
- if (!child_count || !view_) {
- return E_INVALIDARG;
- }
-
- *child_count = view_->GetChildViewCount();
- return S_OK;
-}
-
-STDMETHODIMP ViewAccessibility::get_accDefaultAction(VARIANT var_id,
- BSTR* def_action) {
- if (var_id.vt != VT_I4 || !def_action) {
- return E_INVALIDARG;
- }
-
- std::wstring temp_action;
-
- if (var_id.lVal == CHILDID_SELF) {
- view_->GetAccessibleDefaultAction(&temp_action);
- } else {
- if (!IsValidChild((var_id.lVal - 1), view_)) {
- return E_INVALIDARG;
- }
- view_->GetChildViewAt(var_id.lVal - 1)->
- GetAccessibleDefaultAction(&temp_action);
- }
- if (!temp_action.empty()) {
- *def_action = CComBSTR(temp_action.c_str()).Detach();
- } else {
- return S_FALSE;
- }
-
- return S_OK;
-}
-
-STDMETHODIMP ViewAccessibility::get_accDescription(VARIANT var_id, BSTR* desc) {
- if (var_id.vt != VT_I4 || !desc) {
- return E_INVALIDARG;
- }
-
- std::wstring temp_desc;
-
- if (var_id.lVal == CHILDID_SELF) {
- view_->GetTooltipText(0, 0, &temp_desc);
- } else {
- if (!IsValidChild((var_id.lVal - 1), view_)) {
- return E_INVALIDARG;
- }
- view_->GetChildViewAt(var_id.lVal - 1)->GetTooltipText(0, 0, &temp_desc);
- }
- if (!temp_desc.empty()) {
- *desc = CComBSTR(temp_desc.c_str()).Detach();
- } else {
- return S_FALSE;
- }
-
- return S_OK;
-}
-
-STDMETHODIMP ViewAccessibility::get_accFocus(VARIANT* focus_child) {
- if (!focus_child) {
- return E_INVALIDARG;
- }
-
- if (view_->GetChildViewCount() == 0 && view_->HasFocus()) {
- // Parent view has focus.
- focus_child->vt = VT_I4;
- focus_child->lVal = CHILDID_SELF;
- } else {
- bool has_focus = false;
- int child_count = view_->GetChildViewCount();
- // Search for child view with focus.
- for (int child_id = 0; child_id < child_count; ++child_id) {
- if (view_->GetChildViewAt(child_id)->HasFocus()) {
- focus_child->vt = VT_I4;
- focus_child->lVal = child_id + 1;
-
- // If child view is no leaf, retrieve IDispatch.
- if (view_->GetChildViewAt(child_id)->GetChildViewCount() != 0) {
- focus_child->vt = VT_DISPATCH;
- this->get_accChild(*focus_child, &focus_child->pdispVal);
- }
- has_focus = true;
- break;
- }
- }
- // No current focus on any of the children.
- if (!has_focus) {
- focus_child->vt = VT_EMPTY;
- return S_FALSE;
- }
- }
-
- return S_OK;
-}
-
-STDMETHODIMP ViewAccessibility::get_accKeyboardShortcut(VARIANT var_id,
- BSTR* acc_key) {
- if (var_id.vt != VT_I4 || !acc_key) {
- return E_INVALIDARG;
- }
-
- std::wstring temp_key;
-
- if (var_id.lVal == CHILDID_SELF) {
- view_->GetAccessibleKeyboardShortcut(&temp_key);
- } else {
- if (!IsValidChild((var_id.lVal - 1), view_)) {
- return E_INVALIDARG;
- }
- view_->GetChildViewAt(var_id.lVal - 1)->
- GetAccessibleKeyboardShortcut(&temp_key);
- }
- if (!temp_key.empty()) {
- *acc_key = CComBSTR(temp_key.c_str()).Detach();
- } else {
- return S_FALSE;
- }
-
- return S_OK;
-}
-
-STDMETHODIMP ViewAccessibility::get_accName(VARIANT var_id, BSTR* name) {
- if (var_id.vt != VT_I4 || !name) {
- return E_INVALIDARG;
- }
-
- std::wstring temp_name;
-
- if (var_id.lVal == CHILDID_SELF) {
- // Retrieve the parent view's name.
- view_->GetAccessibleName(&temp_name);
- } else {
- if (!IsValidChild((var_id.lVal - 1), view_)) {
- return E_INVALIDARG;
- }
- // Retrieve the child view's name.
- view_->GetChildViewAt(var_id.lVal - 1)->GetAccessibleName(&temp_name);
- }
- if (!temp_name.empty()) {
- // Return name retrieved.
- *name = CComBSTR(temp_name.c_str()).Detach();
- } else {
- // If view has no name, return S_FALSE.
- return S_FALSE;
- }
-
- return S_OK;
-}
-
-STDMETHODIMP ViewAccessibility::get_accParent(IDispatch** disp_parent) {
- if (!disp_parent) {
- return E_INVALIDARG;
- }
-
- views::View* parent_view = view_->GetParent();
-
- if (!parent_view) {
- // This function can get called during teardown of WidetWin so we
- // should bail out if we fail to get the HWND.
- if (!view_->GetWidget() || !view_->GetWidget()->GetNativeView()) {
- *disp_parent = NULL;
- return S_FALSE;
- }
-
- // For a View that has no parent (e.g. root), point the accessible parent to
- // the default implementation, to interface with Windows' hierarchy and to
- // support calls from e.g. WindowFromAccessibleObject.
- HRESULT hr =
- ::AccessibleObjectFromWindow(view_->GetWidget()->GetNativeView(),
- OBJID_WINDOW, IID_IAccessible,
- reinterpret_cast<void**>(disp_parent));
-
- if (!SUCCEEDED(hr)) {
- *disp_parent = NULL;
- return S_FALSE;
- }
-
- return S_OK;
- }
-
- // Retrieve the IUnknown interface for the parent view, and assign the
- // IDispatch returned.
- if ((GetViewAccessibilityWrapper(parent_view))->
- GetInstance(IID_IAccessible,
- reinterpret_cast<void**>(disp_parent)) == S_OK) {
- // Increment the reference count for the retrieved interface.
- (*disp_parent)->AddRef();
- return S_OK;
- } else {
- return E_NOINTERFACE;
- }
-}
-
-STDMETHODIMP ViewAccessibility::get_accRole(VARIANT var_id, VARIANT* role) {
- if (var_id.vt != VT_I4 || !role) {
- return E_INVALIDARG;
- }
-
- AccessibilityTypes::Role acc_role;
-
- if (var_id.lVal == CHILDID_SELF) {
- // Retrieve parent role.
- if (!view_->GetAccessibleRole(&acc_role)) {
- return E_FAIL;
- }
- } else {
- if (!IsValidChild((var_id.lVal - 1), view_)) {
- return E_INVALIDARG;
- }
- // Retrieve child role.
- if (!view_->GetChildViewAt(var_id.lVal - 1)->GetAccessibleRole(&acc_role)) {
- role->vt = VT_EMPTY;
- return E_FAIL;
- }
- }
-
- role->vt = VT_I4;
- role->lVal = MSAARole(acc_role);
- return S_OK;
-}
-
-STDMETHODIMP ViewAccessibility::get_accState(VARIANT var_id, VARIANT* state) {
- if (var_id.vt != VT_I4 || !state) {
- return E_INVALIDARG;
- }
-
- state->vt = VT_I4;
-
- if (var_id.lVal == CHILDID_SELF) {
- // Retrieve all currently applicable states of the parent.
- this->SetState(state, view_);
- } else {
- if (!IsValidChild((var_id.lVal - 1), view_)) {
- return E_INVALIDARG;
- }
- // Retrieve all currently applicable states of the child.
- this->SetState(state, view_->GetChildViewAt(var_id.lVal - 1));
- }
-
- // Make sure that state is not empty, and has the proper type.
- if (state->vt == VT_EMPTY)
- return E_FAIL;
-
- return S_OK;
-}
-
-// Helper functions.
-
-bool ViewAccessibility::IsValidChild(int child_id, views::View* view) const {
- if (((child_id) < 0) ||
- ((child_id) >= view->GetChildViewCount())) {
- return false;
- }
- return true;
-}
-
-bool ViewAccessibility::IsNavDirNext(int nav_dir) const {
- if (nav_dir == NAVDIR_RIGHT || nav_dir == NAVDIR_DOWN ||
- nav_dir == NAVDIR_NEXT) {
- return true;
- }
- return false;
-}
-
-bool ViewAccessibility::IsValidNav(int nav_dir, int start_id, int lower_bound,
- int upper_bound) const {
- if (IsNavDirNext(nav_dir)) {
- if ((start_id + 1) > upper_bound) {
- return false;
- }
- } else {
- if ((start_id - 1) <= lower_bound) {
- return false;
- }
- }
- return true;
-}
-
-void ViewAccessibility::SetState(VARIANT* msaa_state, views::View* view) {
- // Default state; all views can have accessibility focus.
- msaa_state->lVal |= STATE_SYSTEM_FOCUSABLE;
-
- if (!view)
- return;
-
- if (!view->IsEnabled()) {
- msaa_state->lVal |= STATE_SYSTEM_UNAVAILABLE;
- }
- if (!view->IsVisible()) {
- msaa_state->lVal |= STATE_SYSTEM_INVISIBLE;
- }
- if (view->IsHotTracked()) {
- msaa_state->lVal |= STATE_SYSTEM_HOTTRACKED;
- }
- if (view->IsPushed()) {
- msaa_state->lVal |= STATE_SYSTEM_PRESSED;
- }
- // Check both for actual View focus, as well as accessibility focus.
- views::View* parent = view->GetParent();
-
- if (view->HasFocus() ||
- (parent && parent->GetAccFocusedChildView() == view)) {
- msaa_state->lVal |= STATE_SYSTEM_FOCUSED;
- }
-
- // Add on any view-specific states.
- AccessibilityTypes::State state;
- view->GetAccessibleState(&state);
-
- msaa_state->lVal |= MSAAState(state);
-}
-
-long ViewAccessibility::MSAARole(AccessibilityTypes::Role role) {
- switch (role) {
- case AccessibilityTypes::ROLE_APPLICATION :
- return ROLE_SYSTEM_APPLICATION;
- case AccessibilityTypes::ROLE_BUTTONDROPDOWN :
- return ROLE_SYSTEM_BUTTONDROPDOWN;
- case AccessibilityTypes::ROLE_GROUPING :
- return ROLE_SYSTEM_GROUPING;
- case AccessibilityTypes::ROLE_PAGETAB :
- return ROLE_SYSTEM_PAGETAB;
- case AccessibilityTypes::ROLE_PUSHBUTTON :
- return ROLE_SYSTEM_PUSHBUTTON;
- case AccessibilityTypes::ROLE_TEXT :
- return ROLE_SYSTEM_TEXT;
- case AccessibilityTypes::ROLE_TOOLBAR :
- return ROLE_SYSTEM_TOOLBAR;
- case AccessibilityTypes::ROLE_CLIENT :
- default:
- // This is the default role for MSAA.
- return ROLE_SYSTEM_CLIENT;
- }
-}
-
-long ViewAccessibility::MSAAState(AccessibilityTypes::State state) {
- switch (state) {
- case AccessibilityTypes::STATE_HASPOPUP :
- return STATE_SYSTEM_HASPOPUP;
- case AccessibilityTypes::STATE_READONLY :
- return STATE_SYSTEM_READONLY;
- default :
- // No default state in MSAA.
- return 0;
- }
-}
-
-// IAccessible functions not supported.
-
-HRESULT ViewAccessibility::accDoDefaultAction(VARIANT var_id) {
- return E_NOTIMPL;
-}
-
-STDMETHODIMP ViewAccessibility::get_accValue(VARIANT var_id, BSTR* value) {
- if (value)
- *value = NULL;
- return E_NOTIMPL;
-}
-
-STDMETHODIMP ViewAccessibility::get_accSelection(VARIANT* selected) {
- if (selected)
- selected->vt = VT_EMPTY;
- return E_NOTIMPL;
-}
-
-STDMETHODIMP ViewAccessibility::accSelect(LONG flagsSelect, VARIANT var_id) {
- return E_NOTIMPL;
-}
-
-STDMETHODIMP ViewAccessibility::get_accHelp(VARIANT var_id, BSTR* help) {
- if (help)
- *help = NULL;
- return E_NOTIMPL;
-}
-
-STDMETHODIMP ViewAccessibility::get_accHelpTopic(BSTR* help_file,
- VARIANT var_id,
- LONG* topic_id) {
- if (help_file) {
- *help_file = NULL;
- }
- if (topic_id) {
- *topic_id = static_cast<LONG>(-1);
- }
- return E_NOTIMPL;
-}
-
-STDMETHODIMP ViewAccessibility::put_accName(VARIANT var_id, BSTR put_name) {
- // Deprecated.
- return E_NOTIMPL;
-}
-
-STDMETHODIMP ViewAccessibility::put_accValue(VARIANT var_id, BSTR put_val) {
- // Deprecated.
- return E_NOTIMPL;
-}
diff --git a/chrome/views/accessibility/view_accessibility.h b/chrome/views/accessibility/view_accessibility.h
deleted file mode 100644
index ba3d995..0000000
--- a/chrome/views/accessibility/view_accessibility.h
+++ /dev/null
@@ -1,144 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_ACCESSIBILITY_VIEW_ACCESSIBILITY_H_
-#define CHROME_VIEWS_ACCESSIBILITY_VIEW_ACCESSIBILITY_H_
-
-#include <atlbase.h>
-#include <atlcom.h>
-
-#include <oleacc.h>
-
-#include "chrome/views/view.h"
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// ViewAccessibility
-//
-// Class implementing the MSAA IAccessible COM interface for a generic View,
-// providing accessibility to be used by screen readers and other assistive
-// technology (AT).
-//
-////////////////////////////////////////////////////////////////////////////////
-class ATL_NO_VTABLE ViewAccessibility
- : public CComObjectRootEx<CComMultiThreadModel>,
- public IDispatchImpl<IAccessible, &IID_IAccessible, &LIBID_Accessibility> {
- public:
- BEGIN_COM_MAP(ViewAccessibility)
- COM_INTERFACE_ENTRY2(IDispatch, IAccessible)
- COM_INTERFACE_ENTRY(IAccessible)
- END_COM_MAP()
-
- ViewAccessibility() {}
- ~ViewAccessibility() {}
-
- HRESULT Initialize(views::View* view);
-
- // Supported IAccessible methods.
-
- // Retrieves the child element or child object at a given point on the screen.
- STDMETHODIMP accHitTest(LONG x_left, LONG y_top, VARIANT* child);
-
- // Retrieves the specified object's current screen location.
- STDMETHODIMP accLocation(LONG* x_left,
- LONG* y_top,
- LONG* width,
- LONG* height,
- VARIANT var_id);
-
- // Traverses to another UI element and retrieves the object.
- STDMETHODIMP accNavigate(LONG nav_dir, VARIANT start, VARIANT* end);
-
- // Retrieves an IDispatch interface pointer for the specified child.
- STDMETHODIMP get_accChild(VARIANT var_child, IDispatch** disp_child);
-
- // Retrieves the number of accessible children.
- STDMETHODIMP get_accChildCount(LONG* child_count);
-
- // Retrieves a string that describes the object's default action.
- STDMETHODIMP get_accDefaultAction(VARIANT var_id, BSTR* default_action);
-
- // Retrieves the tooltip description.
- STDMETHODIMP get_accDescription(VARIANT var_id, BSTR* desc);
-
- // Retrieves the object that has the keyboard focus.
- STDMETHODIMP get_accFocus(VARIANT* focus_child);
-
- // Retrieves the specified object's shortcut.
- STDMETHODIMP get_accKeyboardShortcut(VARIANT var_id, BSTR* access_key);
-
- // Retrieves the name of the specified object.
- STDMETHODIMP get_accName(VARIANT var_id, BSTR* name);
-
- // Retrieves the IDispatch interface of the object's parent.
- STDMETHODIMP get_accParent(IDispatch** disp_parent);
-
- // Retrieves information describing the role of the specified object.
- STDMETHODIMP get_accRole(VARIANT var_id, VARIANT* role);
-
- // Retrieves the current state of the specified object.
- STDMETHODIMP get_accState(VARIANT var_id, VARIANT* state);
-
- // Non-supported IAccessible methods.
-
- // Out-dated and can be safely said to be very rarely used.
- STDMETHODIMP accDoDefaultAction(VARIANT var_id);
-
- // No value associated with views.
- STDMETHODIMP get_accValue(VARIANT var_id, BSTR* value);
-
- // Selections not applicable to views.
- STDMETHODIMP get_accSelection(VARIANT* selected);
- STDMETHODIMP accSelect(LONG flags_sel, VARIANT var_id);
-
- // Help functions not supported.
- STDMETHODIMP get_accHelp(VARIANT var_id, BSTR* help);
- STDMETHODIMP get_accHelpTopic(BSTR* help_file,
- VARIANT var_id,
- LONG* topic_id);
-
- // Deprecated functions, not implemented here.
- STDMETHODIMP put_accName(VARIANT var_id, BSTR put_name);
- STDMETHODIMP put_accValue(VARIANT var_id, BSTR put_val);
-
- private:
- // Checks to see if child_id is within the child bounds of view. Returns true
- // if the child is within the bounds, false otherwise.
- bool IsValidChild(int child_id, views::View* view) const;
-
- // Determines navigation direction for accNavigate, based on left, up and
- // previous being mapped all to previous and right, down, next being mapped
- // to next. Returns true if navigation direction is next, false otherwise.
- bool IsNavDirNext(int nav_dir) const;
-
- // Determines if the navigation target is within the allowed bounds. Returns
- // true if it is, false otherwise.
- bool IsValidNav(int nav_dir,
- int start_id,
- int lower_bound,
- int upper_bound) const;
-
- // Wrapper to retrieve the view's instance of IAccessible.
- ViewAccessibilityWrapper* GetViewAccessibilityWrapper(views::View* v) const {
- return v->GetViewAccessibilityWrapper();
- }
-
- // Helper function which sets applicable states of view.
- void SetState(VARIANT* msaa_state, views::View* view);
-
- // Returns a conversion from the Role (as defined in
- // chrome/common/accessibility_types.h) to an MSAA role.
- long MSAARole(AccessibilityTypes::Role role);
-
- // Returns a conversion from the State (as defined in
- // chrome/common/accessibility_types.h) to MSAA states set.
- long MSAAState(AccessibilityTypes::State state);
-
- // Member View needed for view-specific calls.
- views::View* view_;
-
- DISALLOW_EVIL_CONSTRUCTORS(ViewAccessibility);
-};
-
-#endif // CHROME_VIEWS_ACCESSIBILITY_VIEW_ACCESSIBILITY_H_
diff --git a/chrome/views/accessibility/view_accessibility_wrapper.cc b/chrome/views/accessibility/view_accessibility_wrapper.cc
deleted file mode 100644
index c52c42d..0000000
--- a/chrome/views/accessibility/view_accessibility_wrapper.cc
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/accessibility/view_accessibility_wrapper.h"
-
-#include "chrome/views/accessibility/view_accessibility.h"
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// ViewAccessibilityWrapper - constructors, destructors
-//
-////////////////////////////////////////////////////////////////////////////////
-
-ViewAccessibilityWrapper::ViewAccessibilityWrapper(views::View* view)
- : accessibility_info_(NULL),
- view_(view) {
-}
-
-STDMETHODIMP ViewAccessibilityWrapper::CreateDefaultInstance(REFIID iid) {
- if (IID_IUnknown == iid || IID_IDispatch == iid || IID_IAccessible == iid) {
- // If there is no instance of ViewAccessibility created, create it
- // now. Otherwise reuse previous instance.
- if (!accessibility_info_) {
- CComObject<ViewAccessibility>* instance = NULL;
-
- HRESULT hr = CComObject<ViewAccessibility>::CreateInstance(&instance);
-
- if (!SUCCEEDED(hr) || !instance)
- return E_FAIL;
-
- CComPtr<IAccessible> accessibility_instance(instance);
-
- if (!SUCCEEDED(instance->Initialize(view_)))
- return E_FAIL;
-
- // All is well, assign the temp instance to the class smart pointer.
- accessibility_info_.Attach(accessibility_instance.Detach());
- }
- return S_OK;
- }
- // Interface not supported.
- return E_NOINTERFACE;
-}
-
-STDMETHODIMP ViewAccessibilityWrapper::GetInstance(REFIID iid,
- void** interface_ptr) {
- if (IID_IUnknown == iid || IID_IDispatch == iid || IID_IAccessible == iid) {
- // If there is no accessibility instance created, create a default now.
- // Otherwise reuse previous instance.
- if (!accessibility_info_) {
- HRESULT hr = CreateDefaultInstance(iid);
-
- if (hr != S_OK) {
- // Interface creation failed.
- *interface_ptr = NULL;
- return E_NOINTERFACE;
- }
- }
- *interface_ptr = static_cast<IAccessible*>(accessibility_info_);
- return S_OK;
- }
- // No supported interface found, return error.
- *interface_ptr = NULL;
- return E_NOINTERFACE;
-}
-
-STDMETHODIMP ViewAccessibilityWrapper::SetInstance(IAccessible* interface_ptr) {
- if (!interface_ptr)
- return E_NOINTERFACE;
-
- accessibility_info_.Attach(interface_ptr);
-
- // Paranoia check, to make sure we do have a valid IAccessible pointer stored.
- if (!accessibility_info_)
- return E_FAIL;
-
- return S_OK;
-}
diff --git a/chrome/views/accessibility/view_accessibility_wrapper.h b/chrome/views/accessibility/view_accessibility_wrapper.h
deleted file mode 100644
index 6d4a842..0000000
--- a/chrome/views/accessibility/view_accessibility_wrapper.h
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_ACCESSIBILITY_VIEW_ACCESSIBILITY_WRAPPER_H_
-#define CHROME_VIEWS_ACCESSIBILITY_VIEW_ACCESSIBILITY_WRAPPER_H_
-
-#include <atlcomcli.h>
-#include <oleacc.h>
-
-#include "base/basictypes.h"
-
-namespace views {
-class View;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// ViewAccessibilityWrapper
-//
-// Wrapper class for returning a pointer to the appropriate (platform-specific)
-// accessibility interface for a given View. Needed to keep platform-specific
-// code out of the View class, when answering calls for child/parent IAccessible
-// implementations, for instance.
-//
-////////////////////////////////////////////////////////////////////////////////
-class ViewAccessibilityWrapper {
- public:
- explicit ViewAccessibilityWrapper(views::View* view);
- ~ViewAccessibilityWrapper() {}
-
- STDMETHODIMP CreateDefaultInstance(REFIID iid);
-
- // Returns a pointer to a specified interface on an object to which a client
- // currently holds an interface pointer. If pointer exists, it is reused,
- // otherwise a new pointer is created. Used by accessibility implementation to
- // retrieve MSAA implementation for child or parent, when navigating MSAA
- // hierarchy.
- STDMETHODIMP GetInstance(REFIID iid, void** interface_ptr);
-
- // Sets the accessibility interface implementation of this wrapper to be
- // anything the user specifies.
- STDMETHODIMP SetInstance(IAccessible* interface_ptr);
-
- private:
- // Instance of accessibility information and handling for a View.
- CComPtr<IAccessible> accessibility_info_;
-
- // View needed to initialize IAccessible.
- views::View* view_;
-
- DISALLOW_COPY_AND_ASSIGN(ViewAccessibilityWrapper);
-};
-
-#endif // CHROME_VIEWS_ACCESSIBILITY_VIEW_ACCESSIBILITY_WRAPPER_H_
diff --git a/chrome/views/background.cc b/chrome/views/background.cc
deleted file mode 100644
index 656d0a1..0000000
--- a/chrome/views/background.cc
+++ /dev/null
@@ -1,113 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/background.h"
-
-#include "app/gfx/chrome_canvas.h"
-#include "base/logging.h"
-#include "chrome/views/painter.h"
-#include "chrome/views/view.h"
-#include "skia/ext/skia_utils_win.h"
-#include "skia/include/SkPaint.h"
-
-namespace views {
-
-// SolidBackground is a trivial Background implementation that fills the
-// background in a solid color.
-class SolidBackground : public Background {
- public:
- explicit SolidBackground(const SkColor& color) :
- color_(color) {
- SetNativeControlColor(color_);
- }
-
- void Paint(ChromeCanvas* canvas, View* view) const {
- // Fill the background. Note that we don't constrain to the bounds as
- // canvas is already clipped for us.
- canvas->drawColor(color_);
- }
-
- private:
- const SkColor color_;
-
- DISALLOW_EVIL_CONSTRUCTORS(SolidBackground);
-};
-
-class BackgroundPainter : public Background {
- public:
- BackgroundPainter(bool owns_painter, Painter* painter)
- : owns_painter_(owns_painter), painter_(painter) {
- DCHECK(painter);
- }
-
- virtual ~BackgroundPainter() {
- if (owns_painter_)
- delete painter_;
- }
-
-
- void Paint(ChromeCanvas* canvas, View* view) const {
- Painter::PaintPainterAt(0, 0, view->width(), view->height(), canvas,
- painter_);
- }
-
- private:
- bool owns_painter_;
- Painter* painter_;
-
- DISALLOW_EVIL_CONSTRUCTORS(BackgroundPainter);
-};
-
-Background::Background()
-#if defined(OS_WIN)
- : native_control_brush_(NULL)
-#endif
-{
-}
-
-Background::~Background() {
-#if defined(OS_WIN)
- DeleteObject(native_control_brush_);
-#endif
-}
-
-void Background::SetNativeControlColor(SkColor color) {
-#if defined(OS_WIN)
- DeleteObject(native_control_brush_);
- native_control_brush_ = CreateSolidBrush(skia::SkColorToCOLORREF(color));
-#endif
-}
-
-//static
-Background* Background::CreateSolidBackground(const SkColor& color) {
- return new SolidBackground(color);
-}
-
-//static
-Background* Background::CreateStandardPanelBackground() {
- return CreateVerticalGradientBackground(SkColorSetRGB(246, 250, 255),
- SkColorSetRGB(219, 235, 255));
-}
-
-//static
-Background* Background::CreateVerticalGradientBackground(
- const SkColor& color1, const SkColor& color2) {
- Background *background =
- CreateBackgroundPainter(true, Painter::CreateVerticalGradient(color1,
- color2));
- background->SetNativeControlColor( // 50% blend of colors 1 & 2
- SkColorSetRGB((SkColorGetR(color1) + SkColorGetR(color2)) / 2,
- (SkColorGetG(color1) + SkColorGetG(color2)) / 2,
- (SkColorGetB(color1) + SkColorGetB(color2)) / 2));
-
- return background;
-}
-
-//static
-Background* Background::CreateBackgroundPainter(bool owns_painter,
- Painter* painter) {
- return new BackgroundPainter(owns_painter, painter);
-}
-
-} // namespace views
diff --git a/chrome/views/background.h b/chrome/views/background.h
deleted file mode 100644
index 3ab7662..0000000
--- a/chrome/views/background.h
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_BACKGROUND_H_
-#define CHROME_VIEWS_BACKGROUND_H_
-
-#include "build/build_config.h"
-
-#if defined(OS_WIN)
-#include <windows.h>
-#endif // defined(OS_WIN)
-
-#include "base/basictypes.h"
-#include "SkColor.h"
-
-class ChromeCanvas;
-
-namespace views {
-
-class Painter;
-class View;
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Background class
-//
-// A background implements a way for views to paint a background. The
-// background can be either solid or based on a gradient. Of course,
-// Background can be subclassed to implement various effects.
-//
-// Any View can have a background. See View::SetBackground() and
-// View::PaintBackground()
-//
-/////////////////////////////////////////////////////////////////////////////
-class Background {
- public:
- Background();
- virtual ~Background();
-
- // Creates a background that fills the canvas in the specified color.
- static Background* CreateSolidBackground(const SkColor& color);
-
- // Creates a background that fills the canvas in the specified color.
- static Background* CreateSolidBackground(int r, int g, int b) {
- return CreateSolidBackground(SkColorSetRGB(r, g, b));
- }
-
- // Creates a background that fills the canvas in the specified color.
- static Background* CreateSolidBackground(int r, int g, int b, int a) {
- return CreateSolidBackground(SkColorSetARGB(a, r, g, b));
- }
-
- // Creates a background that contains a vertical gradient that varies
- // from |color1| to |color2|
- static Background* CreateVerticalGradientBackground(const SkColor& color1,
- const SkColor& color2);
-
- // Creates Chrome's standard panel background
- static Background* CreateStandardPanelBackground();
-
- // Creates a Background from the specified Painter. If owns_painter is
- // true, the Painter is deleted when the Border is deleted.
- static Background* CreateBackgroundPainter(bool owns_painter,
- Painter* painter);
-
- // Render the background for the provided view
- virtual void Paint(ChromeCanvas* canvas, View* view) const = 0;
-
- // Set a solid, opaque color to be used when drawing backgrounds of native
- // controls. Unfortunately alpha=0 is not an option.
- void SetNativeControlColor(SkColor color);
-
-#if defined(OS_WIN)
- // TODO(port): Make GetNativeControlBrush portable (currently uses HBRUSH).
-
- // Get the brush that was specified by SetNativeControlColor
- HBRUSH GetNativeControlBrush() const { return native_control_brush_; };
-#endif // defined(OS_WIN)
-
- private:
-#if defined(OS_WIN)
- // TODO(port): Create portable replacement for HBRUSH.
- HBRUSH native_control_brush_;
-#endif // defined(OS_WIN)
- DISALLOW_COPY_AND_ASSIGN(Background);
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_BACKGROUND_H_
diff --git a/chrome/views/border.cc b/chrome/views/border.cc
deleted file mode 100644
index ccc4185..0000000
--- a/chrome/views/border.cc
+++ /dev/null
@@ -1,106 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/border.h"
-
-#include "app/gfx/chrome_canvas.h"
-#include "base/logging.h"
-
-namespace views {
-
-namespace {
-
-// A simple border with a fixed thickness and single color.
-class SolidBorder : public Border {
- public:
- SolidBorder(int thickness, SkColor color);
-
- virtual void Paint(const View& view, ChromeCanvas* canvas) const;
- virtual void GetInsets(gfx::Insets* insets) const;
-
- private:
- int thickness_;
- SkColor color_;
- gfx::Insets insets_;
-
- DISALLOW_EVIL_CONSTRUCTORS(SolidBorder);
-};
-
-SolidBorder::SolidBorder(int thickness, SkColor color)
- : thickness_(thickness),
- color_(color),
- insets_(thickness, thickness, thickness, thickness) {
-}
-
-void SolidBorder::Paint(const View& view, ChromeCanvas* canvas) const {
- gfx::Rect clip_rect;
- if (!canvas->GetClipRect(&clip_rect))
- return; // Empty clip rectangle, nothing to paint.
-
- // Top border.
- gfx::Rect border_bounds(0, 0, view.width(), insets_.top());
- if (clip_rect.Intersects(border_bounds))
- canvas->FillRectInt(color_, 0, 0, view.width(), insets_.top());
- // Left border.
- border_bounds.SetRect(0, 0, insets_.left(), view.height());
- if (clip_rect.Intersects(border_bounds))
- canvas->FillRectInt(color_, 0, 0, insets_.left(), view.height());
- // Bottom border.
- border_bounds.SetRect(0, view.height() - insets_.bottom(),
- view.width(), insets_.bottom());
- if (clip_rect.Intersects(border_bounds))
- canvas->FillRectInt(color_, 0, view.height() - insets_.bottom(),
- view.width(), insets_.bottom());
- // Right border.
- border_bounds.SetRect(view.width() - insets_.right(), 0,
- insets_.right(), view.height());
- if (clip_rect.Intersects(border_bounds))
- canvas->FillRectInt(color_, view.width() - insets_.right(), 0,
- insets_.right(), view.height());
-}
-
-void SolidBorder::GetInsets(gfx::Insets* insets) const {
- DCHECK(insets);
- insets->Set(insets_.top(), insets_.left(), insets_.bottom(), insets_.right());
-}
-
-class EmptyBorder : public Border {
- public:
- EmptyBorder(int top, int left, int bottom, int right)
- : top_(top), left_(left), bottom_(bottom), right_(right) {}
-
- virtual void Paint(const View& view, ChromeCanvas* canvas) const {}
-
- virtual void GetInsets(gfx::Insets* insets) const {
- DCHECK(insets);
- insets->Set(top_, left_, bottom_, right_);
- }
-
- private:
- int top_;
- int left_;
- int bottom_;
- int right_;
-
- DISALLOW_EVIL_CONSTRUCTORS(EmptyBorder);
-};
-}
-
-Border::Border() {
-}
-
-Border::~Border() {
-}
-
-// static
-Border* Border::CreateSolidBorder(int thickness, SkColor color) {
- return new SolidBorder(thickness, color);
-}
-
-// static
-Border* Border::CreateEmptyBorder(int top, int left, int bottom, int right) {
- return new EmptyBorder(top, left, bottom, right);
-}
-
-} // namespace views
diff --git a/chrome/views/border.h b/chrome/views/border.h
deleted file mode 100644
index c53a92d..0000000
--- a/chrome/views/border.h
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_BORDER_H_
-#define CHROME_VIEWS_BORDER_H_
-
-#include "app/gfx/insets.h"
-#include "chrome/views/view.h"
-#include "SkColor.h"
-
-class ChromeCanvas;
-
-namespace views {
-
-class View;
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// Border class.
-//
-// The border class is used to display a border around a view.
-// To set a border on a view, just call SetBorder on the view, for example:
-// view->SetBorder(Border::CreateSolidBorder(1, SkColorSetRGB(25, 25, 112));
-// Once set on a view, the border is owned by the view.
-//
-// IMPORTANT NOTE: not all views support borders at this point. In order to
-// support the border, views should make sure to use bounds excluding the
-// border (by calling View::GetLocalBoundsExcludingBorder) when doing layout and
-// painting.
-//
-////////////////////////////////////////////////////////////////////////////////
-
-class Border {
- public:
- Border();
- virtual ~Border();
-
- // Creates a border that is a simple line of the specified thickness and
- // color.
- static Border* CreateSolidBorder(int thickness, SkColor color);
-
- // Creates a border for reserving space. The returned border does not
- // paint anything.
- static Border* CreateEmptyBorder(int top, int left, int bottom, int right);
-
- // Renders the border for the specified view.
- virtual void Paint(const View& view, ChromeCanvas* canvas) const = 0;
-
- // Sets the specified insets to the the border insets.
- virtual void GetInsets(gfx::Insets* insets) const = 0;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(Border);
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_BORDER_H_
diff --git a/chrome/views/controls/button/button.cc b/chrome/views/controls/button/button.cc
deleted file mode 100644
index 605b409..0000000
--- a/chrome/views/controls/button/button.cc
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/controls/button/button.h"
-
-namespace views {
-
-////////////////////////////////////////////////////////////////////////////////
-// Button, public:
-
-Button::~Button() {
-}
-
-void Button::SetTooltipText(const std::wstring& tooltip_text) {
- tooltip_text_ = tooltip_text;
- TooltipTextChanged();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Button, View overrides:
-
-bool Button::GetTooltipText(int x, int y, std::wstring* tooltip) {
- if (!tooltip_text_.empty()) {
- *tooltip = tooltip_text_;
- return true;
- }
- return false;
-}
-
-bool Button::GetAccessibleKeyboardShortcut(std::wstring* shortcut) {
- if (!accessible_shortcut_.empty()) {
- *shortcut = accessible_shortcut_;
- return true;
- }
- return false;
-}
-
-bool Button::GetAccessibleName(std::wstring* name) {
- if (!accessible_name_.empty()) {
- *name = accessible_name_;
- return true;
- }
- return false;
-}
-
-bool Button::GetAccessibleRole(AccessibilityTypes::Role* role) {
- *role = AccessibilityTypes::ROLE_PUSHBUTTON;
- return true;
-}
-
-void Button::SetAccessibleKeyboardShortcut(const std::wstring& shortcut) {
- accessible_shortcut_.assign(shortcut);
-}
-
-void Button::SetAccessibleName(const std::wstring& name) {
- accessible_name_.assign(name);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Button, protected:
-
-Button::Button(ButtonListener* listener)
- : listener_(listener),
- tag_(-1),
- mouse_event_flags_(0) {
-}
-
-void Button::NotifyClick(int mouse_event_flags) {
- mouse_event_flags_ = mouse_event_flags;
- // We can be called when there is no listener, in cases like double clicks on
- // menu buttons etc.
- if (listener_)
- listener_->ButtonPressed(this);
- // NOTE: don't attempt to reset mouse_event_flags_ as the listener may have
- // deleted us.
-}
-
-} // namespace views
diff --git a/chrome/views/controls/button/button.h b/chrome/views/controls/button/button.h
deleted file mode 100644
index 40ee98155..0000000
--- a/chrome/views/controls/button/button.h
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_CONTROLS_BUTTON_BUTTON_H_
-#define CHROME_VIEWS_CONTROLS_BUTTON_BUTTON_H_
-
-#include "chrome/views/view.h"
-
-namespace views {
-
-class Button;
-
-// An interface implemented by an object to let it know that a button was
-// pressed.
-class ButtonListener {
- public:
- virtual void ButtonPressed(Button* sender) = 0;
-};
-
-// A View representing a button. Depending on the specific type, the button
-// could be implemented by a native control or custom rendered.
-class Button : public View {
- public:
- virtual ~Button();
-
- void SetTooltipText(const std::wstring& tooltip_text);
-
- int tag() const { return tag_; }
- void set_tag(int tag) { tag_ = tag; }
-
- int mouse_event_flags() const { return mouse_event_flags_; }
-
- // Overridden from View:
- virtual bool GetTooltipText(int x, int y, std::wstring* tooltip);
- virtual bool GetAccessibleKeyboardShortcut(std::wstring* shortcut);
- virtual bool GetAccessibleName(std::wstring* name);
- virtual bool GetAccessibleRole(AccessibilityTypes::Role* role);
- virtual void SetAccessibleKeyboardShortcut(const std::wstring& shortcut);
- virtual void SetAccessibleName(const std::wstring& name);
-
- protected:
- // Construct the Button with a Listener. The listener can be NULL. This can be
- // true of buttons that don't have a listener - e.g. menubuttons where there's
- // no default action and checkboxes.
- explicit Button(ButtonListener* listener);
-
- // Cause the button to notify the listener that a click occurred.
- virtual void NotifyClick(int mouse_event_flags);
-
- // The button's listener. Notified when clicked.
- ButtonListener* listener_;
-
- private:
- // The text shown in a tooltip.
- std::wstring tooltip_text_;
-
- // Accessibility data.
- std::wstring accessible_shortcut_;
- std::wstring accessible_name_;
-
- // The id tag associated with this button. Used to disambiguate buttons in
- // the ButtonListener implementation.
- int tag_;
-
- // Event flags present when the button was clicked.
- int mouse_event_flags_;
-
- DISALLOW_COPY_AND_ASSIGN(Button);
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_CONTROLS_BUTTON_BUTTON_H_
diff --git a/chrome/views/controls/button/button_dropdown.cc b/chrome/views/controls/button/button_dropdown.cc
deleted file mode 100644
index 5598a18..0000000
--- a/chrome/views/controls/button/button_dropdown.cc
+++ /dev/null
@@ -1,192 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/controls/button/button_dropdown.h"
-
-#include "app/l10n_util.h"
-#include "base/message_loop.h"
-#include "chrome/views/controls/menu/view_menu_delegate.h"
-#include "chrome/views/widget/widget.h"
-#include "grit/generated_resources.h"
-
-namespace views {
-
-// How long to wait before showing the menu
-static const int kMenuTimerDelay = 500;
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// ButtonDropDown - constructors, destructors, initialization, cleanup
-//
-////////////////////////////////////////////////////////////////////////////////
-
-ButtonDropDown::ButtonDropDown(ButtonListener* listener,
- Menu::Delegate* menu_delegate)
- : ImageButton(listener),
- menu_delegate_(menu_delegate),
- y_position_on_lbuttondown_(0),
- show_menu_factory_(this) {
-}
-
-ButtonDropDown::~ButtonDropDown() {
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// ButtonDropDown - Events
-//
-////////////////////////////////////////////////////////////////////////////////
-
-bool ButtonDropDown::OnMousePressed(const MouseEvent& e) {
- if (IsEnabled() && e.IsLeftMouseButton() && HitTest(e.location())) {
- // Store the y pos of the mouse coordinates so we can use them later to
- // determine if the user dragged the mouse down (which should pop up the
- // drag down menu immediately, instead of waiting for the timer)
- y_position_on_lbuttondown_ = e.y();
-
- // Schedule a task that will show the menu.
- MessageLoop::current()->PostDelayedTask(FROM_HERE,
- show_menu_factory_.NewRunnableMethod(&ButtonDropDown::ShowDropDownMenu,
- GetWidget()->GetNativeView()),
- kMenuTimerDelay);
- }
-
- return ImageButton::OnMousePressed(e);
-}
-
-void ButtonDropDown::OnMouseReleased(const MouseEvent& e, bool canceled) {
- ImageButton::OnMouseReleased(e, canceled);
-
- if (canceled)
- return;
-
- if (e.IsLeftMouseButton())
- show_menu_factory_.RevokeAll();
-
- if (IsEnabled() && e.IsRightMouseButton() && HitTest(e.location())) {
- show_menu_factory_.RevokeAll();
- // Make the button look depressed while the menu is open.
- // NOTE: SetState() schedules a paint, but it won't occur until after the
- // context menu message loop has terminated, so we PaintNow() to
- // update the appearance synchronously.
- SetState(BS_PUSHED);
- PaintNow();
- ShowDropDownMenu(GetWidget()->GetNativeView());
- }
-}
-
-bool ButtonDropDown::OnMouseDragged(const MouseEvent& e) {
- bool result = ImageButton::OnMouseDragged(e);
-
- if (!show_menu_factory_.empty()) {
- // SM_CYDRAG is a pixel value for minimum dragging distance before operation
- // counts as a drag, and not just as a click and accidental move of a mouse.
- // See http://msdn2.microsoft.com/en-us/library/ms724385.aspx for details.
- int dragging_threshold = GetSystemMetrics(SM_CYDRAG);
-
- // If the mouse is dragged to a y position lower than where it was when
- // clicked then we should not wait for the menu to appear but show
- // it immediately.
- if (e.y() > y_position_on_lbuttondown_ + dragging_threshold) {
- show_menu_factory_.RevokeAll();
- ShowDropDownMenu(GetWidget()->GetNativeView());
- }
- }
-
- return result;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// ButtonDropDown - Menu functions
-//
-////////////////////////////////////////////////////////////////////////////////
-
-void ButtonDropDown::ShowContextMenu(int x, int y, bool is_mouse_gesture) {
- show_menu_factory_.RevokeAll();
- // Make the button look depressed while the menu is open.
- // NOTE: SetState() schedules a paint, but it won't occur until after the
- // context menu message loop has terminated, so we PaintNow() to
- // update the appearance synchronously.
- SetState(BS_PUSHED);
- PaintNow();
- ShowDropDownMenu(GetWidget()->GetNativeView());
- SetState(BS_HOT);
-}
-
-void ButtonDropDown::ShowDropDownMenu(HWND window) {
- if (menu_delegate_) {
- gfx::Rect lb = GetLocalBounds(true);
-
- // Both the menu position and the menu anchor type change if the UI layout
- // is right-to-left.
- gfx::Point menu_position(lb.origin());
- menu_position.Offset(0, lb.height() - 1);
- if (UILayoutIsRightToLeft())
- menu_position.Offset(lb.width() - 1, 0);
-
- Menu::AnchorPoint anchor = Menu::TOPLEFT;
- if (UILayoutIsRightToLeft())
- anchor = Menu::TOPRIGHT;
-
- View::ConvertPointToScreen(this, &menu_position);
-
- int left_bound = GetSystemMetrics(SM_XVIRTUALSCREEN);
- if (menu_position.x() < left_bound)
- menu_position.set_x(left_bound);
-
- Menu menu(menu_delegate_, anchor, window);
-
- // ID's for AppendMenu is 1-based because RunMenu will ignore the user
- // selection if id=0 is selected (0 = NO-OP) so we add 1 here and subtract 1
- // in the handlers above to get the actual index
- int item_count = menu_delegate_->GetItemCount();
- for (int i = 0; i < item_count; i++) {
- if (menu_delegate_->IsItemSeparator(i + 1)) {
- menu.AppendSeparator();
- } else {
- if (menu_delegate_->HasIcon(i + 1))
- menu.AppendMenuItemWithIcon(i + 1, L"", SkBitmap());
- else
- menu.AppendMenuItem(i+1, L"", Menu::NORMAL);
- }
- }
-
- menu.RunMenuAt(menu_position.x(), menu_position.y());
-
- // Need to explicitly clear mouse handler so that events get sent
- // properly after the menu finishes running. If we don't do this, then
- // the first click to other parts of the UI is eaten.
- SetMouseHandler(NULL);
- }
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// ButtonDropDown - Accessibility
-//
-////////////////////////////////////////////////////////////////////////////////
-
-bool ButtonDropDown::GetAccessibleDefaultAction(std::wstring* action) {
- DCHECK(action);
-
- action->assign(l10n_util::GetString(IDS_ACCACTION_PRESS));
- return true;
-}
-
-bool ButtonDropDown::GetAccessibleRole(AccessibilityTypes::Role* role) {
- DCHECK(role);
-
- *role = AccessibilityTypes::ROLE_BUTTONDROPDOWN;
- return true;
-}
-
-bool ButtonDropDown::GetAccessibleState(AccessibilityTypes::State* state) {
- DCHECK(state);
-
- *state = AccessibilityTypes::STATE_HASPOPUP;
- return true;
-}
-
-} // namespace views
diff --git a/chrome/views/controls/button/button_dropdown.h b/chrome/views/controls/button/button_dropdown.h
deleted file mode 100644
index 3e43df5..0000000
--- a/chrome/views/controls/button/button_dropdown.h
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_CONTROLS_BUTTON_BUTTON_DROPDOWN_H_
-#define CHROME_VIEWS_CONTROLS_BUTTON_BUTTON_DROPDOWN_H_
-
-#include "base/task.h"
-#include "chrome/views/controls/button/image_button.h"
-#include "chrome/views/controls/menu/menu.h"
-
-namespace views {
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// ButtonDropDown
-//
-// A button class that when pressed (and held) or pressed (and drag down) will
-// display a menu
-//
-////////////////////////////////////////////////////////////////////////////////
-class ButtonDropDown : public ImageButton {
- public:
- ButtonDropDown(ButtonListener* listener, Menu::Delegate* menu_delegate);
- virtual ~ButtonDropDown();
-
- // Accessibility accessors, overridden from View.
- virtual bool GetAccessibleDefaultAction(std::wstring* action);
- virtual bool GetAccessibleRole(AccessibilityTypes::Role* role);
- virtual bool GetAccessibleState(AccessibilityTypes::State* state);
-
- private:
- // Overridden from Button
- virtual bool OnMousePressed(const MouseEvent& e);
- virtual void OnMouseReleased(const MouseEvent& e, bool canceled);
- virtual bool OnMouseDragged(const MouseEvent& e);
-
- // Overridden from View. Used to display the right-click menu, as triggered
- // by the keyboard, for instance. Using the member function ShowDropDownMenu
- // for the actual display.
- virtual void ShowContextMenu(int x,
- int y,
- bool is_mouse_gesture);
-
- // Internal function to show the dropdown menu
- void ShowDropDownMenu(HWND window);
-
- // Specifies who to delegate populating the menu
- Menu::Delegate* menu_delegate_;
-
- // Y position of mouse when left mouse button is pressed
- int y_position_on_lbuttondown_;
-
- // A factory for tasks that show the dropdown context menu for the button.
- ScopedRunnableMethodFactory<ButtonDropDown> show_menu_factory_;
-
- DISALLOW_COPY_AND_ASSIGN(ButtonDropDown);
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_CONTROLS_BUTTON_BUTTON_DROPDOWN_H_
diff --git a/chrome/views/controls/button/checkbox.cc b/chrome/views/controls/button/checkbox.cc
deleted file mode 100644
index 2b15938..0000000
--- a/chrome/views/controls/button/checkbox.cc
+++ /dev/null
@@ -1,172 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this
-// source code is governed by a BSD-style license that can be found in the
-// LICENSE file.
-
-#include "chrome/views/controls/button/checkbox.h"
-
-#include "app/gfx/chrome_canvas.h"
-#include "chrome/views/controls/label.h"
-
-namespace views {
-
-// static
-const char Checkbox::kViewClassName[] = "chrome/views/Checkbox";
-
-static const int kCheckboxLabelSpacing = 4;
-static const int kLabelFocusPaddingHorizontal = 2;
-static const int kLabelFocusPaddingVertical = 1;
-
-////////////////////////////////////////////////////////////////////////////////
-// Checkbox, public:
-
-Checkbox::Checkbox() : NativeButton(NULL), checked_(false) {
- Init(std::wstring());
-}
-
-Checkbox::Checkbox(const std::wstring& label)
- : NativeButton(NULL, label),
- checked_(false) {
- Init(label);
-}
-
-Checkbox::~Checkbox() {
-}
-
-void Checkbox::SetMultiLine(bool multiline) {
- label_->SetMultiLine(multiline);
-}
-
-void Checkbox::SetChecked(bool checked) {
- if (checked_ == checked)
- return;
- checked_ = checked;
- if (native_wrapper_)
- native_wrapper_->UpdateChecked();
-}
-
-// static
-int Checkbox::GetTextIndent() {
- return NativeButtonWrapper::GetFixedWidth() + kCheckboxLabelSpacing;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Checkbox, View overrides:
-
-gfx::Size Checkbox::GetPreferredSize() {
- gfx::Size prefsize = native_wrapper_->GetView()->GetPreferredSize();
- prefsize.set_width(
- prefsize.width() + kCheckboxLabelSpacing +
- kLabelFocusPaddingHorizontal * 2);
- gfx::Size label_prefsize = label_->GetPreferredSize();
- prefsize.set_width(prefsize.width() + label_prefsize.width());
- prefsize.set_height(
- std::max(prefsize.height(),
- label_prefsize.height() + kLabelFocusPaddingVertical * 2));
- return prefsize;
-}
-
-void Checkbox::Layout() {
- if (!native_wrapper_)
- return;
-
- gfx::Size checkmark_prefsize = native_wrapper_->GetView()->GetPreferredSize();
- int label_x = checkmark_prefsize.width() + kCheckboxLabelSpacing +
- kLabelFocusPaddingHorizontal;
- label_->SetBounds(
- label_x, 0, std::max(0, width() - label_x - kLabelFocusPaddingHorizontal),
- height());
- int first_line_height = label_->GetFont().height();
- native_wrapper_->GetView()->SetBounds(
- 0, ((first_line_height - checkmark_prefsize.height()) / 2),
- checkmark_prefsize.width(), checkmark_prefsize.height());
- native_wrapper_->GetView()->Layout();
-}
-
-void Checkbox::PaintFocusBorder(ChromeCanvas* canvas) {
- // Our focus border is rendered by the label, so we don't do anything here.
-}
-
-View* Checkbox::GetViewForPoint(const gfx::Point& point) {
- return GetViewForPoint(point, false);
-}
-
-View* Checkbox::GetViewForPoint(const gfx::Point& point,
- bool can_create_floating) {
- return GetLocalBounds(true).Contains(point) ? this : NULL;
-}
-
-void Checkbox::OnMouseEntered(const MouseEvent& e) {
- native_wrapper_->SetPushed(HitTestLabel(e));
-}
-
-void Checkbox::OnMouseMoved(const MouseEvent& e) {
- native_wrapper_->SetPushed(HitTestLabel(e));
-}
-
-void Checkbox::OnMouseExited(const MouseEvent& e) {
- native_wrapper_->SetPushed(false);
-}
-
-bool Checkbox::OnMousePressed(const MouseEvent& e) {
- native_wrapper_->SetPushed(HitTestLabel(e));
- return true;
-}
-
-void Checkbox::OnMouseReleased(const MouseEvent& e, bool canceled) {
- native_wrapper_->SetPushed(false);
- if (!canceled && HitTestLabel(e)) {
- SetChecked(!checked());
- ButtonPressed();
- }
-}
-
-bool Checkbox::OnMouseDragged(const MouseEvent& e) {
- return false;
-}
-
-void Checkbox::WillGainFocus() {
- label_->set_paint_as_focused(true);
-}
-
-void Checkbox::WillLoseFocus() {
- label_->set_paint_as_focused(false);
-}
-
-std::string Checkbox::GetClassName() const {
- return kViewClassName;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Checkbox, NativeButton overrides:
-
-void Checkbox::CreateWrapper() {
- native_wrapper_ = NativeButtonWrapper::CreateCheckboxWrapper(this);
- native_wrapper_->UpdateLabel();
- native_wrapper_->UpdateChecked();
-}
-
-void Checkbox::InitBorder() {
- // No border, so we do nothing.
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Checkbox, protected:
-
-bool Checkbox::HitTestLabel(const MouseEvent& e) {
- gfx::Point tmp(e.location());
- ConvertPointToView(this, label_, &tmp);
- return label_->HitTest(tmp);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Checkbox, private:
-
-void Checkbox::Init(const std::wstring& label_text) {
- set_minimum_size(gfx::Size(0, 0));
- label_ = new Label(label_text);
- label_->set_has_focus_border(true);
- label_->SetHorizontalAlignment(Label::ALIGN_LEFT);
- AddChildView(label_);
-}
-
-} // namespace views
diff --git a/chrome/views/controls/button/checkbox.h b/chrome/views/controls/button/checkbox.h
deleted file mode 100644
index 54f4e06..0000000
--- a/chrome/views/controls/button/checkbox.h
+++ /dev/null
@@ -1,84 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this
-// source code is governed by a BSD-style license that can be found in the
-// LICENSE file.
-
-#ifndef CHROME_VIEWS_CONTROLS_BUTTON_CHECKBOX_H_
-#define CHROME_VIEWS_CONTROLS_BUTTON_CHECKBOX_H_
-
-#include "chrome/views/controls/button/native_button.h"
-
-namespace views {
-
-class Label;
-
-// A NativeButton subclass representing a checkbox.
-class Checkbox : public NativeButton {
- public:
- // The button's class name.
- static const char kViewClassName[];
-
- Checkbox();
- Checkbox(const std::wstring& label);
- virtual ~Checkbox();
-
- // Sets a listener for this checkbox. Checkboxes aren't required to have them
- // since their state can be read independently of them being toggled.
- void set_listener(ButtonListener* listener) { listener_ = listener; }
-
- // Sets whether or not the checkbox label should wrap multiple lines of text.
- // If true, long lines are wrapped, and this is reflected in the preferred
- // size returned by GetPreferredSize. If false, text that will not fit within
- // the available bounds for the label will be cropped.
- void SetMultiLine(bool multiline);
-
- // Sets/Gets whether or not the checkbox is checked.
- virtual void SetChecked(bool checked);
- bool checked() const { return checked_; }
-
- // Returns the indentation of the text from the left edge of the view.
- static int GetTextIndent();
-
- // Overridden from View:
- virtual gfx::Size GetPreferredSize();
- virtual void Layout();
- virtual void PaintFocusBorder(ChromeCanvas* canvas);
- virtual View* GetViewForPoint(const gfx::Point& point);
- virtual View* GetViewForPoint(const gfx::Point& point,
- bool can_create_floating);
- virtual void OnMouseEntered(const MouseEvent& e);
- virtual void OnMouseMoved(const MouseEvent& e);
- virtual void OnMouseExited(const MouseEvent& e);
- virtual bool OnMousePressed(const MouseEvent& e);
- virtual void OnMouseReleased(const MouseEvent& e, bool canceled);
- virtual bool OnMouseDragged(const MouseEvent& e);
- virtual void WillGainFocus();
- virtual void WillLoseFocus();
-
- protected:
- virtual std::string GetClassName() const;
-
- // Overridden from NativeButton2:
- virtual void CreateWrapper();
- virtual void InitBorder();
-
- // Returns true if the event (in Checkbox coordinates) is within the bounds of
- // the label.
- bool HitTestLabel(const MouseEvent& e);
-
- private:
- // Called from the constructor to create and configure the checkbox label.
- void Init(const std::wstring& label_text);
-
- // The checkbox's label. We don't use the OS version because of transparency
- // and sizing issues.
- Label* label_;
-
- // True if the checkbox is checked.
- bool checked_;
-
- DISALLOW_COPY_AND_ASSIGN(Checkbox);
-};
-
-} // namespace views
-
-#endif // #ifndef CHROME_VIEWS_CONTROLS_BUTTON_CHECKBOX_H_
diff --git a/chrome/views/controls/button/custom_button.cc b/chrome/views/controls/button/custom_button.cc
deleted file mode 100644
index 3e9d33d..0000000
--- a/chrome/views/controls/button/custom_button.cc
+++ /dev/null
@@ -1,236 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/controls/button/custom_button.h"
-
-#include "app/throb_animation.h"
-#include "base/keyboard_codes.h"
-
-namespace views {
-
-// How long the hover animation takes if uninterrupted.
-static const int kHoverFadeDurationMs = 150;
-
-////////////////////////////////////////////////////////////////////////////////
-// CustomButton, public:
-
-CustomButton::~CustomButton() {
-}
-
-void CustomButton::SetState(ButtonState state) {
- if (state != state_) {
- if (animate_on_state_change_ || !hover_animation_->IsAnimating()) {
- animate_on_state_change_ = true;
- if (state_ == BS_NORMAL && state == BS_HOT) {
- // Button is hovered from a normal state, start hover animation.
- hover_animation_->Show();
- } else if (state_ == BS_HOT && state == BS_NORMAL) {
- // Button is returning to a normal state from hover, start hover
- // fade animation.
- hover_animation_->Hide();
- } else {
- hover_animation_->Stop();
- }
- }
-
- state_ = state;
- SchedulePaint();
- }
-}
-
-void CustomButton::StartThrobbing(int cycles_til_stop) {
- animate_on_state_change_ = false;
- hover_animation_->StartThrobbing(cycles_til_stop);
-}
-
-void CustomButton::SetAnimationDuration(int duration) {
- hover_animation_->SetSlideDuration(duration);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// CustomButton, View overrides:
-
-void CustomButton::SetEnabled(bool enabled) {
- if (enabled && state_ == BS_DISABLED) {
- SetState(BS_NORMAL);
- } else if (!enabled && state_ != BS_DISABLED) {
- SetState(BS_DISABLED);
- }
-}
-
-bool CustomButton::IsEnabled() const {
- return state_ != BS_DISABLED;
-}
-
-bool CustomButton::IsFocusable() const {
- return (state_ != BS_DISABLED) && View::IsFocusable();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// CustomButton, protected:
-
-CustomButton::CustomButton(ButtonListener* listener)
- : Button(listener),
- state_(BS_NORMAL),
- animate_on_state_change_(true),
- triggerable_event_flags_(MouseEvent::EF_LEFT_BUTTON_DOWN) {
- hover_animation_.reset(new ThrobAnimation(this));
- hover_animation_->SetSlideDuration(kHoverFadeDurationMs);
-}
-
-bool CustomButton::IsTriggerableEvent(const MouseEvent& e) {
- return (triggerable_event_flags_ & e.GetFlags()) != 0;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// CustomButton, View overrides (protected):
-
-bool CustomButton::AcceleratorPressed(const Accelerator& accelerator) {
- if (enabled_) {
- SetState(BS_NORMAL);
- NotifyClick(0);
- return true;
- }
- return false;
-}
-
-bool CustomButton::OnMousePressed(const MouseEvent& e) {
- if (state_ != BS_DISABLED) {
- if (IsTriggerableEvent(e) && HitTest(e.location()))
- SetState(BS_PUSHED);
- RequestFocus();
- }
- return true;
-}
-
-bool CustomButton::OnMouseDragged(const MouseEvent& e) {
- if (state_ != BS_DISABLED) {
- if (!HitTest(e.location()))
- SetState(BS_NORMAL);
- else if (IsTriggerableEvent(e))
- SetState(BS_PUSHED);
- else
- SetState(BS_HOT);
- }
- return true;
-}
-
-void CustomButton::OnMouseReleased(const MouseEvent& e, bool canceled) {
- if (InDrag()) {
- // Starting a drag results in a MouseReleased, we need to ignore it.
- return;
- }
-
- if (state_ != BS_DISABLED) {
- if (canceled || !HitTest(e.location())) {
- SetState(BS_NORMAL);
- } else {
- SetState(BS_HOT);
- if (IsTriggerableEvent(e)) {
- NotifyClick(e.GetFlags());
- // We may be deleted at this point (by the listener's notification
- // handler) so no more doing anything, just return.
- return;
- }
- }
- }
-}
-
-void CustomButton::OnMouseEntered(const MouseEvent& e) {
- if (state_ != BS_DISABLED)
- SetState(BS_HOT);
-}
-
-void CustomButton::OnMouseMoved(const MouseEvent& e) {
- if (state_ != BS_DISABLED) {
- if (HitTest(e.location())) {
- SetState(BS_HOT);
- } else {
- SetState(BS_NORMAL);
- }
- }
-}
-
-void CustomButton::OnMouseExited(const MouseEvent& e) {
- // Starting a drag results in a MouseExited, we need to ignore it.
- if (state_ != BS_DISABLED && !InDrag())
- SetState(BS_NORMAL);
-}
-
-bool CustomButton::OnKeyPressed(const KeyEvent& e) {
- if (state_ != BS_DISABLED) {
- // Space sets button state to pushed. Enter clicks the button. This matches
- // the Windows native behavior of buttons, where Space clicks the button
- // on KeyRelease and Enter clicks the button on KeyPressed.
- if (e.GetCharacter() == base::VKEY_SPACE) {
- SetState(BS_PUSHED);
- return true;
- } else if (e.GetCharacter() == base::VKEY_RETURN) {
- SetState(BS_NORMAL);
- NotifyClick(0);
- return true;
- }
- }
- return false;
-}
-
-bool CustomButton::OnKeyReleased(const KeyEvent& e) {
- if (state_ != BS_DISABLED) {
- if (e.GetCharacter() == base::VKEY_SPACE) {
- SetState(BS_NORMAL);
- NotifyClick(0);
- return true;
- }
- }
- return false;
-}
-
-void CustomButton::OnDragDone() {
- SetState(BS_NORMAL);
-}
-
-void CustomButton::ShowContextMenu(int x, int y, bool is_mouse_gesture) {
- if (GetContextMenuController()) {
- // We're about to show the context menu. Showing the context menu likely
- // means we won't get a mouse exited and reset state. Reset it now to be
- // sure.
- if (state_ != BS_DISABLED)
- SetState(BS_NORMAL);
- View::ShowContextMenu(x, y, is_mouse_gesture);
- }
-}
-
-void CustomButton::ViewHierarchyChanged(bool is_add, View *parent,
- View *child) {
- if (!is_add && state_ != BS_DISABLED)
- SetState(BS_NORMAL);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// CustomButton, AnimationDelegate implementation:
-
-void CustomButton::AnimationProgressed(const Animation* animation) {
- SchedulePaint();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// CustomButton, private:
-
-void CustomButton::SetHighlighted(bool highlighted) {
- if (highlighted && state_ != BS_DISABLED) {
- SetState(BS_HOT);
- } else if (!highlighted && state_ != BS_DISABLED) {
- SetState(BS_NORMAL);
- }
-}
-
-bool CustomButton::IsHighlighted() const {
- return state_ == BS_HOT;
-}
-
-bool CustomButton::IsPushed() const {
- return state_ == BS_PUSHED;
-}
-
-} // namespace views
diff --git a/chrome/views/controls/button/custom_button.h b/chrome/views/controls/button/custom_button.h
deleted file mode 100644
index 6b486a7..0000000
--- a/chrome/views/controls/button/custom_button.h
+++ /dev/null
@@ -1,105 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_CONTROLS_BUTTON_CUSTOM_BUTTON_H_
-#define CHROME_VIEWS_CONTROLS_BUTTON_CUSTOM_BUTTON_H_
-
-#include "app/animation.h"
-#include "chrome/views/controls/button/button.h"
-
-class ThrobAnimation;
-
-namespace views {
-
-// A button with custom rendering. The common base class of IconButton and
-// TextButton.
-class CustomButton : public Button,
- public AnimationDelegate {
- public:
- virtual ~CustomButton();
-
- // Possible states
- enum ButtonState {
- BS_NORMAL = 0,
- BS_HOT,
- BS_PUSHED,
- BS_DISABLED,
- BS_COUNT
- };
-
- // Get/sets the current display state of the button.
- ButtonState state() const { return state_; }
- void SetState(ButtonState state);
-
- // Starts throbbing. See HoverAnimation for a description of cycles_til_stop.
- void StartThrobbing(int cycles_til_stop);
-
- // Set how long the hover animation will last for.
- void SetAnimationDuration(int duration);
-
- // Overridden from View:
- virtual void SetEnabled(bool enabled);
- virtual bool IsEnabled() const;
- virtual bool IsFocusable() const;
-
- void set_triggerable_event_flags(int triggerable_event_flags) {
- triggerable_event_flags_ = triggerable_event_flags;
- }
-
- int triggerable_event_flags() const {
- return triggerable_event_flags_;
- }
-
- protected:
- // Construct the Button with a Listener. See comment for Button's ctor.
- explicit CustomButton(ButtonListener* listener);
-
- // Returns true if the event is one that can trigger notifying the listener.
- // This implementation returns true if the left mouse button is down.
- virtual bool IsTriggerableEvent(const MouseEvent& e);
-
- // Overridden from View:
- virtual bool AcceleratorPressed(const Accelerator& accelerator);
- virtual bool OnMousePressed(const MouseEvent& e);
- virtual bool OnMouseDragged(const MouseEvent& e);
- virtual void OnMouseReleased(const MouseEvent& e, bool canceled);
- virtual void OnMouseEntered(const MouseEvent& e);
- virtual void OnMouseMoved(const MouseEvent& e);
- virtual void OnMouseExited(const MouseEvent& e);
- virtual bool OnKeyPressed(const KeyEvent& e);
- virtual bool OnKeyReleased(const KeyEvent& e);
- virtual void OnDragDone();
- virtual void ShowContextMenu(int x, int y, bool is_mouse_gesture);
- virtual void ViewHierarchyChanged(bool is_add, View *parent, View *child);
-
- // Overridden from AnimationDelegate:
- virtual void AnimationProgressed(const Animation* animation);
-
- // The button state (defined in implementation)
- ButtonState state_;
-
- // Hover animation.
- scoped_ptr<ThrobAnimation> hover_animation_;
-
- private:
- // Set / test whether the button is highlighted (in the hover state).
- void SetHighlighted(bool highlighted);
- bool IsHighlighted() const;
-
- // Returns whether the button is pushed.
- bool IsPushed() const;
-
- // Should we animate when the state changes? Defaults to true, but false while
- // throbbing.
- bool animate_on_state_change_;
-
- // Mouse event flags which can trigger button actions.
- int triggerable_event_flags_;
-
- DISALLOW_COPY_AND_ASSIGN(CustomButton);
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_CONTROLS_BUTTON_CUSTOM_BUTTON_H_
diff --git a/chrome/views/controls/button/image_button.cc b/chrome/views/controls/button/image_button.cc
deleted file mode 100644
index 3b0df8c..0000000
--- a/chrome/views/controls/button/image_button.cc
+++ /dev/null
@@ -1,154 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/controls/button/image_button.h"
-
-#include "app/gfx/chrome_canvas.h"
-#include "app/throb_animation.h"
-#include "skia/ext/image_operations.h"
-
-namespace views {
-
-static const int kDefaultWidth = 16; // Default button width if no theme.
-static const int kDefaultHeight = 14; // Default button height if no theme.
-
-////////////////////////////////////////////////////////////////////////////////
-// ImageButton, public:
-
-ImageButton::ImageButton(ButtonListener* listener)
- : CustomButton(listener),
- h_alignment_(ALIGN_LEFT),
- v_alignment_(ALIGN_TOP) {
- // By default, we request that the ChromeCanvas passed to our View::Paint()
- // implementation is flipped horizontally so that the button's bitmaps are
- // mirrored when the UI directionality is right-to-left.
- EnableCanvasFlippingForRTLUI(true);
-}
-
-ImageButton::~ImageButton() {
-}
-
-void ImageButton::SetImage(ButtonState aState, SkBitmap* anImage) {
- images_[aState] = anImage ? *anImage : SkBitmap();
-}
-
-void ImageButton::SetImageAlignment(HorizontalAlignment h_align,
- VerticalAlignment v_align) {
- h_alignment_ = h_align;
- v_alignment_ = v_align;
- SchedulePaint();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// ImageButton, View overrides:
-
-gfx::Size ImageButton::GetPreferredSize() {
- if (!images_[BS_NORMAL].isNull())
- return gfx::Size(images_[BS_NORMAL].width(), images_[BS_NORMAL].height());
- return gfx::Size(kDefaultWidth, kDefaultHeight);
-}
-
-void ImageButton::Paint(ChromeCanvas* canvas) {
- // Call the base class first to paint any background/borders.
- View::Paint(canvas);
-
- SkBitmap img = GetImageToPaint();
-
- if (!img.isNull()) {
- int x = 0, y = 0;
-
- if (h_alignment_ == ALIGN_CENTER)
- x = (width() - img.width()) / 2;
- else if (h_alignment_ == ALIGN_RIGHT)
- x = width() - img.width();
-
- if (v_alignment_ == ALIGN_MIDDLE)
- y = (height() - img.height()) / 2;
- else if (v_alignment_ == ALIGN_BOTTOM)
- y = height() - img.height();
-
- canvas->DrawBitmapInt(img, x, y);
- }
- PaintFocusBorder(canvas);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// ImageButton, protected:
-
-SkBitmap ImageButton::GetImageToPaint() {
- SkBitmap img;
-
- if (!images_[BS_HOT].isNull() && hover_animation_->IsAnimating()) {
- img = skia::ImageOperations::CreateBlendedBitmap(images_[BS_NORMAL],
- images_[BS_HOT], hover_animation_->GetCurrentValue());
- } else {
- img = images_[state_];
- }
-
- return !img.isNull() ? img : images_[BS_NORMAL];
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// ToggleImageButton, public:
-
-ToggleImageButton::ToggleImageButton(ButtonListener* listener)
- : ImageButton(listener),
- toggled_(false) {
-}
-
-ToggleImageButton::~ToggleImageButton() {
-}
-
-void ToggleImageButton::SetToggled(bool toggled) {
- if (toggled == toggled_)
- return;
-
- for (int i = 0; i < BS_COUNT; ++i) {
- SkBitmap temp = images_[i];
- images_[i] = alternate_images_[i];
- alternate_images_[i] = temp;
- }
- toggled_ = toggled;
- SchedulePaint();
-}
-
-void ToggleImageButton::SetToggledImage(ButtonState state, SkBitmap* image) {
- if (toggled_) {
- images_[state] = image ? *image : SkBitmap();
- if (state_ == state)
- SchedulePaint();
- } else {
- alternate_images_[state] = image ? *image : SkBitmap();
- }
-}
-
-void ToggleImageButton::SetToggledTooltipText(const std::wstring& tooltip) {
- toggled_tooltip_text_.assign(tooltip);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// ToggleImageButton, ImageButton overrides:
-
-void ToggleImageButton::SetImage(ButtonState state, SkBitmap* image) {
- if (toggled_) {
- alternate_images_[state] = image ? *image : SkBitmap();
- } else {
- images_[state] = image ? *image : SkBitmap();
- if (state_ == state)
- SchedulePaint();
- }
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// ToggleImageButton, View overrides:
-
-bool ToggleImageButton::GetTooltipText(int x, int y, std::wstring* tooltip) {
- if (!toggled_ || toggled_tooltip_text_.empty())
- return Button::GetTooltipText(x, y, tooltip);
-
- *tooltip = toggled_tooltip_text_;
- return true;
-}
-
-} // namespace views
diff --git a/chrome/views/controls/button/image_button.h b/chrome/views/controls/button/image_button.h
deleted file mode 100644
index 6d304ba..0000000
--- a/chrome/views/controls/button/image_button.h
+++ /dev/null
@@ -1,101 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_CONTROLS_BUTTON_IMAGE_BUTTON_H_
-#define CHROME_VIEWS_CONTROLS_BUTTON_IMAGE_BUTTON_H_
-
-#include "chrome/views/controls/button/custom_button.h"
-#include "skia/include/SkBitmap.h"
-
-namespace views {
-
-// An image button.
-class ImageButton : public CustomButton {
- public:
- explicit ImageButton(ButtonListener* listener);
- virtual ~ImageButton();
-
- // Set the image the button should use for the provided state.
- virtual void SetImage(ButtonState aState, SkBitmap* anImage);
-
- enum HorizontalAlignment { ALIGN_LEFT = 0,
- ALIGN_CENTER,
- ALIGN_RIGHT, };
-
- enum VerticalAlignment { ALIGN_TOP = 0,
- ALIGN_MIDDLE,
- ALIGN_BOTTOM };
-
- // Sets how the image is laid out within the button's bounds.
- void SetImageAlignment(HorizontalAlignment h_align,
- VerticalAlignment v_align);
-
- // Overridden from View:
- virtual gfx::Size GetPreferredSize();
- virtual void Paint(ChromeCanvas* canvas);
-
- protected:
- // Returns the image to paint. This is invoked from paint and returns a value
- // from images.
- virtual SkBitmap GetImageToPaint();
-
- // The images used to render the different states of this button.
- SkBitmap images_[BS_COUNT];
-
- private:
- // Image alignment.
- HorizontalAlignment h_alignment_;
- VerticalAlignment v_alignment_;
-
- DISALLOW_COPY_AND_ASSIGN(ImageButton);
-};
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// ToggleImageButton
-//
-// A toggle-able ImageButton. It swaps out its graphics when toggled.
-//
-////////////////////////////////////////////////////////////////////////////////
-class ToggleImageButton : public ImageButton {
- public:
- ToggleImageButton(ButtonListener* listener);
- virtual ~ToggleImageButton();
-
- // Change the toggled state.
- void SetToggled(bool toggled);
-
- // Like Button::SetImage(), but to set the graphics used for the
- // "has been toggled" state. Must be called for each button state
- // before the button is toggled.
- void SetToggledImage(ButtonState state, SkBitmap* image);
-
- // Set the tooltip text displayed when the button is toggled.
- void SetToggledTooltipText(const std::wstring& tooltip);
-
- // Overridden from ImageButton:
- virtual void SetImage(ButtonState aState, SkBitmap* anImage);
-
- // Overridden from View:
- virtual bool GetTooltipText(int x, int y, std::wstring* tooltip);
-
- private:
- // The parent class's images_ member is used for the current images,
- // and this array is used to hold the alternative images.
- // We swap between the two when toggling.
- SkBitmap alternate_images_[BS_COUNT];
-
- // True if the button is currently toggled.
- bool toggled_;
-
- // The parent class's tooltip_text_ is displayed when not toggled, and
- // this one is shown when toggled.
- std::wstring toggled_tooltip_text_;
-
- DISALLOW_EVIL_CONSTRUCTORS(ToggleImageButton);
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_CONTROLS_BUTTON_IMAGE_BUTTON_H_
diff --git a/chrome/views/controls/button/menu_button.cc b/chrome/views/controls/button/menu_button.cc
deleted file mode 100644
index 6f82b16..0000000
--- a/chrome/views/controls/button/menu_button.cc
+++ /dev/null
@@ -1,253 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/controls/button/menu_button.h"
-
-#include "app/drag_drop_types.h"
-#include "app/gfx/chrome_canvas.h"
-#include "app/l10n_util.h"
-#include "app/resource_bundle.h"
-#include "chrome/common/win_util.h"
-#include "chrome/views/controls/button/button.h"
-#include "chrome/views/controls/menu/view_menu_delegate.h"
-#include "chrome/views/event.h"
-#include "chrome/views/widget/root_view.h"
-#include "chrome/views/widget/widget.h"
-#include "grit/generated_resources.h"
-#include "grit/theme_resources.h"
-
-using base::Time;
-using base::TimeDelta;
-
-namespace views {
-
-// The amount of time, in milliseconds, we wait before allowing another mouse
-// pressed event to show the menu.
-static const int64 kMinimumTimeBetweenButtonClicks = 100;
-
-// The down arrow used to differentiate the menu button from normal
-// text buttons.
-static const SkBitmap* kMenuMarker = NULL;
-
-// How much padding to put on the left and right of the menu marker.
-static const int kMenuMarkerPaddingLeft = 3;
-static const int kMenuMarkerPaddingRight = -1;
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// MenuButton - constructors, destructors, initialization
-//
-////////////////////////////////////////////////////////////////////////////////
-
-MenuButton::MenuButton(ButtonListener* listener,
- const std::wstring& text,
- ViewMenuDelegate* menu_delegate,
- bool show_menu_marker)
- : TextButton(listener, text),
- menu_visible_(false),
- menu_closed_time_(),
- menu_delegate_(menu_delegate),
- show_menu_marker_(show_menu_marker) {
- if (kMenuMarker == NULL) {
- kMenuMarker = ResourceBundle::GetSharedInstance()
- .GetBitmapNamed(IDR_MENU_DROPARROW);
- }
- set_alignment(TextButton::ALIGN_LEFT);
-}
-
-MenuButton::~MenuButton() {
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// MenuButton - Public APIs
-//
-////////////////////////////////////////////////////////////////////////////////
-
-gfx::Size MenuButton::GetPreferredSize() {
- gfx::Size prefsize = TextButton::GetPreferredSize();
- if (show_menu_marker_) {
- prefsize.Enlarge(kMenuMarker->width() + kMenuMarkerPaddingLeft +
- kMenuMarkerPaddingRight,
- 0);
- }
- return prefsize;
-}
-
-void MenuButton::Paint(ChromeCanvas* canvas, bool for_drag) {
- TextButton::Paint(canvas, for_drag);
-
- if (show_menu_marker_) {
- gfx::Insets insets = GetInsets();
-
- // We can not use the views' mirroring infrastructure for mirroring a
- // MenuButton control (see TextButton::Paint() for a detailed explanation
- // regarding why we can not flip the canvas). Therefore, we need to
- // manually mirror the position of the down arrow.
- gfx::Rect arrow_bounds(width() - insets.right() -
- kMenuMarker->width() - kMenuMarkerPaddingRight,
- height() / 2 - kMenuMarker->height() / 2,
- kMenuMarker->width(),
- kMenuMarker->height());
- arrow_bounds.set_x(MirroredLeftPointForRect(arrow_bounds));
- canvas->DrawBitmapInt(*kMenuMarker, arrow_bounds.x(), arrow_bounds.y());
- }
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// MenuButton - Events
-//
-////////////////////////////////////////////////////////////////////////////////
-
-int MenuButton::GetMaximumScreenXCoordinate() {
- Widget* widget = GetWidget();
-
- if (!widget) {
- NOTREACHED();
- return 0;
- }
-
- HWND hwnd = widget->GetNativeView();
- CRect t;
- ::GetWindowRect(hwnd, &t);
-
- gfx::Rect r(t);
- gfx::Rect monitor_rect = win_util::GetMonitorBoundsForRect(r);
- return monitor_rect.x() + monitor_rect.width() - 1;
-}
-
-bool MenuButton::Activate() {
- SetState(BS_PUSHED);
- // We need to synchronously paint here because subsequently we enter a
- // menu modal loop which will stop this window from updating and
- // receiving the paint message that should be spawned by SetState until
- // after the menu closes.
- PaintNow();
- if (menu_delegate_) {
- gfx::Rect lb = GetLocalBounds(true);
-
- // The position of the menu depends on whether or not the locale is
- // right-to-left.
- gfx::Point menu_position(lb.right(), lb.bottom());
- if (UILayoutIsRightToLeft())
- menu_position.set_x(lb.x());
-
- View::ConvertPointToScreen(this, &menu_position);
- if (UILayoutIsRightToLeft())
- menu_position.Offset(2, -4);
- else
- menu_position.Offset(-2, -4);
-
- int max_x_coordinate = GetMaximumScreenXCoordinate();
- if (max_x_coordinate && max_x_coordinate <= menu_position.x())
- menu_position.set_x(max_x_coordinate - 1);
-
- // We're about to show the menu from a mouse press. By showing from the
- // mouse press event we block RootView in mouse dispatching. This also
- // appears to cause RootView to get a mouse pressed BEFORE the mouse
- // release is seen, which means RootView sends us another mouse press no
- // matter where the user pressed. To force RootView to recalculate the
- // mouse target during the mouse press we explicitly set the mouse handler
- // to NULL.
- GetRootView()->SetMouseHandler(NULL);
-
- menu_visible_ = true;
- menu_delegate_->RunMenu(this, menu_position.ToPOINT(),
- GetWidget()->GetNativeView());
- menu_visible_ = false;
- menu_closed_time_ = Time::Now();
-
- // Now that the menu has closed, we need to manually reset state to
- // "normal" since the menu modal loop will have prevented normal
- // mouse move messages from getting to this View. We set "normal"
- // and not "hot" because the likelihood is that the mouse is now
- // somewhere else (user clicked elsewhere on screen to close the menu
- // or selected an item) and we will inevitably refresh the hot state
- // in the event the mouse _is_ over the view.
- SetState(BS_NORMAL);
-
- // We must return false here so that the RootView does not get stuck
- // sending all mouse pressed events to us instead of the appropriate
- // target.
- return false;
- }
- return true;
-}
-
-bool MenuButton::OnMousePressed(const MouseEvent& e) {
- RequestFocus();
- if (state() != BS_DISABLED) {
- // If we're draggable (GetDragOperations returns a non-zero value), then
- // don't pop on press, instead wait for release.
- if (e.IsOnlyLeftMouseButton() && HitTest(e.location()) &&
- GetDragOperations(e.x(), e.y()) == DragDropTypes::DRAG_NONE) {
- TimeDelta delta = Time::Now() - menu_closed_time_;
- int64 delta_in_milliseconds = delta.InMilliseconds();
- if (delta_in_milliseconds > kMinimumTimeBetweenButtonClicks) {
- return Activate();
- }
- }
- }
- return true;
-}
-
-void MenuButton::OnMouseReleased(const MouseEvent& e,
- bool canceled) {
- if (GetDragOperations(e.x(), e.y()) != DragDropTypes::DRAG_NONE &&
- state() != BS_DISABLED && !canceled && !InDrag() &&
- e.IsOnlyLeftMouseButton() && HitTest(e.location())) {
- Activate();
- } else {
- TextButton::OnMouseReleased(e, canceled);
- }
-}
-
-// When the space bar or the enter key is pressed we need to show the menu.
-bool MenuButton::OnKeyReleased(const KeyEvent& e) {
- if ((e.GetCharacter() == VK_SPACE) || (e.GetCharacter() == VK_RETURN)) {
- return Activate();
- }
- return true;
-}
-
-// The reason we override View::OnMouseExited is because we get this event when
-// we display the menu. If we don't override this method then
-// BaseButton::OnMouseExited will get the event and will set the button's state
-// to BS_NORMAL instead of keeping the state BM_PUSHED. This, in turn, will
-// cause the button to appear depressed while the menu is displayed.
-void MenuButton::OnMouseExited(const MouseEvent& event) {
- if ((state_ != BS_DISABLED) && (!menu_visible_) && (!InDrag())) {
- SetState(BS_NORMAL);
- }
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// MenuButton - accessibility
-//
-////////////////////////////////////////////////////////////////////////////////
-
-bool MenuButton::GetAccessibleDefaultAction(std::wstring* action) {
- DCHECK(action);
-
- action->assign(l10n_util::GetString(IDS_ACCACTION_PRESS));
- return true;
-}
-
-bool MenuButton::GetAccessibleRole(AccessibilityTypes::Role* role) {
- DCHECK(role);
-
- *role = AccessibilityTypes::ROLE_BUTTONDROPDOWN;
- return true;
-}
-
-bool MenuButton::GetAccessibleState(AccessibilityTypes::State* state) {
- DCHECK(state);
-
- *state = AccessibilityTypes::STATE_HASPOPUP;
- return true;
-}
-
-} // namespace views
diff --git a/chrome/views/controls/button/menu_button.h b/chrome/views/controls/button/menu_button.h
deleted file mode 100644
index 83485d0..0000000
--- a/chrome/views/controls/button/menu_button.h
+++ /dev/null
@@ -1,92 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_CONTROLS_BUTTON_MENU_BUTTON_H_
-#define CHROME_VIEWS_CONTROLS_BUTTON_MENU_BUTTON_H_
-
-#include <windows.h>
-
-#include "app/gfx/chrome_font.h"
-#include "chrome/views/background.h"
-#include "chrome/views/controls/button/text_button.h"
-#include "base/time.h"
-
-namespace views {
-
-class MouseEvent;
-class ViewMenuDelegate;
-
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// MenuButton
-//
-// A button that shows a menu when the left mouse button is pushed
-//
-////////////////////////////////////////////////////////////////////////////////
-class MenuButton : public TextButton {
- public:
- //
- // Create a Button
- MenuButton(ButtonListener* listener,
- const std::wstring& text,
- ViewMenuDelegate* menu_delegate,
- bool show_menu_marker);
- virtual ~MenuButton();
-
- void set_menu_delegate(ViewMenuDelegate* delegate) {
- menu_delegate_ = delegate;
- }
-
- // Activate the button (called when the button is pressed).
- virtual bool Activate();
-
- // Overridden to take into account the potential use of a drop marker.
- virtual gfx::Size GetPreferredSize();
- virtual void Paint(ChromeCanvas* canvas, bool for_drag);
-
- // These methods are overriden to implement a simple push button
- // behavior
- virtual bool OnMousePressed(const MouseEvent& e);
- void OnMouseReleased(const MouseEvent& e, bool canceled);
- virtual bool OnKeyReleased(const KeyEvent& e);
- virtual void OnMouseExited(const MouseEvent& event);
-
- // Accessibility accessors, overridden from View.
- virtual bool GetAccessibleDefaultAction(std::wstring* action);
- virtual bool GetAccessibleRole(AccessibilityTypes::Role* role);
- virtual bool GetAccessibleState(AccessibilityTypes::State* state);
-
- protected:
- // true if the menu is currently visible.
- bool menu_visible_;
-
- private:
-
- // Compute the maximum X coordinate for the current screen. MenuButtons
- // use this to make sure a menu is never shown off screen.
- int GetMaximumScreenXCoordinate();
-
- DISALLOW_EVIL_CONSTRUCTORS(MenuButton);
-
- // We use a time object in order to keep track of when the menu was closed.
- // The time is used for simulating menu behavior for the menu button; that
- // is, if the menu is shown and the button is pressed, we need to close the
- // menu. There is no clean way to get the second click event because the
- // menu is displayed using a modal loop and, unlike regular menus in Windows,
- // the button is not part of the displayed menu.
- base::Time menu_closed_time_;
-
- // The associated menu's resource identifier.
- ViewMenuDelegate* menu_delegate_;
-
- // Whether or not we're showing a drop marker.
- bool show_menu_marker_;
-
- friend class TextButtonBackground;
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_CONTROLS_BUTTON_MENU_BUTTON_H_
diff --git a/chrome/views/controls/button/native_button.cc b/chrome/views/controls/button/native_button.cc
deleted file mode 100644
index 07de95c..0000000
--- a/chrome/views/controls/button/native_button.cc
+++ /dev/null
@@ -1,192 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this
-// source code is governed by a BSD-style license that can be found in the
-// LICENSE file.
-
-#include "chrome/views/controls/button/native_button.h"
-
-#if defined(OS_LINUX)
-#include <gdk/gdkkeysyms.h>
-#endif
-
-#include "app/l10n_util.h"
-#include "base/logging.h"
-
-namespace views {
-
-static int kButtonBorderHWidth = 8;
-
-// static
-const char NativeButton::kViewClassName[] = "chrome/views/NativeButton";
-
-////////////////////////////////////////////////////////////////////////////////
-// NativeButton, public:
-
-NativeButton::NativeButton(ButtonListener* listener)
- : Button(listener),
- native_wrapper_(NULL),
- is_default_(false),
- ignore_minimum_size_(false),
- minimum_size_(50, 14) {
- // The min size in DLUs comes from
- // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwue/html/ch14e.asp
- InitBorder();
- SetFocusable(true);
-}
-
-NativeButton::NativeButton(ButtonListener* listener, const std::wstring& label)
- : Button(listener),
- native_wrapper_(NULL),
- is_default_(false),
- ignore_minimum_size_(false),
- minimum_size_(50, 14) {
- SetLabel(label); // SetLabel takes care of label layout in RTL UI.
- // The min size in DLUs comes from
- // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwue/html/ch14e.asp
- InitBorder();
- SetFocusable(true);
-}
-
-NativeButton::~NativeButton() {
-}
-
-void NativeButton::SetLabel(const std::wstring& label) {
- label_ = label;
-
- // Even though we create a flipped HWND for a native button when the locale
- // is right-to-left, Windows does not render text for the button using a
- // right-to-left context (perhaps because the parent HWND is not flipped).
- // The result is that RTL strings containing punctuation marks are not
- // displayed properly. For example, the string "...ABC" (where A, B and C are
- // Hebrew characters) is displayed as "ABC..." which is incorrect.
- //
- // In order to overcome this problem, we mark the localized Hebrew strings as
- // RTL strings explicitly (using the appropriate Unicode formatting) so that
- // Windows displays the text correctly regardless of the HWND hierarchy.
- std::wstring localized_label;
- if (l10n_util::AdjustStringForLocaleDirection(label_, &localized_label))
- label_ = localized_label;
-
- if (native_wrapper_)
- native_wrapper_->UpdateLabel();
-}
-
-void NativeButton::SetIsDefault(bool is_default) {
- if (is_default == is_default_)
- return;
-#if defined(OS_WIN)
- int return_code = VK_RETURN;
-#else
- int return_code = GDK_Return;
-#endif
- if (is_default)
- AddAccelerator(Accelerator(return_code, false, false, false));
- else
- RemoveAccelerator(Accelerator(return_code, false, false, false));
- SetAppearsAsDefault(is_default);
-}
-
-void NativeButton::SetAppearsAsDefault(bool appears_as_default) {
- is_default_ = appears_as_default;
- if (native_wrapper_)
- native_wrapper_->UpdateDefault();
-}
-
-void NativeButton::ButtonPressed() {
- RequestFocus();
-
- // TODO(beng): obtain mouse event flags for native buttons someday.
- NotifyClick(mouse_event_flags());
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// NativeButton, View overrides:
-
-gfx::Size NativeButton::GetPreferredSize() {
- if (!native_wrapper_)
- return gfx::Size();
-
- gfx::Size sz = native_wrapper_->GetView()->GetPreferredSize();
-
- // Add in the border size. (Do this before clamping the minimum size in case
- // that clamping causes an increase in size that would include the borders.
- gfx::Insets border = GetInsets();
- sz.set_width(sz.width() + border.left() + border.right());
- sz.set_height(sz.height() + border.top() + border.bottom());
-
- // Clamp the size returned to at least the minimum size.
- if (!ignore_minimum_size_) {
-#if defined(OS_WIN)
- if (minimum_size_.width()) {
- int min_width = font_.horizontal_dlus_to_pixels(minimum_size_.width());
- sz.set_width(std::max(static_cast<int>(sz.width()), min_width));
- }
- if (minimum_size_.height()) {
- int min_height = font_.vertical_dlus_to_pixels(minimum_size_.height());
- sz.set_height(std::max(static_cast<int>(sz.height()), min_height));
- }
-#else
- if (minimum_size_.width() || minimum_size_.height())
- NOTIMPLEMENTED();
-#endif
- }
-
- return sz;
-}
-
-void NativeButton::Layout() {
- if (native_wrapper_) {
- native_wrapper_->GetView()->SetBounds(0, 0, width(), height());
- native_wrapper_->GetView()->Layout();
- }
-}
-
-void NativeButton::SetEnabled(bool flag) {
- Button::SetEnabled(flag);
- if (native_wrapper_)
- native_wrapper_->UpdateEnabled();
-}
-
-void NativeButton::ViewHierarchyChanged(bool is_add, View* parent,
- View* child) {
- if (is_add && !native_wrapper_ && GetWidget()) {
- CreateWrapper();
- AddChildView(native_wrapper_->GetView());
- }
-}
-
-std::string NativeButton::GetClassName() const {
- return kViewClassName;
-}
-
-bool NativeButton::AcceleratorPressed(const Accelerator& accelerator) {
- if (IsEnabled()) {
- NotifyClick(mouse_event_flags());
- return true;
- }
- return false;
-}
-
-void NativeButton::Focus() {
- // Forward the focus to the wrapper.
- if (native_wrapper_)
- native_wrapper_->SetFocus();
- else
- Button::Focus(); // Will focus the RootView window (so we still get
- // keyboard messages).
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// NativeButton, protected:
-
-void NativeButton::CreateWrapper() {
- native_wrapper_ = NativeButtonWrapper::CreateNativeButtonWrapper(this);
- native_wrapper_->UpdateLabel();
- native_wrapper_->UpdateEnabled();
-}
-
-void NativeButton::InitBorder() {
- set_border(Border::CreateEmptyBorder(0, kButtonBorderHWidth, 0,
- kButtonBorderHWidth));
-}
-
-} // namespace views
diff --git a/chrome/views/controls/button/native_button.h b/chrome/views/controls/button/native_button.h
deleted file mode 100644
index bfe6639..0000000
--- a/chrome/views/controls/button/native_button.h
+++ /dev/null
@@ -1,100 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this
-// source code is governed by a BSD-style license that can be found in the
-// LICENSE file.
-
-#ifndef CHROME_VIEWS_CONTROLS_BUTTON_NATIVE_BUTTON_H_
-#define CHROME_VIEWS_CONTROLS_BUTTON_NATIVE_BUTTON_H_
-
-#include "app/gfx/chrome_font.h"
-#include "chrome/views/controls/button/button.h"
-#include "chrome/views/controls/button/native_button_wrapper.h"
-
-class ChromeFont;
-
-namespace views {
-
-class NativeButton : public Button {
- public:
- // The button's class name.
- static const char kViewClassName[];
-
- explicit NativeButton(ButtonListener* listener);
- NativeButton(ButtonListener* listener, const std::wstring& label);
- virtual ~NativeButton();
-
- // Sets/Gets the text to be used as the button's label.
- void SetLabel(const std::wstring& label);
- std::wstring label() const { return label_; }
-
- // Sets the font to be used when displaying the button's label.
- void set_font(const ChromeFont& font) { font_ = font; }
- const ChromeFont& font() const { return font_; }
-
- // Sets/Gets whether or not the button appears and behaves as the default
- // button in its current context.
- void SetIsDefault(bool default_button);
- bool is_default() const { return is_default_; }
-
- // Sets whether or not the button appears as the default button. This does
- // not make it behave as the default (i.e. no enter key accelerator is
- // registered, use SetIsDefault for that).
- void SetAppearsAsDefault(bool default_button);
-
- void set_minimum_size(const gfx::Size& minimum_size) {
- minimum_size_ = minimum_size;
- }
- void set_ignore_minimum_size(bool ignore_minimum_size) {
- ignore_minimum_size_ = ignore_minimum_size;
- }
-
- // Called by the wrapper when the actual wrapped native button was pressed.
- void ButtonPressed();
-
- // Overridden from View:
- virtual gfx::Size GetPreferredSize();
- virtual void Layout();
- virtual void SetEnabled(bool flag);
- virtual void Focus();
-
- protected:
- virtual void ViewHierarchyChanged(bool is_add, View* parent, View* child);
- virtual std::string GetClassName() const;
- virtual bool AcceleratorPressed(const Accelerator& accelerator);
-
- // Create the button wrapper. Can be overridden by subclass to create a
- // wrapper of a particular type. See NativeButtonWrapper interface for types.
- virtual void CreateWrapper();
-
- // Sets a border to the button. Override to set a different border or to not
- // set one (the default is 0,8,0,8 for push buttons).
- virtual void InitBorder();
-
- // The object that actually implements the native button.
- NativeButtonWrapper* native_wrapper_;
-
- private:
- // The button label.
- std::wstring label_;
-
- // True if the button is the default button in its context.
- bool is_default_;
-
- // The font used to render the button label.
- ChromeFont font_;
-
- // True if the button should ignore the minimum size for the platform. Default
- // is false. Set to true to create narrower buttons.
- bool ignore_minimum_size_;
-
- // The minimum size of the button from the specified size in native dialog
- // units. The definition of this unit may vary from platform to platform. If
- // the width/height is non-zero, the preferred size of the button will not be
- // less than this value when the dialog units are converted to pixels.
- gfx::Size minimum_size_;
-
- DISALLOW_COPY_AND_ASSIGN(NativeButton);
-};
-
-} // namespace views
-
-#endif // #ifndef CHROME_VIEWS_CONTROLS_BUTTON_NATIVE_BUTTON_H_
diff --git a/chrome/views/controls/button/native_button_win.cc b/chrome/views/controls/button/native_button_win.cc
deleted file mode 100644
index 5a254ac..0000000
--- a/chrome/views/controls/button/native_button_win.cc
+++ /dev/null
@@ -1,234 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this
-// source code is governed by a BSD-style license that can be found in the
-// LICENSE file.
-
-#include "chrome/views/controls/button/native_button_win.h"
-
-#include "base/logging.h"
-#include "chrome/views/controls/button/checkbox.h"
-#include "chrome/views/controls/button/native_button.h"
-#include "chrome/views/controls/button/radio_button.h"
-#include "chrome/views/widget/widget.h"
-
-namespace views {
-
-////////////////////////////////////////////////////////////////////////////////
-// NativeButtonWin, public:
-
-NativeButtonWin::NativeButtonWin(NativeButton* native_button)
- : NativeControlWin(),
- native_button_(native_button) {
- // Associates the actual HWND with the native_button so the native_button is
- // the one considered as having the focus (not the wrapper) when the HWND is
- // focused directly (with a click for example).
- SetAssociatedFocusView(native_button);
-}
-
-NativeButtonWin::~NativeButtonWin() {
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// NativeButtonWin, NativeButtonWrapper implementation:
-
-void NativeButtonWin::UpdateLabel() {
- SetWindowText(GetHWND(), native_button_->label().c_str());
-}
-
-void NativeButtonWin::UpdateFont() {
- SendMessage(GetHWND(), WM_SETFONT,
- reinterpret_cast<WPARAM>(native_button_->font().hfont()),
- FALSE);
-}
-
-void NativeButtonWin::UpdateEnabled() {
- SetEnabled(native_button_->IsEnabled());
-}
-
-void NativeButtonWin::UpdateDefault() {
- if (!IsCheckbox()) {
- SendMessage(GetHWND(), BM_SETSTYLE,
- native_button_->is_default() ? BS_DEFPUSHBUTTON : BS_PUSHBUTTON,
- true);
- }
-}
-
-View* NativeButtonWin::GetView() {
- return this;
-}
-
-void NativeButtonWin::SetFocus() {
- // Focus the associated HWND.
- Focus();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// NativeButtonWin, View overrides:
-
-gfx::Size NativeButtonWin::GetPreferredSize() {
- SIZE sz = {0};
- SendMessage(GetHWND(), BCM_GETIDEALSIZE, 0, reinterpret_cast<LPARAM>(&sz));
-
- return gfx::Size(sz.cx, sz.cy);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// NativeButtonWin, NativeControlWin overrides:
-
-bool NativeButtonWin::ProcessMessage(UINT message, WPARAM w_param,
- LPARAM l_param, LRESULT* result) {
- if (message == WM_COMMAND && HIWORD(w_param) == BN_CLICKED) {
- native_button_->ButtonPressed();
- *result = 0;
- return true;
- }
- return NativeControlWin::ProcessMessage(message, w_param, l_param, result);
-}
-
-bool NativeButtonWin::OnKeyDown(int vkey) {
- bool enter_pressed = vkey == VK_RETURN;
- if (enter_pressed)
- native_button_->ButtonPressed();
- return enter_pressed;
-}
-
-bool NativeButtonWin::NotifyOnKeyDown() const {
- return true;
-}
-
-void NativeButtonWin::CreateNativeControl() {
- DWORD flags = WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | BS_PUSHBUTTON;
- if (native_button_->is_default())
- flags |= BS_DEFPUSHBUTTON;
- HWND control_hwnd = CreateWindowEx(GetAdditionalExStyle(), L"BUTTON", L"",
- flags, 0, 0, width(), height(),
- GetWidget()->GetNativeView(), NULL, NULL,
- NULL);
- NativeControlCreated(control_hwnd);
-}
-
-void NativeButtonWin::NativeControlCreated(HWND control_hwnd) {
- NativeControlWin::NativeControlCreated(control_hwnd);
-
- UpdateFont();
- UpdateLabel();
- UpdateDefault();
-}
-
-// We could obtain this from the theme, but that only works if themes are
-// active.
-static const int kCheckboxSize = 13; // pixels
-
-////////////////////////////////////////////////////////////////////////////////
-// NativeCheckboxWin, public:
-
-NativeCheckboxWin::NativeCheckboxWin(Checkbox* checkbox)
- : NativeButtonWin(checkbox),
- checkbox_(checkbox) {
-}
-
-NativeCheckboxWin::~NativeCheckboxWin() {
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// NativeCheckboxWin, View overrides:
-
-gfx::Size NativeCheckboxWin::GetPreferredSize() {
- return gfx::Size(kCheckboxSize, kCheckboxSize);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// NativeCheckboxWin, NativeButtonWrapper implementation:
-
-void NativeCheckboxWin::UpdateChecked() {
- SendMessage(GetHWND(), BM_SETCHECK,
- checkbox_->checked() ? BST_CHECKED : BST_UNCHECKED, 0);
-}
-
-void NativeCheckboxWin::SetPushed(bool pushed) {
- SendMessage(GetHWND(), BM_SETSTATE, pushed, 0);
-}
-
-bool NativeCheckboxWin::OnKeyDown(int vkey) {
- // Override the NativeButtonWin behavior which triggers the button on enter
- // key presses when focused.
- return false;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// NativeCheckboxWin, NativeButtonWin overrides:
-
-bool NativeCheckboxWin::ProcessMessage(UINT message, WPARAM w_param,
- LPARAM l_param, LRESULT* result) {
- if (message == WM_COMMAND && HIWORD(w_param) == BN_CLICKED) {
- if (!IsRadioButton() || !checkbox_->checked())
- checkbox_->SetChecked(!checkbox_->checked());
- // Fall through to the NativeButtonWin's handler, which will send the
- // clicked notification to the listener...
- }
- return NativeButtonWin::ProcessMessage(message, w_param, l_param, result);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// NativeCheckboxWin, protected:
-
-void NativeCheckboxWin::CreateNativeControl() {
- HWND control_hwnd = CreateWindowEx(
- WS_EX_TRANSPARENT | GetAdditionalExStyle(), L"BUTTON", L"",
- WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | BS_CHECKBOX,
- 0, 0, width(), height(), GetWidget()->GetNativeView(), NULL, NULL, NULL);
- NativeControlCreated(control_hwnd);
-}
-
-void NativeCheckboxWin::NativeControlCreated(HWND control_hwnd) {
- NativeButtonWin::NativeControlCreated(control_hwnd);
- UpdateChecked();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// NativeRadioButtonWin, public:
-
-NativeRadioButtonWin::NativeRadioButtonWin(RadioButton* radio_button)
- : NativeCheckboxWin(radio_button) {
-}
-
-NativeRadioButtonWin::~NativeRadioButtonWin() {
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// NativeRadioButtonWin, NativeCheckboxWin overrides:
-
-void NativeRadioButtonWin::CreateNativeControl() {
- HWND control_hwnd = CreateWindowEx(
- GetAdditionalExStyle(), L"BUTTON",
- L"", WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | BS_RADIOBUTTON,
- 0, 0, width(), height(), GetWidget()->GetNativeView(), NULL, NULL, NULL);
- NativeControlCreated(control_hwnd);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// NativeButtonWrapper, public:
-
-// static
-int NativeButtonWrapper::GetFixedWidth() {
- return kCheckboxSize;
-}
-
-// static
-NativeButtonWrapper* NativeButtonWrapper::CreateNativeButtonWrapper(
- NativeButton* native_button) {
- return new NativeButtonWin(native_button);
-}
-
-// static
-NativeButtonWrapper* NativeButtonWrapper::CreateCheckboxWrapper(
- Checkbox* checkbox) {
- return new NativeCheckboxWin(checkbox);
-}
-
-// static
-NativeButtonWrapper* NativeButtonWrapper::CreateRadioButtonWrapper(
- RadioButton* radio_button) {
- return new NativeRadioButtonWin(radio_button);
-}
-
-} // namespace views
diff --git a/chrome/views/controls/button/native_button_win.h b/chrome/views/controls/button/native_button_win.h
deleted file mode 100644
index ce1cc75e..0000000
--- a/chrome/views/controls/button/native_button_win.h
+++ /dev/null
@@ -1,105 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this
-// source code is governed by a BSD-style license that can be found in the
-// LICENSE file.
-
-#ifndef CHROME_VIEWS_CONTROLS_BUTTON_NATIVE_BUTTON_WIN_H_
-#define CHROME_VIEWS_CONTROLS_BUTTON_NATIVE_BUTTON_WIN_H_
-
-#include "chrome/views/controls/native_control_win.h"
-#include "chrome/views/controls/button/native_button_wrapper.h"
-
-namespace views {
-
-// A View that hosts a native Windows button.
-class NativeButtonWin : public NativeControlWin,
- public NativeButtonWrapper {
- public:
- explicit NativeButtonWin(NativeButton* native_button);
- virtual ~NativeButtonWin();
-
- // Overridden from NativeButtonWrapper:
- virtual void UpdateLabel();
- virtual void UpdateFont();
- virtual void UpdateEnabled();
- virtual void UpdateDefault();
- virtual View* GetView();
- virtual void SetFocus();
-
- // Overridden from View:
- virtual gfx::Size GetPreferredSize();
-
- // Overridden from NativeControlWin:
- virtual bool ProcessMessage(UINT message,
- WPARAM w_param,
- LPARAM l_param,
- LRESULT* result);
- virtual bool OnKeyDown(int vkey);
-
- protected:
- virtual bool NotifyOnKeyDown() const;
- virtual void CreateNativeControl();
- virtual void NativeControlCreated(HWND control_hwnd);
-
- // Returns true if this button is actually a checkbox or radio button.
- virtual bool IsCheckbox() const { return false; }
-
- private:
- // The NativeButton we are bound to.
- NativeButton* native_button_;
-
- DISALLOW_COPY_AND_ASSIGN(NativeButtonWin);
-};
-
-// A View that hosts a native Windows checkbox.
-class NativeCheckboxWin : public NativeButtonWin {
- public:
- explicit NativeCheckboxWin(Checkbox* native_button);
- virtual ~NativeCheckboxWin();
-
- // Overridden from View:
- virtual gfx::Size GetPreferredSize();
-
- // Overridden from NativeButtonWrapper:
- virtual void UpdateChecked();
- virtual void SetPushed(bool pushed);
- virtual bool OnKeyDown(int vkey);
-
- // Overridden from NativeControlWin:
- virtual bool ProcessMessage(UINT message,
- WPARAM w_param,
- LPARAM l_param,
- LRESULT* result);
-
- protected:
- virtual void CreateNativeControl();
- virtual void NativeControlCreated(HWND control_hwnd);
- virtual bool IsCheckbox() const { return true; }
-
- // Returns true if this button is actually a radio button.
- virtual bool IsRadioButton() const { return false; }
-
- private:
- // The Checkbox we are bound to.
- Checkbox* checkbox_;
-
- DISALLOW_COPY_AND_ASSIGN(NativeCheckboxWin);
-};
-
-// A View that hosts a native Windows radio button.
-class NativeRadioButtonWin : public NativeCheckboxWin {
- public:
- explicit NativeRadioButtonWin(RadioButton* radio_button);
- virtual ~NativeRadioButtonWin();
-
- protected:
- // Overridden from NativeCheckboxWin:
- virtual void CreateNativeControl();
- virtual bool IsRadioButton() const { return true; }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(NativeRadioButtonWin);
-};
-
-} // namespace views
-
-#endif // #ifndef CHROME_VIEWS_CONTROLS_BUTTON_NATIVE_BUTTON_WIN_H_
diff --git a/chrome/views/controls/button/native_button_wrapper.h b/chrome/views/controls/button/native_button_wrapper.h
deleted file mode 100644
index 2d7fc25..0000000
--- a/chrome/views/controls/button/native_button_wrapper.h
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this
-// source code is governed by a BSD-style license that can be found in the
-// LICENSE file.
-
-#ifndef CHROME_VIEWS_CONTROLS_BUTTON_NATIVE_BUTTON_WRAPPER_H_
-#define CHROME_VIEWS_CONTROLS_BUTTON_NATIVE_BUTTON_WRAPPER_H_
-
-class ChromeFont;
-
-namespace views {
-
-class Checkbox;
-class NativeButton;
-class RadioButton;
-class View;
-
-// A specialization of NativeControlWrapper that hosts a platform-native button.
-class NativeButtonWrapper {
- public:
- // Updates the native button's label from the state stored in its associated
- // NativeButton.
- virtual void UpdateLabel() = 0;
-
- // Updates the native button's label font from the state stored in its
- // associated NativeButton.
- virtual void UpdateFont() = 0;
-
- // Updates the native button's enabled state from the state stored in its
- // associated NativeButton.
- virtual void UpdateEnabled() = 0;
-
- // Updates the native button's default state from the state stored in its
- // associated NativeButton.
- virtual void UpdateDefault() = 0;
-
- // Updates the native button's checked state from the state stored in its
- // associated NativeCheckbox. Valid only for checkboxes and radio buttons.
- virtual void UpdateChecked() {}
-
- // Shows the pushed state for the button if |pushed| is true.
- virtual void SetPushed(bool pushed) {};
-
- // Retrieves the views::View that hosts the native control.
- virtual View* GetView() = 0;
-
- // Sets the focus to the button.
- virtual void SetFocus() = 0;
-
- // Return the width of the button. Used for fixed size buttons (checkboxes and
- // radio buttons) only.
- static int GetFixedWidth();
-
- // Creates an appropriate NativeButtonWrapper for the platform.
- static NativeButtonWrapper* CreateNativeButtonWrapper(NativeButton* button);
- static NativeButtonWrapper* CreateCheckboxWrapper(Checkbox* checkbox);
- static NativeButtonWrapper* CreateRadioButtonWrapper(
- RadioButton* radio_button);
-
-};
-
-} // namespace views
-
-#endif // #ifndef CHROME_VIEWS_CONTROLS_BUTTON_NATIVE_BUTTON_WRAPPER_H_
diff --git a/chrome/views/controls/button/radio_button.cc b/chrome/views/controls/button/radio_button.cc
deleted file mode 100644
index fa18a5d..0000000
--- a/chrome/views/controls/button/radio_button.cc
+++ /dev/null
@@ -1,107 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this
-// source code is governed by a BSD-style license that can be found in the
-// LICENSE file.
-
-#include "chrome/views/controls/button/radio_button.h"
-
-#include "chrome/views/widget/root_view.h"
-
-namespace views {
-
-// static
-const char RadioButton::kViewClassName[] = "chrome/views/RadioButton";
-
-////////////////////////////////////////////////////////////////////////////////
-// RadioButton, public:
-
-RadioButton::RadioButton() : Checkbox() {
-}
-
-RadioButton::RadioButton(const std::wstring& label) : Checkbox(label) {
-}
-
-RadioButton::RadioButton(const std::wstring& label, int group_id)
- : Checkbox(label) {
- SetGroup(group_id);
-}
-
-RadioButton::~RadioButton() {
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// RadioButton, Checkbox overrides:
-
-void RadioButton::SetChecked(bool checked) {
- if (checked == RadioButton::checked())
- return;
- if (checked) {
- // We can't just get the root view here because sometimes the radio
- // button isn't attached to a root view (e.g., if it's part of a tab page
- // that is currently not active).
- View* container = GetParent();
- while (container && container->GetParent())
- container = container->GetParent();
- if (container) {
- std::vector<View*> other;
- container->GetViewsWithGroup(GetGroup(), &other);
- std::vector<View*>::iterator i;
- for (i = other.begin(); i != other.end(); ++i) {
- if (*i != this) {
- RadioButton* peer = static_cast<RadioButton*>(*i);
- peer->SetChecked(false);
- }
- }
- }
- }
- Checkbox::SetChecked(checked);
-
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// RadioButton, View overrides:
-
-View* RadioButton::GetSelectedViewForGroup(int group_id) {
- std::vector<View*> views;
- GetRootView()->GetViewsWithGroup(group_id, &views);
- if (views.empty())
- return NULL;
-
- for (std::vector<View*>::const_iterator iter = views.begin();
- iter != views.end(); ++iter) {
- RadioButton* radio_button = static_cast<RadioButton*>(*iter);
- if (radio_button->checked())
- return radio_button;
- }
- return NULL;
-}
-
-bool RadioButton::IsGroupFocusTraversable() const {
- // When focusing a radio button with tab/shift+tab, only the selected button
- // from the group should be focused.
- return false;
-}
-
-void RadioButton::OnMouseReleased(const MouseEvent& event, bool canceled) {
- native_wrapper_->SetPushed(false);
- // Set the checked state to true only if we are unchecked, since we can't
- // be toggled on and off like a checkbox.
- if (!checked() && !canceled && HitTestLabel(event))
- SetChecked(true);
-
- ButtonPressed();
-}
-
-std::string RadioButton::GetClassName() const {
- return kViewClassName;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// RadioButton, NativeButton overrides:
-
-void RadioButton::CreateWrapper() {
- native_wrapper_ = NativeButtonWrapper::CreateRadioButtonWrapper(this);
- native_wrapper_->UpdateLabel();
- native_wrapper_->UpdateChecked();
-}
-
-} // namespace views
diff --git a/chrome/views/controls/button/radio_button.h b/chrome/views/controls/button/radio_button.h
deleted file mode 100644
index 0fe6d687..0000000
--- a/chrome/views/controls/button/radio_button.h
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this
-// source code is governed by a BSD-style license that can be found in the
-// LICENSE file.
-
-#ifndef CHROME_VIEWS_CONTROLS_BUTTON_RADIO_BUTTON_H_
-#define CHROME_VIEWS_CONTROLS_BUTTON_RADIO_BUTTON_H_
-
-#include "chrome/views/controls/button/checkbox.h"
-
-namespace views {
-
-// A Checkbox subclass representing a radio button.
-class RadioButton : public Checkbox {
- public:
- // The button's class name.
- static const char kViewClassName[];
-
- RadioButton();
- RadioButton(const std::wstring& label);
- RadioButton(const std::wstring& label, int group_id);
- virtual ~RadioButton();
-
- // Overridden from Checkbox:
- virtual void SetChecked(bool checked);
-
- // Overridden from View:
- virtual View* GetSelectedViewForGroup(int group_id);
- virtual bool IsGroupFocusTraversable() const;
- virtual void OnMouseReleased(const MouseEvent& event, bool canceled);
-
- protected:
- virtual std::string GetClassName() const;
-
- // Overridden from NativeButton:
- virtual void CreateWrapper();
-
- private:
- DISALLOW_COPY_AND_ASSIGN(RadioButton);
-};
-
-} // namespace views
-
-#endif // #ifndef CHROME_VIEWS_CONTROLS_BUTTON_RADIO_BUTTON_H_
diff --git a/chrome/views/controls/button/text_button.cc b/chrome/views/controls/button/text_button.cc
deleted file mode 100644
index d175fd4..0000000
--- a/chrome/views/controls/button/text_button.cc
+++ /dev/null
@@ -1,325 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/controls/button/text_button.h"
-
-#include "app/gfx/chrome_canvas.h"
-#include "app/l10n_util.h"
-#include "app/throb_animation.h"
-#include "app/resource_bundle.h"
-#include "chrome/views/controls/button/button.h"
-#include "chrome/views/event.h"
-#include "grit/theme_resources.h"
-
-namespace views {
-
-// Padding between the icon and text.
-static const int kIconTextPadding = 5;
-
-// Preferred padding between text and edge
-static const int kPreferredPaddingHorizontal = 6;
-static const int kPreferredPaddingVertical = 5;
-
-static const SkColor kEnabledColor = SkColorSetRGB(6, 45, 117);
-static const SkColor kHighlightColor = SkColorSetARGB(200, 255, 255, 255);
-static const SkColor kDisabledColor = SkColorSetRGB(161, 161, 146);
-
-// How long the hover fade animation should last.
-static const int kHoverAnimationDurationMs = 170;
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// TextButtonBorder - constructors, destructors, initialization
-//
-////////////////////////////////////////////////////////////////////////////////
-
-TextButtonBorder::TextButtonBorder() {
- ResourceBundle& rb = ResourceBundle::GetSharedInstance();
-
- hot_set_.top_left = rb.GetBitmapNamed(IDR_TEXTBUTTON_TOP_LEFT_H);
- hot_set_.top = rb.GetBitmapNamed(IDR_TEXTBUTTON_TOP_H);
- hot_set_.top_right = rb.GetBitmapNamed(IDR_TEXTBUTTON_TOP_RIGHT_H);
- hot_set_.left = rb.GetBitmapNamed(IDR_TEXTBUTTON_LEFT_H);
- hot_set_.center = rb.GetBitmapNamed(IDR_TEXTBUTTON_CENTER_H);
- hot_set_.right = rb.GetBitmapNamed(IDR_TEXTBUTTON_RIGHT_H);
- hot_set_.bottom_left = rb.GetBitmapNamed(IDR_TEXTBUTTON_BOTTOM_LEFT_H);
- hot_set_.bottom = rb.GetBitmapNamed(IDR_TEXTBUTTON_BOTTOM_H);
- hot_set_.bottom_right = rb.GetBitmapNamed(IDR_TEXTBUTTON_BOTTOM_RIGHT_H);
-
- pushed_set_.top_left = rb.GetBitmapNamed(IDR_TEXTBUTTON_TOP_LEFT_P);
- pushed_set_.top = rb.GetBitmapNamed(IDR_TEXTBUTTON_TOP_P);
- pushed_set_.top_right = rb.GetBitmapNamed(IDR_TEXTBUTTON_TOP_RIGHT_P);
- pushed_set_.left = rb.GetBitmapNamed(IDR_TEXTBUTTON_LEFT_P);
- pushed_set_.center = rb.GetBitmapNamed(IDR_TEXTBUTTON_CENTER_P);
- pushed_set_.right = rb.GetBitmapNamed(IDR_TEXTBUTTON_RIGHT_P);
- pushed_set_.bottom_left = rb.GetBitmapNamed(IDR_TEXTBUTTON_BOTTOM_LEFT_P);
- pushed_set_.bottom = rb.GetBitmapNamed(IDR_TEXTBUTTON_BOTTOM_P);
- pushed_set_.bottom_right = rb.GetBitmapNamed(IDR_TEXTBUTTON_BOTTOM_RIGHT_P);
-}
-
-TextButtonBorder::~TextButtonBorder() {
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// TextButtonBackground - painting
-//
-////////////////////////////////////////////////////////////////////////////////
-
-void TextButtonBorder::Paint(const View& view, ChromeCanvas* canvas) const {
- const TextButton* mb = static_cast<const TextButton*>(&view);
- int state = mb->state();
-
- // TextButton takes care of deciding when to call Paint.
- const MBBImageSet* set = &hot_set_;
- if (state == TextButton::BS_PUSHED)
- set = &pushed_set_;
-
- if (set) {
- gfx::Rect bounds = view.bounds();
-
- // Draw the top left image
- canvas->DrawBitmapInt(*set->top_left, 0, 0);
-
- // Tile the top image
- canvas->TileImageInt(
- *set->top,
- set->top_left->width(),
- 0,
- bounds.width() - set->top_right->width() - set->top_left->width(),
- set->top->height());
-
- // Draw the top right image
- canvas->DrawBitmapInt(*set->top_right,
- bounds.width() - set->top_right->width(), 0);
-
- // Tile the left image
- canvas->TileImageInt(
- *set->left,
- 0,
- set->top_left->height(),
- set->top_left->width(),
- bounds.height() - set->top->height() - set->bottom_left->height());
-
- // Tile the center image
- canvas->TileImageInt(
- *set->center,
- set->left->width(),
- set->top->height(),
- bounds.width() - set->right->width() - set->left->width(),
- bounds.height() - set->bottom->height() - set->top->height());
-
- // Tile the right image
- canvas->TileImageInt(
- *set->right,
- bounds.width() - set->right->width(),
- set->top_right->height(),
- bounds.width(),
- bounds.height() - set->bottom_right->height() -
- set->top_right->height());
-
- // Draw the bottom left image
- canvas->DrawBitmapInt(*set->bottom_left,
- 0,
- bounds.height() - set->bottom_left->height());
-
- // Tile the bottom image
- canvas->TileImageInt(
- *set->bottom,
- set->bottom_left->width(),
- bounds.height() - set->bottom->height(),
- bounds.width() - set->bottom_right->width() -
- set->bottom_left->width(),
- set->bottom->height());
-
- // Draw the bottom right image
- canvas->DrawBitmapInt(*set->bottom_right,
- bounds.width() - set->bottom_right->width(),
- bounds.height() - set->bottom_right->height());
- } else {
- // Do nothing
- }
-}
-
-void TextButtonBorder::GetInsets(gfx::Insets* insets) const {
- insets->Set(kPreferredPaddingVertical, kPreferredPaddingHorizontal,
- kPreferredPaddingVertical, kPreferredPaddingHorizontal);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// TextButton, public:
-
-TextButton::TextButton(ButtonListener* listener, const std::wstring& text)
- : CustomButton(listener),
- alignment_(ALIGN_LEFT),
- font_(ResourceBundle::GetSharedInstance().GetFont(
- ResourceBundle::BaseFont)),
- color_(kEnabledColor),
- max_width_(0) {
- SetText(text);
- set_border(new TextButtonBorder);
- SetAnimationDuration(kHoverAnimationDurationMs);
-}
-
-TextButton::~TextButton() {
-}
-
-void TextButton::SetText(const std::wstring& text) {
- text_ = text;
- // Update our new current and max text size
- text_size_.SetSize(font_.GetStringWidth(text_), font_.height());
- max_text_size_.SetSize(std::max(max_text_size_.width(), text_size_.width()),
- std::max(max_text_size_.height(),
- text_size_.height()));
-}
-
-void TextButton::SetIcon(const SkBitmap& icon) {
- icon_ = icon;
-}
-
-void TextButton::ClearMaxTextSize() {
- max_text_size_ = text_size_;
-}
-
-void TextButton::Paint(ChromeCanvas* canvas, bool for_drag) {
- if (!for_drag) {
- PaintBackground(canvas);
-
- if (hover_animation_->IsAnimating()) {
- // Draw the hover bitmap into an offscreen buffer, then blend it
- // back into the current canvas.
- canvas->saveLayerAlpha(NULL,
- static_cast<int>(hover_animation_->GetCurrentValue() * 255),
- SkCanvas::kARGB_NoClipLayer_SaveFlag);
- canvas->drawARGB(0, 255, 255, 255, SkPorterDuff::kClear_Mode);
- PaintBorder(canvas);
- canvas->restore();
- } else if (state_ == BS_HOT || state_ == BS_PUSHED) {
- PaintBorder(canvas);
- }
-
- PaintFocusBorder(canvas);
- }
-
- gfx::Insets insets = GetInsets();
- int available_width = width() - insets.width();
- int available_height = height() - insets.height();
- // Use the actual text (not max) size to properly center the text.
- int content_width = text_size_.width();
- if (icon_.width() > 0) {
- content_width += icon_.width();
- if (!text_.empty())
- content_width += kIconTextPadding;
- }
- // Place the icon along the left edge.
- int icon_x;
- if (alignment_ == ALIGN_LEFT) {
- icon_x = insets.left();
- } else if (alignment_ == ALIGN_RIGHT) {
- icon_x = available_width - content_width;
- } else {
- icon_x =
- std::max(0, (available_width - content_width) / 2) + insets.left();
- }
- int text_x = icon_x;
- if (icon_.width() > 0)
- text_x += icon_.width() + kIconTextPadding;
- const int text_width = std::min(text_size_.width(),
- width() - insets.right() - text_x);
- int text_y = (available_height - text_size_.height()) / 2 + insets.top();
-
- if (text_width > 0) {
- // Because the text button can (at times) draw multiple elements on the
- // canvas, we can not mirror the button by simply flipping the canvas as
- // doing this will mirror the text itself. Flipping the canvas will also
- // make the icons look wrong because icons are almost always represented as
- // direction insentisive bitmaps and such bitmaps should never be flipped
- // horizontally.
- //
- // Due to the above, we must perform the flipping manually for RTL UIs.
- gfx::Rect text_bounds(text_x, text_y, text_width, text_size_.height());
- text_bounds.set_x(MirroredLeftPointForRect(text_bounds));
-
- if (for_drag) {
-#if defined(OS_WIN)
- // TODO(erg): Either port DrawStringWithHalo to linux or find an
- // alternative here.
- canvas->DrawStringWithHalo(text_, font_, color_, kHighlightColor,
- text_bounds.x(),
- text_bounds.y(),
- text_bounds.width(),
- text_bounds.height(),
- l10n_util::DefaultCanvasTextAlignment());
-#endif
- } else {
- // Draw bevel highlight
- canvas->DrawStringInt(text_,
- font_,
- kHighlightColor,
- text_bounds.x() + 1,
- text_bounds.y() + 1,
- text_bounds.width(),
- text_bounds.height());
-
- canvas->DrawStringInt(text_,
- font_,
- color_,
- text_bounds.x(),
- text_bounds.y(),
- text_bounds.width(),
- text_bounds.height());
- }
- }
-
- if (icon_.width() > 0) {
- int icon_y = (available_height - icon_.height()) / 2 + insets.top();
-
- // Mirroring the icon position if necessary.
- gfx::Rect icon_bounds(icon_x, icon_y, icon_.width(), icon_.height());
- icon_bounds.set_x(MirroredLeftPointForRect(icon_bounds));
- canvas->DrawBitmapInt(icon_, icon_bounds.x(), icon_bounds.y());
- }
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// TextButton, View overrides:
-
-gfx::Size TextButton::GetPreferredSize() {
- gfx::Insets insets = GetInsets();
-
- // Use the max size to set the button boundaries.
- gfx::Size prefsize(max_text_size_.width() + icon_.width() + insets.width(),
- std::max(max_text_size_.height(), icon_.height()) +
- insets.height());
-
- if (icon_.width() > 0 && !text_.empty())
- prefsize.Enlarge(kIconTextPadding, 0);
-
- if (max_width_ > 0)
- prefsize.set_width(std::min(max_width_, prefsize.width()));
-
- return prefsize;
-}
-
-gfx::Size TextButton::GetMinimumSize() {
- return max_text_size_;
-}
-
-void TextButton::SetEnabled(bool enabled) {
- if (enabled == IsEnabled())
- return;
- CustomButton::SetEnabled(enabled);
- color_ = enabled ? kEnabledColor : kDisabledColor;
- SchedulePaint();
-}
-
-bool TextButton::OnMousePressed(const MouseEvent& e) {
- return true;
-}
-
-void TextButton::Paint(ChromeCanvas* canvas) {
- Paint(canvas, false);
-}
-
-} // namespace views
diff --git a/chrome/views/controls/button/text_button.h b/chrome/views/controls/button/text_button.h
deleted file mode 100644
index bdca6cb..0000000
--- a/chrome/views/controls/button/text_button.h
+++ /dev/null
@@ -1,138 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_CONTROLS_BUTTON_TEXT_BUTTON_H_
-#define CHROME_VIEWS_CONTROLS_BUTTON_TEXT_BUTTON_H_
-
-#include "app/gfx/chrome_font.h"
-#include "chrome/views/border.h"
-#include "chrome/views/controls/button/custom_button.h"
-#include "skia/include/SkBitmap.h"
-
-namespace views {
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// TextButtonBorder
-//
-// A Border subclass that paints a TextButton's background layer -
-// basically the button frame in the hot/pushed states.
-//
-////////////////////////////////////////////////////////////////////////////////
-class TextButtonBorder : public Border {
- public:
- TextButtonBorder();
- virtual ~TextButtonBorder();
-
- // Render the background for the provided view
- virtual void Paint(const View& view, ChromeCanvas* canvas) const;
-
- // Returns the insets for the border.
- virtual void GetInsets(gfx::Insets* insets) const;
-
- private:
- DISALLOW_EVIL_CONSTRUCTORS(TextButtonBorder);
-
- // Images
- struct MBBImageSet {
- SkBitmap* top_left;
- SkBitmap* top;
- SkBitmap* top_right;
- SkBitmap* left;
- SkBitmap* center;
- SkBitmap* right;
- SkBitmap* bottom_left;
- SkBitmap* bottom;
- SkBitmap* bottom_right;
- };
- MBBImageSet hot_set_;
- MBBImageSet pushed_set_;
-};
-
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// TextButton
-//
-// A button which displays text and/or and icon that can be changed in
-// response to actions. TextButton reserves space for the largest string
-// passed to SetText. To reset the cached max size invoke ClearMaxTextSize.
-//
-////////////////////////////////////////////////////////////////////////////////
-class TextButton : public CustomButton {
- public:
- TextButton(ButtonListener* listener, const std::wstring& text);
- virtual ~TextButton();
-
- // Call SetText once per string in your set of possible values at button
- // creation time, so that it can contain the largest of them and avoid
- // resizing the button when the text changes.
- virtual void SetText(const std::wstring& text);
- std::wstring text() const { return text_; }
-
- enum TextAlignment {
- ALIGN_LEFT,
- ALIGN_CENTER,
- ALIGN_RIGHT
- };
-
- void set_alignment(TextAlignment alignment) { alignment_ = alignment; }
-
- // Sets the icon.
- void SetIcon(const SkBitmap& icon);
- SkBitmap icon() const { return icon_; }
-
- // TextButton remembers the maximum display size of the text passed to
- // SetText. This method resets the cached maximum display size to the
- // current size.
- void ClearMaxTextSize();
-
- void set_max_width(int max_width) { max_width_ = max_width; }
-
- // Paint the button into the specified canvas. If |for_drag| is true, the
- // function paints a drag image representation into the canvas.
- virtual void Paint(ChromeCanvas* canvas, bool for_drag);
-
- // Overridden from View:
- virtual gfx::Size GetPreferredSize();
- virtual gfx::Size GetMinimumSize();
- virtual void SetEnabled(bool enabled);
-
- protected:
- virtual bool OnMousePressed(const MouseEvent& e);
- virtual void Paint(ChromeCanvas* canvas);
-
- private:
- // The text string that is displayed in the button.
- std::wstring text_;
-
- // The size of the text string.
- gfx::Size text_size_;
-
- // Track the size of the largest text string seen so far, so that
- // changing text_ will not resize the button boundary.
- gfx::Size max_text_size_;
-
- // The alignment of the text string within the button.
- TextAlignment alignment_;
-
- // The font used to paint the text.
- ChromeFont font_;
-
- // Text color.
- SkColor color_;
-
- // An icon displayed with the text.
- SkBitmap icon_;
-
- // The width of the button will never be larger than this value. A value <= 0
- // indicates the width is not constrained.
- int max_width_;
-
- DISALLOW_EVIL_CONSTRUCTORS(TextButton);
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_CONTROLS_BUTTON_TEXT_BUTTON_H_
diff --git a/chrome/views/controls/combo_box.cc b/chrome/views/controls/combo_box.cc
deleted file mode 100644
index ca73727..0000000
--- a/chrome/views/controls/combo_box.cc
+++ /dev/null
@@ -1,179 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/controls/combo_box.h"
-
-#include "app/gfx/chrome_canvas.h"
-#include "app/gfx/chrome_font.h"
-#include "app/l10n_util.h"
-#include "app/resource_bundle.h"
-#include "base/gfx/native_theme.h"
-#include "base/gfx/rect.h"
-
-// Limit how small a combobox can be.
-static const int kMinComboboxWidth = 148;
-
-// Add a couple extra pixels to the widths of comboboxes and combobox
-// dropdowns so that text isn't too crowded.
-static const int kComboboxExtraPaddingX = 6;
-
-namespace views {
-
-ComboBox::ComboBox(Model* model)
- : model_(model), selected_item_(0), listener_(NULL), content_width_(0) {
-}
-
-ComboBox::~ComboBox() {
-}
-
-void ComboBox::SetListener(Listener* listener) {
- listener_ = listener;
-}
-
-gfx::Size ComboBox::GetPreferredSize() {
- HWND hwnd = GetNativeControlHWND();
- if (!hwnd)
- return gfx::Size();
-
- COMBOBOXINFO cbi;
- memset(reinterpret_cast<unsigned char*>(&cbi), 0, sizeof(cbi));
- cbi.cbSize = sizeof(cbi);
- // Note: Don't use CB_GETCOMBOBOXINFO since that crashes on WOW64 systems
- // when you have a global message hook installed.
- GetComboBoxInfo(hwnd, &cbi);
- gfx::Rect rect_item(cbi.rcItem);
- gfx::Rect rect_button(cbi.rcButton);
- gfx::Size border = gfx::NativeTheme::instance()->GetThemeBorderSize(
- gfx::NativeTheme::MENULIST);
-
- // The padding value of '3' is the xy offset from the corner of the control
- // to the corner of rcItem. It does not seem to be queryable from the theme.
- // It is consistent on all versions of Windows from 2K to Vista, and is
- // invariant with respect to the combobox border size. We could conceivably
- // get this number from rect_item.x, but it seems fragile to depend on
- // position here, inside of the layout code.
- const int kItemOffset = 3;
- int item_to_button_distance = std::max(kItemOffset - border.width(), 0);
-
- // The cx computation can be read as measuring from left to right.
- int pref_width = std::max(kItemOffset + content_width_ +
- kComboboxExtraPaddingX +
- item_to_button_distance + rect_button.width() +
- border.width(), kMinComboboxWidth);
- // The two arguments to ::max below should be typically be equal.
- int pref_height = std::max(rect_item.height() + 2 * kItemOffset,
- rect_button.height() + 2 * border.height());
- return gfx::Size(pref_width, pref_height);
-}
-
-// VK_ESCAPE should be handled by this view when the drop down list is active.
-// In other words, the list should be closed instead of the dialog.
-bool ComboBox::OverrideAccelerator(const Accelerator& accelerator) {
- if (accelerator != Accelerator(VK_ESCAPE, false, false, false))
- return false;
-
- HWND hwnd = GetNativeControlHWND();
- if (!hwnd)
- return false;
-
- return ::SendMessage(hwnd, CB_GETDROPPEDSTATE, 0, 0) != 0;
-}
-
-HWND ComboBox::CreateNativeControl(HWND parent_container) {
- HWND r = ::CreateWindowEx(GetAdditionalExStyle(), L"COMBOBOX", L"",
- WS_CHILD | WS_VSCROLL | CBS_DROPDOWNLIST,
- 0, 0, width(), height(),
- parent_container, NULL, NULL, NULL);
- HFONT font = ResourceBundle::GetSharedInstance().
- GetFont(ResourceBundle::BaseFont).hfont();
- SendMessage(r, WM_SETFONT, reinterpret_cast<WPARAM>(font), FALSE);
- UpdateComboBoxFromModel(r);
- return r;
-}
-
-LRESULT ComboBox::OnCommand(UINT code, int id, HWND source) {
- HWND hwnd = GetNativeControlHWND();
- if (!hwnd)
- return 0;
-
- if (code == CBN_SELCHANGE && source == hwnd) {
- LRESULT r = ::SendMessage(hwnd, CB_GETCURSEL, 0, 0);
- if (r != CB_ERR) {
- int prev_selected_item = selected_item_;
- selected_item_ = static_cast<int>(r);
- if (listener_)
- listener_->ItemChanged(this, prev_selected_item, selected_item_);
- }
- }
- return 0;
-}
-
-LRESULT ComboBox::OnNotify(int w_param, LPNMHDR l_param) {
- return 0;
-}
-
-void ComboBox::UpdateComboBoxFromModel(HWND hwnd) {
- ::SendMessage(hwnd, CB_RESETCONTENT, 0, 0);
- ChromeFont font = ResourceBundle::GetSharedInstance().GetFont(
- ResourceBundle::BaseFont);
- int max_width = 0;
- int num_items = model_->GetItemCount(this);
- for (int i = 0; i < num_items; ++i) {
- const std::wstring& text = model_->GetItemAt(this, i);
-
- // Inserting the Unicode formatting characters if necessary so that the
- // text is displayed correctly in right-to-left UIs.
- std::wstring localized_text;
- const wchar_t* text_ptr = text.c_str();
- if (l10n_util::AdjustStringForLocaleDirection(text, &localized_text))
- text_ptr = localized_text.c_str();
-
- ::SendMessage(hwnd, CB_ADDSTRING, 0, reinterpret_cast<LPARAM>(text_ptr));
- max_width = std::max(max_width, font.GetStringWidth(text));
-
- }
- content_width_ = max_width;
-
- if (num_items > 0) {
- ::SendMessage(hwnd, CB_SETCURSEL, selected_item_, 0);
-
- // Set the width for the drop down while accounting for the scrollbar and
- // borders.
- if (num_items > ComboBox_GetMinVisible(hwnd))
- max_width += ::GetSystemMetrics(SM_CXVSCROLL);
- // SM_CXEDGE would not be correct here, since the dropdown is flat, not 3D.
- int kComboboxDropdownBorderSize = 1;
- max_width += 2 * kComboboxDropdownBorderSize + kComboboxExtraPaddingX;
- ::SendMessage(hwnd, CB_SETDROPPEDWIDTH, max_width, 0);
- }
-}
-
-void ComboBox::ModelChanged() {
- HWND hwnd = GetNativeControlHWND();
- if (!hwnd)
- return;
- selected_item_ = std::min(0, model_->GetItemCount(this));
- UpdateComboBoxFromModel(hwnd);
-}
-
-void ComboBox::SetSelectedItem(int index) {
- selected_item_ = index;
- HWND hwnd = GetNativeControlHWND();
- if (!hwnd)
- return;
-
- // Note that we use CB_SETCURSEL and not CB_SELECTSTRING because on RTL
- // locales the strings we get from our ComboBox::Model might be augmented
- // with Unicode directionality marks before we insert them into the combo box
- // and therefore we can not assume that the string we get from
- // ComboBox::Model can be safely searched for and selected (which is what
- // CB_SELECTSTRING does).
- ::SendMessage(hwnd, CB_SETCURSEL, selected_item_, 0);
-}
-
-int ComboBox::GetSelectedItem() {
- return selected_item_;
-}
-
-} // namespace views
diff --git a/chrome/views/controls/combo_box.h b/chrome/views/controls/combo_box.h
deleted file mode 100644
index 826caec..0000000
--- a/chrome/views/controls/combo_box.h
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_CONTROLS_COMBO_BOX_H_
-#define CHROME_VIEWS_CONTROLS_COMBO_BOX_H_
-
-#include "chrome/views/controls/native_control.h"
-
-namespace views {
-////////////////////////////////////////////////////////////////////////////////
-//
-// ComboBox is a basic non editable combo box. It is initialized from a simple
-// model.
-//
-////////////////////////////////////////////////////////////////////////////////
-class ComboBox : public NativeControl {
- public:
- class Model {
- public:
- // Return the number of items in the combo box.
- virtual int GetItemCount(ComboBox* source) = 0;
-
- // Return the string that should be used to represent a given item.
- virtual std::wstring GetItemAt(ComboBox* source, int index) = 0;
- };
-
- class Listener {
- public:
- // This is invoked once the selected item changed.
- virtual void ItemChanged(ComboBox* combo_box,
- int prev_index,
- int new_index) = 0;
- };
-
- // |model is not owned by the combo box.
- explicit ComboBox(Model* model);
- virtual ~ComboBox();
-
- // Register |listener| for item change events.
- void SetListener(Listener* listener);
-
- // Overridden from View.
- virtual gfx::Size GetPreferredSize();
- virtual bool OverrideAccelerator(const Accelerator& accelerator);
-
- // Overridden from NativeControl
- virtual HWND CreateNativeControl(HWND parent_container);
- virtual LRESULT OnCommand(UINT code, int id, HWND source);
- virtual LRESULT OnNotify(int w_param, LPNMHDR l_param);
-
- // Inform the combo box that its model changed.
- void ModelChanged();
-
- // Set / Get the selected item.
- void SetSelectedItem(int index);
- int GetSelectedItem();
-
- private:
- // Update a combo box from our model.
- void UpdateComboBoxFromModel(HWND hwnd);
-
- // Our model.
- Model* model_;
-
- // The current selection.
- int selected_item_;
-
- // Item change listener.
- Listener* listener_;
-
- // The min width, in pixels, for the text content.
- int content_width_;
-
- DISALLOW_EVIL_CONSTRUCTORS(ComboBox);
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_CONTROLS_COMBO_BOX_H_
diff --git a/chrome/views/controls/hwnd_view.cc b/chrome/views/controls/hwnd_view.cc
deleted file mode 100644
index 6faa85d..0000000
--- a/chrome/views/controls/hwnd_view.cc
+++ /dev/null
@@ -1,137 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/controls/hwnd_view.h"
-
-#include "app/gfx/chrome_canvas.h"
-#include "chrome/views/focus/focus_manager.h"
-#include "chrome/views/widget/widget.h"
-#include "base/logging.h"
-
-namespace views {
-
-static const char kViewClassName[] = "chrome/views/HWNDView";
-
-HWNDView::HWNDView() {
-}
-
-HWNDView::~HWNDView() {
-}
-
-void HWNDView::Attach(HWND hwnd) {
- DCHECK(native_view() == NULL);
- DCHECK(hwnd) << "Impossible detatched tab case; See crbug.com/6316";
-
- set_native_view(hwnd);
-
- // First hide the new window. We don't want anything to draw (like sub-hwnd
- // borders), when we change the parent below.
- ShowWindow(hwnd, SW_HIDE);
-
- // Need to set the HWND's parent before changing its size to avoid flashing.
- ::SetParent(hwnd, GetWidget()->GetNativeView());
- Layout();
-
- // Register with the focus manager so the associated view is focused when the
- // native control gets the focus.
- FocusManager::InstallFocusSubclass(
- hwnd, associated_focus_view() ? associated_focus_view() : this);
-}
-
-void HWNDView::Detach() {
- DCHECK(native_view());
- FocusManager::UninstallFocusSubclass(native_view());
- set_native_view(NULL);
- set_installed_clip(false);
-}
-
-void HWNDView::Paint(ChromeCanvas* canvas) {
- // The area behind our window is black, so during a fast resize (where our
- // content doesn't draw over the full size of our HWND, and the HWND
- // background color doesn't show up), we need to cover that blackness with
- // something so that fast resizes don't result in black flash.
- //
- // It would be nice if this used some approximation of the page's
- // current background color.
- if (installed_clip())
- canvas->FillRectInt(SkColorSetRGB(255, 255, 255), 0, 0, width(), height());
-}
-
-std::string HWNDView::GetClassName() const {
- return kViewClassName;
-}
-
-void HWNDView::ViewHierarchyChanged(bool is_add, View *parent, View *child) {
- if (!native_view())
- return;
-
- Widget* widget = GetWidget();
- if (is_add && widget) {
- HWND parent_hwnd = ::GetParent(native_view());
- HWND widget_hwnd = widget->GetNativeView();
- if (parent_hwnd != widget_hwnd)
- ::SetParent(native_view(), widget_hwnd);
- if (IsVisibleInRootView())
- ::ShowWindow(native_view(), SW_SHOW);
- else
- ::ShowWindow(native_view(), SW_HIDE);
- Layout();
- } else if (!is_add) {
- ::ShowWindow(native_view(), SW_HIDE);
- ::SetParent(native_view(), NULL);
- }
-}
-
-void HWNDView::Focus() {
- ::SetFocus(native_view());
-}
-
-void HWNDView::InstallClip(int x, int y, int w, int h) {
- HRGN clip_region = CreateRectRgn(x, y, x + w, y + h);
- // NOTE: SetWindowRgn owns the region (as well as the deleting the
- // current region), as such we don't delete the old region.
- SetWindowRgn(native_view(), clip_region, FALSE);
-}
-
-void HWNDView::UninstallClip() {
- SetWindowRgn(native_view(), 0, FALSE);
-}
-
-void HWNDView::ShowWidget(int x, int y, int w, int h) {
- UINT swp_flags = SWP_DEFERERASE |
- SWP_NOACTIVATE |
- SWP_NOCOPYBITS |
- SWP_NOOWNERZORDER |
- SWP_NOZORDER;
- // Only send the SHOWWINDOW flag if we're invisible, to avoid flashing.
- if (!::IsWindowVisible(native_view()))
- swp_flags = (swp_flags | SWP_SHOWWINDOW) & ~SWP_NOREDRAW;
-
- if (fast_resize()) {
- // In a fast resize, we move the window and clip it with SetWindowRgn.
- CRect rect;
- GetWindowRect(native_view(), &rect);
- ::SetWindowPos(native_view(), 0, x, y, rect.Width(), rect.Height(),
- swp_flags);
-
- HRGN clip_region = CreateRectRgn(0, 0, w, h);
- SetWindowRgn(native_view(), clip_region, FALSE);
- set_installed_clip(true);
- } else {
- ::SetWindowPos(native_view(), 0, x, y, w, h, swp_flags);
- }
-}
-
-void HWNDView::HideWidget() {
- if (!::IsWindowVisible(native_view()))
- return; // Currently not visible, nothing to do.
-
- // The window is currently visible, but its clipped by another view. Hide
- // it.
- ::SetWindowPos(native_view(), 0, 0, 0, 0, 0,
- SWP_HIDEWINDOW | SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER |
- SWP_NOREDRAW | SWP_NOOWNERZORDER);
-}
-
-} // namespace views
diff --git a/chrome/views/controls/hwnd_view.h b/chrome/views/controls/hwnd_view.h
deleted file mode 100644
index fc08b5d5..0000000
--- a/chrome/views/controls/hwnd_view.h
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_CONTROLS_HWND_VIEW_H_
-#define CHROME_VIEWS_CONTROLS_HWND_VIEW_H_
-
-#include <string>
-
-#include "chrome/views/controls/native_view_host.h"
-
-namespace views {
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// HWNDView class
-//
-// The HWNDView class hosts a native window handle (HWND) sizing it
-// according to the bounds of the view. This is useful whenever you need to
-// show a UI control that has a HWND (e.g. a native windows Edit control)
-// within thew View hierarchy and benefit from the sizing/layout.
-//
-/////////////////////////////////////////////////////////////////////////////
-// TODO: Rename this to NativeViewHostWin.
-class HWNDView : public NativeViewHost {
- public:
- HWNDView();
- virtual ~HWNDView();
-
- // Attach a window handle to this View, making the window it represents
- // subject to sizing according to this View's parent container's Layout
- // Manager's sizing heuristics.
- //
- // This object should be added to the view hierarchy before calling this
- // function, which will expect the parent to be valid.
- void Attach(HWND hwnd);
-
- // Detach the attached window handle. It will no longer be updated
- void Detach();
-
- // TODO(sky): convert this to native_view().
- HWND GetHWND() const { return native_view(); }
-
- virtual void Paint(ChromeCanvas* canvas);
-
- // Overridden from View.
- virtual std::string GetClassName() const;
-
- protected:
- virtual void ViewHierarchyChanged(bool is_add, View *parent, View *child);
-
- virtual void Focus();
-
- // NativeHostView overrides.
- virtual void InstallClip(int x, int y, int w, int h);
- virtual void UninstallClip();
- virtual void ShowWidget(int x, int y, int w, int h);
- virtual void HideWidget();
-
- private:
- DISALLOW_COPY_AND_ASSIGN(HWNDView);
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_CONTROLS_HWND_VIEW_H_
diff --git a/chrome/views/controls/image_view.cc b/chrome/views/controls/image_view.cc
deleted file mode 100644
index f377adc..0000000
--- a/chrome/views/controls/image_view.cc
+++ /dev/null
@@ -1,170 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/controls/image_view.h"
-
-#include "app/gfx/chrome_canvas.h"
-#include "base/logging.h"
-
-namespace views {
-
-ImageView::ImageView()
- : image_size_set_(false),
- horiz_alignment_(CENTER),
- vert_alignment_(CENTER) {
-}
-
-ImageView::~ImageView() {
-}
-
-void ImageView::SetImage(const SkBitmap& bm) {
- image_ = bm;
- SchedulePaint();
-}
-
-void ImageView::SetImage(SkBitmap* bm) {
- if (bm) {
- SetImage(*bm);
- } else {
- SkBitmap t;
- SetImage(t);
- }
-}
-
-const SkBitmap& ImageView::GetImage() {
- return image_;
-}
-
-void ImageView::SetImageSize(const gfx::Size& image_size) {
- image_size_set_ = true;
- image_size_ = image_size;
-}
-
-bool ImageView::GetImageSize(gfx::Size* image_size) {
- DCHECK(image_size);
- if (image_size_set_)
- *image_size = image_size_;
- return image_size_set_;
-}
-
-void ImageView::ResetImageSize() {
- image_size_set_ = false;
-}
-
-gfx::Size ImageView::GetPreferredSize() {
- if (image_size_set_) {
- gfx::Size image_size;
- GetImageSize(&image_size);
- return image_size;
- }
- return gfx::Size(image_.width(), image_.height());
-}
-
-void ImageView::ComputeImageOrigin(int image_width, int image_height,
- int *x, int *y) {
- // In order to properly handle alignment of images in RTL locales, we need
- // to flip the meaning of trailing and leading. For example, if the
- // horizontal alignment is set to trailing, then we'll use left alignment for
- // the image instead of right alignment if the UI layout is RTL.
- Alignment actual_horiz_alignment = horiz_alignment_;
- if (UILayoutIsRightToLeft()) {
- if (horiz_alignment_ == TRAILING)
- actual_horiz_alignment = LEADING;
- if (horiz_alignment_ == LEADING)
- actual_horiz_alignment = TRAILING;
- }
-
- switch(actual_horiz_alignment) {
- case LEADING:
- *x = 0;
- break;
- case TRAILING:
- *x = width() - image_width;
- break;
- case CENTER:
- *x = (width() - image_width) / 2;
- break;
- default:
- NOTREACHED();
- }
-
- switch (vert_alignment_) {
- case LEADING:
- *y = 0;
- break;
- case TRAILING:
- *y = height() - image_height;
- break;
- case CENTER:
- *y = (height() - image_height) / 2;
- break;
- default:
- NOTREACHED();
- }
-}
-
-void ImageView::Paint(ChromeCanvas* canvas) {
- View::Paint(canvas);
- int image_width = image_.width();
- int image_height = image_.height();
-
- if (image_width == 0 || image_height == 0)
- return;
-
- int x, y;
- if (image_size_set_ &&
- (image_size_.width() != image_width ||
- image_size_.width() != image_height)) {
- // Resize case
- image_.buildMipMap(false);
- ComputeImageOrigin(image_size_.width(), image_size_.height(), &x, &y);
- canvas->DrawBitmapInt(image_, 0, 0, image_width, image_height,
- x, y, image_size_.width(), image_size_.height(),
- true);
- } else {
- ComputeImageOrigin(image_width, image_height, &x, &y);
- canvas->DrawBitmapInt(image_, x, y);
- }
-}
-
-void ImageView::SetHorizontalAlignment(Alignment ha) {
- if (ha != horiz_alignment_) {
- horiz_alignment_ = ha;
- SchedulePaint();
- }
-}
-
-ImageView::Alignment ImageView::GetHorizontalAlignment() {
- return horiz_alignment_;
-}
-
-void ImageView::SetVerticalAlignment(Alignment va) {
- if (va != vert_alignment_) {
- vert_alignment_ = va;
- SchedulePaint();
- }
-}
-
-ImageView::Alignment ImageView::GetVerticalAlignment() {
- return vert_alignment_;
-}
-
-void ImageView::SetTooltipText(const std::wstring& tooltip) {
- tooltip_text_ = tooltip;
-}
-
-std::wstring ImageView::GetTooltipText() {
- return tooltip_text_;
-}
-
-bool ImageView::GetTooltipText(int x, int y, std::wstring* tooltip) {
- if (tooltip_text_.empty()) {
- return false;
- } else {
- * tooltip = GetTooltipText();
- return true;
- }
-}
-
-} // namespace views
diff --git a/chrome/views/controls/image_view.h b/chrome/views/controls/image_view.h
deleted file mode 100644
index 66020bf..0000000
--- a/chrome/views/controls/image_view.h
+++ /dev/null
@@ -1,107 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_CONTROLS_IMAGE_VIEW_H_
-#define CHROME_VIEWS_CONTROLS_IMAGE_VIEW_H_
-
-#include "chrome/views/view.h"
-#include "SkBitmap.h"
-
-class ChromeCanvas;
-
-namespace views {
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// ImageView class.
-//
-// An ImageView can display an image from an SkBitmap. If a size is provided,
-// the ImageView will resize the provided image to fit if it is too big or will
-// center the image if smaller. Otherwise, the preferred size matches the
-// provided image size.
-//
-/////////////////////////////////////////////////////////////////////////////
-class ImageView : public View {
- public:
- enum Alignment {
- LEADING = 0,
- CENTER,
- TRAILING
- };
-
- ImageView();
- virtual ~ImageView();
-
- // Set the bitmap that should be displayed.
- void SetImage(const SkBitmap& bm);
-
- // Set the bitmap that should be displayed from a pointer. Reset the image
- // if the pointer is NULL. The pointer contents is copied in the receiver's
- // bitmap.
- void SetImage(SkBitmap* bm);
-
- // Returns the bitmap currently displayed or NULL of none is currently set.
- // The returned bitmap is still owned by the ImageView.
- const SkBitmap& GetImage();
-
- // Set the desired image size for the receiving ImageView.
- void SetImageSize(const gfx::Size& image_size);
-
- // Return the preferred size for the receiving view. Returns false if the
- // preferred size is not defined, which means that the view uses the image
- // size.
- bool GetImageSize(gfx::Size* image_size);
-
- // Reset the image size to the current image dimensions.
- void ResetImageSize();
-
- // Set / Get the horizontal alignment.
- void SetHorizontalAlignment(Alignment ha);
- Alignment GetHorizontalAlignment();
-
- // Set / Get the vertical alignment.
- void SetVerticalAlignment(Alignment va);
- Alignment GetVerticalAlignment();
-
- // Set / Get the tooltip text.
- void SetTooltipText(const std::wstring& tooltip);
- std::wstring GetTooltipText();
-
- // Return whether the image should be centered inside the view.
- // Overriden from View
- virtual gfx::Size GetPreferredSize();
- virtual void Paint(ChromeCanvas* canvas);
-
- // Overriden from View.
- virtual bool GetTooltipText(int x, int y, std::wstring* tooltip);
-
- private:
- // Compute the image origin given the desired size and the receiver alignment
- // properties.
- void ComputeImageOrigin(int image_width, int image_height, int *x, int *y);
-
- // Whether the image size is set.
- bool image_size_set_;
-
- // The actual image size.
- gfx::Size image_size_;
-
- // The underlying bitmap.
- SkBitmap image_;
-
- // Horizontal alignment.
- Alignment horiz_alignment_;
-
- // Vertical alignment.
- Alignment vert_alignment_;
-
- // The current tooltip text.
- std::wstring tooltip_text_;
-
- DISALLOW_EVIL_CONSTRUCTORS(ImageView);
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_CONTROLS_IMAGE_VIEW_H_
diff --git a/chrome/views/controls/label.cc b/chrome/views/controls/label.cc
deleted file mode 100644
index b135538..0000000
--- a/chrome/views/controls/label.cc
+++ /dev/null
@@ -1,444 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/controls/label.h"
-
-#include <math.h>
-
-#include "app/gfx/chrome_canvas.h"
-#include "app/gfx/chrome_font.h"
-#include "app/gfx/insets.h"
-#include "app/l10n_util.h"
-#include "app/resource_bundle.h"
-#include "base/logging.h"
-#include "base/string_util.h"
-#include "chrome/common/gfx/text_elider.h"
-#include "chrome/views/background.h"
-
-namespace views {
-
-const char Label::kViewClassName[] = "chrome/views/Label";
-
-static const SkColor kEnabledColor = SK_ColorBLACK;
-static const SkColor kDisabledColor = SkColorSetRGB(161, 161, 146);
-static const int kFocusBorderPadding = 1;
-
-Label::Label() {
- Init(L"", GetDefaultFont());
-}
-
-Label::Label(const std::wstring& text) {
- Init(text, GetDefaultFont());
-}
-
-Label::Label(const std::wstring& text, const ChromeFont& font) {
- Init(text, font);
-}
-
-void Label::Init(const std::wstring& text, const ChromeFont& font) {
- contains_mouse_ = false;
- font_ = font;
- text_size_valid_ = false;
- SetText(text);
- url_set_ = false;
- color_ = kEnabledColor;
- horiz_alignment_ = ALIGN_CENTER;
- is_multi_line_ = false;
- allow_character_break_ = false;
- collapse_when_hidden_ = false;
- rtl_alignment_mode_ = USE_UI_ALIGNMENT;
- paint_as_focused_ = false;
- has_focus_border_ = false;
-}
-
-Label::~Label() {
-}
-
-gfx::Size Label::GetPreferredSize() {
- gfx::Size prefsize;
-
- // Return a size of (0, 0) if the label is not visible and if the
- // collapse_when_hidden_ flag is set.
- // TODO(munjal): This logic probably belongs to the View class. But for now,
- // put it here since putting it in View class means all inheriting classes
- // need ot respect the collapse_when_hidden_ flag.
- if (!IsVisible() && collapse_when_hidden_)
- return prefsize;
-
- if (is_multi_line_) {
- int w = width(), h = 0;
- ChromeCanvas::SizeStringInt(text_, font_, &w, &h, ComputeMultiLineFlags());
- prefsize.SetSize(w, h);
- } else {
- prefsize = GetTextSize();
- }
-
- gfx::Insets insets = GetInsets();
- prefsize.Enlarge(insets.width(), insets.height());
- return prefsize;
-}
-
-int Label::ComputeMultiLineFlags() {
- int flags = ChromeCanvas::MULTI_LINE;
- if (allow_character_break_)
- flags |= ChromeCanvas::CHARACTER_BREAK;
- switch (horiz_alignment_) {
- case ALIGN_LEFT:
- flags |= ChromeCanvas::TEXT_ALIGN_LEFT;
- break;
- case ALIGN_CENTER:
- flags |= ChromeCanvas::TEXT_ALIGN_CENTER;
- break;
- case ALIGN_RIGHT:
- flags |= ChromeCanvas::TEXT_ALIGN_RIGHT;
- break;
- }
- return flags;
-}
-
-void Label::CalculateDrawStringParams(
- std::wstring* paint_text, gfx::Rect* text_bounds, int* flags) {
- DCHECK(paint_text && text_bounds && flags);
-
- if (url_set_) {
- // TODO(jungshik) : Figure out how to get 'intl.accept_languages'
- // preference and use it when calling ElideUrl.
- *paint_text = gfx::ElideUrl(url_, font_, width(), std::wstring());
-
- // An URLs is always treated as an LTR text and therefore we should
- // explicitly mark it as such if the locale is RTL so that URLs containing
- // Hebrew or Arabic characters are displayed correctly.
- //
- // Note that we don't check the View's UI layout setting in order to
- // determine whether or not to insert the special Unicode formatting
- // characters. We use the locale settings because an URL is always treated
- // as an LTR string, even if its containing view does not use an RTL UI
- // layout.
- if (l10n_util::GetTextDirection() == l10n_util::RIGHT_TO_LEFT)
- l10n_util::WrapStringWithLTRFormatting(paint_text);
- } else {
- *paint_text = text_;
- }
-
- if (is_multi_line_) {
- gfx::Insets insets = GetInsets();
- text_bounds->SetRect(insets.left(),
- insets.top(),
- width() - insets.width(),
- height() - insets.height());
- *flags = ComputeMultiLineFlags();
- } else {
- *text_bounds = GetTextBounds();
- *flags = 0;
- }
-}
-
-void Label::Paint(ChromeCanvas* canvas) {
- PaintBackground(canvas);
- std::wstring paint_text;
- gfx::Rect text_bounds;
- int flags = 0;
- CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
- canvas->DrawStringInt(paint_text,
- font_,
- color_,
- text_bounds.x(),
- text_bounds.y(),
- text_bounds.width(),
- text_bounds.height(),
- flags);
-
- // The focus border always hugs the text, regardless of the label's bounds.
- if (HasFocus() || paint_as_focused_) {
- int w = text_bounds.width();
- int h = 0;
- // We explicitly OR in MULTI_LINE here since SizeStringInt seems to return
- // an incorrect height for single line text when the MULTI_LINE flag isn't
- // specified. o_O...
- ChromeCanvas::SizeStringInt(paint_text, font_, &w, &h,
- flags | ChromeCanvas::MULTI_LINE);
- gfx::Rect focus_rect = text_bounds;
- focus_rect.set_width(w);
- focus_rect.set_height(h);
- focus_rect.Inset(-kFocusBorderPadding, -kFocusBorderPadding);
- canvas->DrawFocusRect(MirroredLeftPointForRect(focus_rect), focus_rect.y(),
- focus_rect.width(), focus_rect.height());
- }
-}
-
-void Label::PaintBackground(ChromeCanvas* canvas) {
- const Background* bg = contains_mouse_ ? GetMouseOverBackground() : NULL;
- if (!bg)
- bg = background();
- if (bg)
- bg->Paint(canvas, this);
-}
-
-void Label::SetFont(const ChromeFont& font) {
- font_ = font;
- text_size_valid_ = false;
- SchedulePaint();
-}
-
-ChromeFont Label::GetFont() const {
- return font_;
-}
-
-void Label::SetText(const std::wstring& text) {
- text_ = text;
- url_set_ = false;
- text_size_valid_ = false;
- SchedulePaint();
-}
-
-void Label::SetURL(const GURL& url) {
- url_ = url;
- text_ = UTF8ToWide(url_.spec());
- url_set_ = true;
- text_size_valid_ = false;
- SchedulePaint();
-}
-
-const std::wstring Label::GetText() const {
- if (url_set_)
- return UTF8ToWide(url_.spec());
- else
- return text_;
-}
-
-const GURL Label::GetURL() const {
- if (url_set_)
- return url_;
- else
- return GURL(WideToUTF8(text_));
-}
-
-gfx::Size Label::GetTextSize() {
- if (!text_size_valid_) {
- text_size_.SetSize(font_.GetStringWidth(text_), font_.height());
- text_size_valid_ = true;
- }
-
- if (text_size_valid_)
- return text_size_;
- return gfx::Size();
-}
-
-int Label::GetHeightForWidth(int w) {
- if (is_multi_line_) {
- gfx::Insets insets = GetInsets();
- w = std::max<int>(0, w - insets.width());
- int h = 0;
- ChromeCanvas cc(0, 0, true);
- cc.SizeStringInt(text_, font_, &w, &h, ComputeMultiLineFlags());
- return h + insets.height();
- }
-
- return View::GetHeightForWidth(w);
-}
-
-std::string Label::GetClassName() const {
- return kViewClassName;
-}
-
-void Label::SetColor(const SkColor& color) {
- color_ = color;
-}
-
-const SkColor Label::GetColor() const {
- return color_;
-}
-
-void Label::SetHorizontalAlignment(Alignment a) {
- // If the View's UI layout is right-to-left and rtl_alignment_mode_ is
- // USE_UI_ALIGNMENT, we need to flip the alignment so that the alignment
- // settings take into account the text directionality.
- if (UILayoutIsRightToLeft() && rtl_alignment_mode_ == USE_UI_ALIGNMENT) {
- if (a == ALIGN_LEFT)
- a = ALIGN_RIGHT;
- else if (a == ALIGN_RIGHT)
- a = ALIGN_LEFT;
- }
- if (horiz_alignment_ != a) {
- horiz_alignment_ = a;
- SchedulePaint();
- }
-}
-
-Label::Alignment Label::GetHorizontalAlignment() const {
- return horiz_alignment_;
-}
-
-void Label::SetRTLAlignmentMode(RTLAlignmentMode mode) {
- rtl_alignment_mode_ = mode;
-}
-
-Label::RTLAlignmentMode Label::GetRTLAlignmentMode() const {
- return rtl_alignment_mode_;
-}
-
-void Label::SetMultiLine(bool f) {
- if (f != is_multi_line_) {
- is_multi_line_ = f;
- SchedulePaint();
- }
-}
-
-void Label::SetAllowCharacterBreak(bool f) {
- if (f != allow_character_break_) {
- allow_character_break_ = f;
- SchedulePaint();
- }
-}
-
-bool Label::IsMultiLine() {
- return is_multi_line_;
-}
-
-void Label::SetTooltipText(const std::wstring& tooltip_text) {
- tooltip_text_ = tooltip_text;
-}
-
-bool Label::GetTooltipText(int x, int y, std::wstring* tooltip) {
- DCHECK(tooltip);
-
- // If a tooltip has been explicitly set, use it.
- if (!tooltip_text_.empty()) {
- tooltip->assign(tooltip_text_);
- return true;
- }
-
- // Show the full text if the text does not fit.
- if (!is_multi_line_ && font_.GetStringWidth(text_) > width()) {
- *tooltip = text_;
- return true;
- }
- return false;
-}
-
-void Label::OnMouseMoved(const MouseEvent& e) {
- UpdateContainsMouse(e);
-}
-
-void Label::OnMouseEntered(const MouseEvent& event) {
- UpdateContainsMouse(event);
-}
-
-void Label::OnMouseExited(const MouseEvent& event) {
- SetContainsMouse(false);
-}
-
-void Label::SetMouseOverBackground(Background* background) {
- mouse_over_background_.reset(background);
-}
-
-const Background* Label::GetMouseOverBackground() const {
- return mouse_over_background_.get();
-}
-
-void Label::SetEnabled(bool enabled) {
- if (enabled == enabled_)
- return;
- View::SetEnabled(enabled);
- SetColor(enabled ? kEnabledColor : kDisabledColor);
-}
-
-gfx::Insets Label::GetInsets() const {
- gfx::Insets insets = View::GetInsets();
- if (IsFocusable() || has_focus_border_) {
- insets += gfx::Insets(kFocusBorderPadding, kFocusBorderPadding,
- kFocusBorderPadding, kFocusBorderPadding);
- }
- return insets;
-}
-
-// static
-ChromeFont Label::GetDefaultFont() {
- return ResourceBundle::GetSharedInstance().GetFont(ResourceBundle::BaseFont);
-}
-
-void Label::UpdateContainsMouse(const MouseEvent& event) {
- SetContainsMouse(GetTextBounds().Contains(event.x(), event.y()));
-}
-
-void Label::SetContainsMouse(bool contains_mouse) {
- if (contains_mouse_ == contains_mouse)
- return;
- contains_mouse_ = contains_mouse;
- if (GetMouseOverBackground())
- SchedulePaint();
-}
-
-gfx::Rect Label::GetTextBounds() {
- gfx::Size text_size = GetTextSize();
- gfx::Insets insets = GetInsets();
- int avail_width = width() - insets.width();
- // Respect the size set by the owner view
- text_size.set_width(std::min(avail_width, text_size.width()));
-
- int text_y = insets.top() +
- (height() - text_size.height() - insets.height()) / 2;
- int text_x;
- switch (horiz_alignment_) {
- case ALIGN_LEFT:
- text_x = insets.left();
- break;
- case ALIGN_CENTER:
- // We put any extra margin pixel on the left rather than the right, since
- // GetTextExtentPoint32() can report a value one too large on the right.
- text_x = insets.left() + (avail_width + 1 - text_size.width()) / 2;
- break;
- case ALIGN_RIGHT:
- text_x = width() - insets.right() - text_size.width();
- break;
- default:
- NOTREACHED();
- text_x = 0;
- break;
- }
- return gfx::Rect(text_x, text_y, text_size.width(), text_size.height());
-}
-
-void Label::SizeToFit(int max_width) {
- DCHECK(is_multi_line_);
-
- std::vector<std::wstring> lines;
- SplitString(text_, L'\n', &lines);
-
- int label_width = 0;
- for (std::vector<std::wstring>::const_iterator iter = lines.begin();
- iter != lines.end(); ++iter) {
- label_width = std::max(label_width, font_.GetStringWidth(*iter));
- }
-
- gfx::Insets insets = GetInsets();
- label_width += insets.width();
-
- if (max_width > 0)
- label_width = std::min(label_width, max_width);
-
- SetBounds(x(), y(), label_width, 0);
- SizeToPreferredSize();
-}
-
-bool Label::GetAccessibleRole(AccessibilityTypes::Role* role) {
- DCHECK(role);
-
- *role = AccessibilityTypes::ROLE_TEXT;
- return true;
-}
-
-bool Label::GetAccessibleName(std::wstring* name) {
- *name = GetText();
- return true;
-}
-
-bool Label::GetAccessibleState(AccessibilityTypes::State* state) {
- DCHECK(state);
-
- *state = AccessibilityTypes::STATE_READONLY;
- return true;
-}
-
-} // namespace views
diff --git a/chrome/views/controls/label.h b/chrome/views/controls/label.h
deleted file mode 100644
index cf4dede..0000000
--- a/chrome/views/controls/label.h
+++ /dev/null
@@ -1,250 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_CONTROLS_LABEL_H_
-#define CHROME_VIEWS_CONTROLS_LABEL_H_
-
-#include "app/gfx/chrome_font.h"
-#include "chrome/views/view.h"
-#include "googleurl/src/gurl.h"
-#include "skia/include/SkColor.h"
-#include "testing/gtest/include/gtest/gtest_prod.h"
-
-namespace views {
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Label class
-//
-// A label is a view subclass that can display a string.
-//
-/////////////////////////////////////////////////////////////////////////////
-class Label : public View {
- public:
- enum Alignment { ALIGN_LEFT = 0,
- ALIGN_CENTER,
- ALIGN_RIGHT };
-
- // The following enum is used to indicate whether using the Chrome UI's
- // alignment as the label's alignment, or autodetecting the label's
- // alignment.
- //
- // If the label text originates from the Chrome UI, we should use the Chrome
- // UI's alignment as the label's alignment.
- //
- // If the text originates from a web page, the text's alignment is determined
- // based on the first character with strong directionality, disregarding what
- // directionality the Chrome UI is. And its alignment will not be flipped
- // around in RTL locales.
- enum RTLAlignmentMode {
- USE_UI_ALIGNMENT = 0,
- AUTO_DETECT_ALIGNMENT
- };
-
- // The view class name.
- static const char kViewClassName[];
-
- // Create a new label with a default font and empty value
- Label();
-
- // Create a new label with a default font
- explicit Label(const std::wstring& text);
-
- Label(const std::wstring& text, const ChromeFont& font);
-
- virtual ~Label();
-
- // Overridden to compute the size required to display this label
- virtual gfx::Size GetPreferredSize();
-
- // Return the height necessary to display this label with the provided width.
- // This method is used to layout multi-line labels. It is equivalent to
- // GetPreferredSize().height() if the receiver is not multi-line
- virtual int GetHeightForWidth(int w);
-
- // Returns chrome/views/Label.
- virtual std::string GetClassName() const;
-
- // Overridden to paint
- virtual void Paint(ChromeCanvas* canvas);
-
- // If the mouse is over the label, and a mouse over background has been
- // specified, its used. Otherwise super's implementation is invoked
- virtual void PaintBackground(ChromeCanvas* canvas);
-
- // Set the font.
- void SetFont(const ChromeFont& font);
-
- // Return the font used by this label
- ChromeFont GetFont() const;
-
- // Set the label text.
- void SetText(const std::wstring& text);
-
- // Return the label text.
- const std::wstring GetText() const;
-
- // Set URL Value - text_ is set to spec().
- void SetURL(const GURL& url);
-
- // Return the label URL.
- const GURL GetURL() const;
-
- // Set the color
- virtual void SetColor(const SkColor& color);
-
- // Return a reference to the currently used color
- virtual const SkColor GetColor() const;
-
- // Set horizontal alignment. If the locale is RTL, and the RTL alignment
- // setting is set as USE_UI_ALIGNMENT, the alignment is flipped around.
- //
- // Caveat: for labels originating from a web page, the RTL alignment mode
- // should be reset to AUTO_DETECT_ALIGNMENT before the horizontal alignment
- // is set. Otherwise, the label's alignment specified as a parameter will be
- // flipped in RTL locales. Please see the comments in SetRTLAlignmentMode for
- // more information.
- void SetHorizontalAlignment(Alignment a);
-
- Alignment GetHorizontalAlignment() const;
-
- // Set the RTL alignment mode. The RTL alignment mode is initialized to
- // USE_UI_ALIGNMENT when the label is constructed. USE_UI_ALIGNMENT applies
- // to every label that originates from the Chrome UI. However, if the label
- // originates from a web page, its alignment should not be flipped around for
- // RTL locales. For such labels, we need to set the RTL alignment mode to
- // AUTO_DETECT_ALIGNMENT so that subsequent SetHorizontalAlignment() calls
- // will not flip the label's alignment around.
- void SetRTLAlignmentMode(RTLAlignmentMode mode);
-
- RTLAlignmentMode GetRTLAlignmentMode() const;
-
- // Set whether the label text can wrap on multiple lines.
- // Default is false.
- void SetMultiLine(bool f);
-
- // Set whether the label text can be split on words.
- // Default is false. This only works when is_multi_line is true.
- void SetAllowCharacterBreak(bool f);
-
- // Return whether the label text can wrap on multiple lines
- bool IsMultiLine();
-
- // Sets the tooltip text. Default behavior for a label (single-line) is to
- // show the full text if it is wider than its bounds. Calling this overrides
- // the default behavior and lets you set a custom tooltip. To revert to
- // default behavior, call this with an empty string.
- void SetTooltipText(const std::wstring& tooltip_text);
-
- // Gets the tooltip text for labels that are wider than their bounds, except
- // when the label is multiline, in which case it just returns false (no
- // tooltip). If a custom tooltip has been specified with SetTooltipText()
- // it is returned instead.
- virtual bool GetTooltipText(int x, int y, std::wstring* tooltip);
-
- // Mouse enter/exit are overridden to render mouse over background color.
- // These invoke SetContainsMouse as necessary.
- virtual void OnMouseMoved(const MouseEvent& e);
- virtual void OnMouseEntered(const MouseEvent& event);
- virtual void OnMouseExited(const MouseEvent& event);
-
- // The background color to use when the mouse is over the label. Label
- // takes ownership of the Background.
- void SetMouseOverBackground(Background* background);
- const Background* GetMouseOverBackground() const;
-
- // Sets the enabled state. Setting the enabled state resets the color.
- virtual void SetEnabled(bool enabled);
-
- // Overridden from View:
- virtual gfx::Insets GetInsets() const;
-
- // Resizes the label so its width is set to the width of the longest line and
- // its height deduced accordingly.
- // This is only intended for multi-line labels and is useful when the label's
- // text contains several lines separated with \n.
- // |max_width| is the maximum width that will be used (longer lines will be
- // wrapped). If 0, no maximum width is enforced.
- void SizeToFit(int max_width);
-
- // Accessibility accessors, overridden from View.
- virtual bool GetAccessibleRole(AccessibilityTypes::Role* role);
- virtual bool GetAccessibleName(std::wstring* name);
- virtual bool GetAccessibleState(AccessibilityTypes::State* state);
-
- // Gets/sets the flag to determine whether the label should be collapsed when
- // it's hidden (not visible). If this flag is true, the label will return a
- // preferred size of (0, 0) when it's not visible.
- void set_collapse_when_hidden(bool value) { collapse_when_hidden_ = value; }
- bool collapse_when_hidden() const { return collapse_when_hidden_; }
-
- void set_paint_as_focused(bool paint_as_focused) {
- paint_as_focused_ = paint_as_focused;
- }
- void set_has_focus_border(bool has_focus_border) {
- has_focus_border_ = has_focus_border;
- }
-
- private:
- // These tests call CalculateDrawStringParams in order to verify the
- // calculations done for drawing text.
- FRIEND_TEST(LabelTest, DrawSingleLineString);
- FRIEND_TEST(LabelTest, DrawMultiLineString);
-
- static ChromeFont GetDefaultFont();
-
- // Returns parameters to be used for the DrawString call.
- void CalculateDrawStringParams(std::wstring* paint_text,
- gfx::Rect* text_bounds,
- int* flags);
-
- // If the mouse is over the text, SetContainsMouse(true) is invoked, otherwise
- // SetContainsMouse(false) is invoked.
- void UpdateContainsMouse(const MouseEvent& event);
-
- // Updates whether the mouse is contained in the Label. If the new value
- // differs from the current value, and a mouse over background is specified,
- // SchedulePaint is invoked.
- void SetContainsMouse(bool contains_mouse);
-
- // Returns where the text is drawn, in the receivers coordinate system.
- gfx::Rect GetTextBounds();
-
- int ComputeMultiLineFlags();
- gfx::Size GetTextSize();
- void Init(const std::wstring& text, const ChromeFont& font);
- std::wstring text_;
- GURL url_;
- ChromeFont font_;
- SkColor color_;
- gfx::Size text_size_;
- bool text_size_valid_;
- bool is_multi_line_;
- bool allow_character_break_;
- bool url_set_;
- Alignment horiz_alignment_;
- std::wstring tooltip_text_;
- // Whether the mouse is over this label.
- bool contains_mouse_;
- scoped_ptr<Background> mouse_over_background_;
- // Whether to collapse the label when it's not visible.
- bool collapse_when_hidden_;
- // The following member variable is used to control whether the alignment
- // needs to be flipped around for RTL locales. Please refer to the definition
- // of RTLAlignmentMode for more information.
- RTLAlignmentMode rtl_alignment_mode_;
- // When embedded in a larger control that is focusable, setting this flag
- // allows this view to be painted as focused even when it is itself not.
- bool paint_as_focused_;
- // When embedded in a larger control that is focusable, setting this flag
- // allows this view to reserve space for a focus border that it otherwise
- // might not have because it is not itself focusable.
- bool has_focus_border_;
-
- DISALLOW_COPY_AND_ASSIGN(Label);
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_CONTROLS_LABEL_H_
diff --git a/chrome/views/controls/label_unittest.cc b/chrome/views/controls/label_unittest.cc
deleted file mode 100644
index 5a152c3..0000000
--- a/chrome/views/controls/label_unittest.cc
+++ /dev/null
@@ -1,441 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "app/gfx/chrome_canvas.h"
-#include "app/l10n_util.h"
-#include "base/string_util.h"
-#include "chrome/views/border.h"
-#include "chrome/views/controls/label.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace views {
-
-// All text sizing measurements (width and height) should be greater than this.
-const int kMinTextDimension = 4;
-
-TEST(LabelTest, FontProperty) {
- Label label;
- std::wstring font_name(L"courier");
- ChromeFont font = ChromeFont::CreateFont(font_name, 30);
- label.SetFont(font);
- ChromeFont font_used = label.GetFont();
- EXPECT_STREQ(font_name.c_str(), font_used.FontName().c_str());
- EXPECT_EQ(30, font_used.FontSize());
-}
-
-TEST(LabelTest, TextProperty) {
- Label label;
- std::wstring test_text(L"A random string.");
- label.SetText(test_text);
- EXPECT_STREQ(test_text.c_str(), label.GetText().c_str());
-}
-
-TEST(LabelTest, UrlProperty) {
- Label label;
- std::string my_url("http://www.orkut.com/some/Random/path");
- GURL url(my_url);
- label.SetURL(url);
- EXPECT_STREQ(my_url.c_str(), label.GetURL().spec().c_str());
- EXPECT_STREQ(UTF8ToWide(my_url).c_str(), label.GetText().c_str());
-}
-
-TEST(LabelTest, ColorProperty) {
- Label label;
- SkColor color = SkColorSetARGB(20, 40, 10, 5);
- label.SetColor(color);
- EXPECT_EQ(color, label.GetColor());
-}
-
-TEST(LabelTest, AlignmentProperty) {
- Label label;
- bool reverse_alignment =
- l10n_util::GetTextDirection() == l10n_util::RIGHT_TO_LEFT;
-
- label.SetHorizontalAlignment(Label::ALIGN_RIGHT);
- EXPECT_EQ(
- reverse_alignment ? Label::ALIGN_LEFT : Label::ALIGN_RIGHT,
- label.GetHorizontalAlignment());
- label.SetHorizontalAlignment(Label::ALIGN_LEFT);
- EXPECT_EQ(
- reverse_alignment ? Label::ALIGN_RIGHT : Label::ALIGN_LEFT,
- label.GetHorizontalAlignment());
- label.SetHorizontalAlignment(Label::ALIGN_CENTER);
- EXPECT_EQ(Label::ALIGN_CENTER, label.GetHorizontalAlignment());
-
- // The label's alignment should not be flipped if the RTL alignment mode
- // is AUTO_DETECT_ALIGNMENT.
- label.SetRTLAlignmentMode(Label::AUTO_DETECT_ALIGNMENT);
- label.SetHorizontalAlignment(Label::ALIGN_RIGHT);
- EXPECT_EQ(Label::ALIGN_RIGHT, label.GetHorizontalAlignment());
- label.SetHorizontalAlignment(Label::ALIGN_LEFT);
- EXPECT_EQ(Label::ALIGN_LEFT, label.GetHorizontalAlignment());
- label.SetHorizontalAlignment(Label::ALIGN_CENTER);
- EXPECT_EQ(Label::ALIGN_CENTER, label.GetHorizontalAlignment());
-}
-
-TEST(LabelTest, RTLAlignmentModeProperty) {
- Label label;
- EXPECT_EQ(Label::USE_UI_ALIGNMENT, label.GetRTLAlignmentMode());
-
- label.SetRTLAlignmentMode(Label::AUTO_DETECT_ALIGNMENT);
- EXPECT_EQ(Label::AUTO_DETECT_ALIGNMENT, label.GetRTLAlignmentMode());
-
- label.SetRTLAlignmentMode(Label::USE_UI_ALIGNMENT);
- EXPECT_EQ(Label::USE_UI_ALIGNMENT, label.GetRTLAlignmentMode());
-}
-
-TEST(LabelTest, MultiLineProperty) {
- Label label;
- EXPECT_FALSE(label.IsMultiLine());
- label.SetMultiLine(true);
- EXPECT_TRUE(label.IsMultiLine());
- label.SetMultiLine(false);
- EXPECT_FALSE(label.IsMultiLine());
-}
-
-TEST(LabelTest, TooltipProperty) {
- Label label;
- std::wstring test_text(L"My cool string.");
- label.SetText(test_text);
-
- std::wstring tooltip;
- EXPECT_TRUE(label.GetTooltipText(0, 0, &tooltip));
- EXPECT_STREQ(test_text.c_str(), tooltip.c_str());
-
- std::wstring tooltip_text(L"The tooltip!");
- label.SetTooltipText(tooltip_text);
- EXPECT_TRUE(label.GetTooltipText(0, 0, &tooltip));
- EXPECT_STREQ(tooltip_text.c_str(), tooltip.c_str());
-
- std::wstring empty_text;
- label.SetTooltipText(empty_text);
- EXPECT_TRUE(label.GetTooltipText(0, 0, &tooltip));
- EXPECT_STREQ(test_text.c_str(), tooltip.c_str());
-
- // Make the label big enough to hold the text
- // and expect there to be no tooltip.
- label.SetBounds(0, 0, 1000, 40);
- EXPECT_FALSE(label.GetTooltipText(0, 0, &tooltip));
-
- // Verify that setting the tooltip still shows it.
- label.SetTooltipText(tooltip_text);
- EXPECT_TRUE(label.GetTooltipText(0, 0, &tooltip));
- EXPECT_STREQ(tooltip_text.c_str(), tooltip.c_str());
- // Clear out the tooltip.
- label.SetTooltipText(empty_text);
-
- // Shrink the bounds and the tooltip should come back.
- label.SetBounds(0, 0, 1, 1);
- EXPECT_TRUE(label.GetTooltipText(0, 0, &tooltip));
-
- // Make the label multiline and there is no tooltip again.
- label.SetMultiLine(true);
- EXPECT_FALSE(label.GetTooltipText(0, 0, &tooltip));
-
- // Verify that setting the tooltip still shows it.
- label.SetTooltipText(tooltip_text);
- EXPECT_TRUE(label.GetTooltipText(0, 0, &tooltip));
- EXPECT_STREQ(tooltip_text.c_str(), tooltip.c_str());
- // Clear out the tooltip.
- label.SetTooltipText(empty_text);
-}
-
-TEST(LabelTest, Accessibility) {
- Label label;
- std::wstring test_text(L"My special text.");
- label.SetText(test_text);
-
- AccessibilityTypes::Role role;
- EXPECT_TRUE(label.GetAccessibleRole(&role));
- EXPECT_EQ(AccessibilityTypes::ROLE_TEXT, role);
-
- std::wstring name;
- EXPECT_TRUE(label.GetAccessibleName(&name));
- EXPECT_STREQ(test_text.c_str(), name.c_str());
-
- AccessibilityTypes::State state;
- EXPECT_TRUE(label.GetAccessibleState(&state));
- EXPECT_EQ(AccessibilityTypes::STATE_READONLY, state);
-}
-
-TEST(LabelTest, SingleLineSizing) {
- Label label;
- std::wstring test_text(L"A not so random string in one line.");
- label.SetText(test_text);
-
- // GetPreferredSize
- gfx::Size required_size = label.GetPreferredSize();
- EXPECT_GT(required_size.height(), kMinTextDimension);
- EXPECT_GT(required_size.width(), kMinTextDimension);
-
- // Test everything with borders.
- gfx::Insets border(10, 20, 30, 40);
- label.set_border(Border::CreateEmptyBorder(border.top(),
- border.left(),
- border.bottom(),
- border.right()));
-
- // GetPreferredSize and borders.
- label.SetBounds(0, 0, 0, 0);
- gfx::Size required_size_with_border = label.GetPreferredSize();
- EXPECT_EQ(required_size_with_border.height(),
- required_size.height() + border.height());
- EXPECT_EQ(required_size_with_border.width(),
- required_size.width() + border.width());
-}
-
-TEST(LabelTest, MultiLineSizing) {
- Label label;
- label.SetFocusable(false);
- std::wstring test_text(L"A random string\nwith multiple lines\nand returns!");
- label.SetText(test_text);
- label.SetMultiLine(true);
-
- // GetPreferredSize
- gfx::Size required_size = label.GetPreferredSize();
- EXPECT_GT(required_size.height(), kMinTextDimension);
- EXPECT_GT(required_size.width(), kMinTextDimension);
-
- // SizeToFit with unlimited width.
- label.SizeToFit(0);
- int required_width = label.GetLocalBounds(true).width();
- EXPECT_GT(required_width, kMinTextDimension);
-
- // SizeToFit with limited width.
- label.SizeToFit(required_width - 1);
- int constrained_width = label.GetLocalBounds(true).width();
- EXPECT_LT(constrained_width, required_width);
- EXPECT_GT(constrained_width, kMinTextDimension);
-
- // Change the width back to the desire width.
- label.SizeToFit(required_width);
- EXPECT_EQ(required_width, label.GetLocalBounds(true).width());
-
- // General tests for GetHeightForWidth.
- int required_height = label.GetHeightForWidth(required_width);
- EXPECT_GT(required_height, kMinTextDimension);
- int height_for_constrained_width = label.GetHeightForWidth(constrained_width);
- EXPECT_GT(height_for_constrained_width, required_height);
- // Using the constrained width or the required_width - 1 should give the
- // same result for the height because the constrainted width is the tight
- // width when given "required_width - 1" as the max width.
- EXPECT_EQ(height_for_constrained_width,
- label.GetHeightForWidth(required_width - 1));
-
- // Test everything with borders.
- gfx::Insets border(10, 20, 30, 40);
- label.set_border(Border::CreateEmptyBorder(border.top(),
- border.left(),
- border.bottom(),
- border.right()));
-
- // SizeToFit and borders.
- label.SizeToFit(0);
- int required_width_with_border = label.GetLocalBounds(true).width();
- EXPECT_EQ(required_width_with_border, required_width + border.width());
-
- // GetHeightForWidth and borders.
- int required_height_with_border =
- label.GetHeightForWidth(required_width_with_border);
- EXPECT_EQ(required_height_with_border, required_height + border.height());
-
- // Test that the border width is subtracted before doing the height
- // calculation. If it is, then the height will grow when width
- // is shrunk.
- int height1 = label.GetHeightForWidth(required_width_with_border - 1);
- EXPECT_GT(height1, required_height_with_border);
- EXPECT_EQ(height1, height_for_constrained_width + border.height());
-
- // GetPreferredSize and borders.
- label.SetBounds(0, 0, 0, 0);
- gfx::Size required_size_with_border = label.GetPreferredSize();
- EXPECT_EQ(required_size_with_border.height(),
- required_size.height() + border.height());
- EXPECT_EQ(required_size_with_border.width(),
- required_size.width() + border.width());
-}
-
-TEST(LabelTest, DrawSingleLineString) {
- Label label;
- label.SetFocusable(false);
-
- // Turn off mirroring so that we don't need to figure out if
- // align right really means align left.
- label.EnableUIMirroringForRTLLanguages(false);
-
- std::wstring test_text(L"Here's a string with no returns.");
- label.SetText(test_text);
- gfx::Size required_size(label.GetPreferredSize());
- gfx::Size extra(22, 8);
- label.SetBounds(0,
- 0,
- required_size.width() + extra.width(),
- required_size.height() + extra.height());
-
- // Do some basic verifications for all three alignments.
- std::wstring paint_text;
- gfx::Rect text_bounds;
- int flags;
-
- // Centered text.
- label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
- EXPECT_STREQ(test_text.c_str(), paint_text.c_str());
- // The text should be centered horizontally and vertically.
- EXPECT_EQ(extra.width() / 2, text_bounds.x());
- EXPECT_EQ(extra.height() / 2 , text_bounds.y());
- EXPECT_EQ(required_size.width(), text_bounds.width());
- EXPECT_EQ(required_size.height(), text_bounds.height());
- EXPECT_EQ(0, flags);
-
- // Left aligned text.
- label.SetHorizontalAlignment(Label::ALIGN_LEFT);
- paint_text.clear();
- text_bounds.SetRect(0, 0, 0, 0);
- label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
- EXPECT_STREQ(test_text.c_str(), paint_text.c_str());
- // The text should be left aligned horizontally and centered vertically.
- EXPECT_EQ(0, text_bounds.x());
- EXPECT_EQ(extra.height() / 2 , text_bounds.y());
- EXPECT_EQ(required_size.width(), text_bounds.width());
- EXPECT_EQ(required_size.height(), text_bounds.height());
- EXPECT_EQ(0, flags);
-
- // Right aligned text.
- label.SetHorizontalAlignment(Label::ALIGN_RIGHT);
- paint_text.clear();
- text_bounds.SetRect(0, 0, 0, 0);
- label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
- EXPECT_STREQ(test_text.c_str(), paint_text.c_str());
- // The text should be right aligned horizontally and centered vertically.
- EXPECT_EQ(extra.width(), text_bounds.x());
- EXPECT_EQ(extra.height() / 2 , text_bounds.y());
- EXPECT_EQ(required_size.width(), text_bounds.width());
- EXPECT_EQ(required_size.height(), text_bounds.height());
- EXPECT_EQ(0, flags);
-
- // Test single line drawing with a border.
- gfx::Insets border(39, 34, 8, 96);
- label.set_border(Border::CreateEmptyBorder(border.top(),
- border.left(),
- border.bottom(),
- border.right()));
-
- gfx::Size required_size_with_border(label.GetPreferredSize());
- EXPECT_EQ(required_size.width() + border.width(),
- required_size_with_border.width());
- EXPECT_EQ(required_size.height() + border.height(),
- required_size_with_border.height());
- label.SetBounds(0,
- 0,
- required_size_with_border.width() + extra.width(),
- required_size_with_border.height() + extra.height());
-
- // Centered text with border.
- label.SetHorizontalAlignment(Label::ALIGN_CENTER);
- paint_text.clear();
- text_bounds.SetRect(0, 0, 0, 0);
- label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
- EXPECT_STREQ(test_text.c_str(), paint_text.c_str());
- // The text should be centered horizontally and vertically within the border.
- EXPECT_EQ(border.left() + extra.width() / 2, text_bounds.x());
- EXPECT_EQ(border.top() + extra.height() / 2 , text_bounds.y());
- EXPECT_EQ(required_size.width(), text_bounds.width());
- EXPECT_EQ(required_size.height(), text_bounds.height());
- EXPECT_EQ(0, flags);
-
- // Left aligned text with border.
- label.SetHorizontalAlignment(Label::ALIGN_LEFT);
- paint_text.clear();
- text_bounds.SetRect(0, 0, 0, 0);
- label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
- EXPECT_STREQ(test_text.c_str(), paint_text.c_str());
- // The text should be left aligned horizontally and centered vertically.
- EXPECT_EQ(border.left(), text_bounds.x());
- EXPECT_EQ(border.top() + extra.height() / 2 , text_bounds.y());
- EXPECT_EQ(required_size.width(), text_bounds.width());
- EXPECT_EQ(required_size.height(), text_bounds.height());
- EXPECT_EQ(0, flags);
-
- // Right aligned text.
- label.SetHorizontalAlignment(Label::ALIGN_RIGHT);
- paint_text.clear();
- text_bounds.SetRect(0, 0, 0, 0);
- label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
- EXPECT_STREQ(test_text.c_str(), paint_text.c_str());
- // The text should be right aligned horizontally and centered vertically.
- EXPECT_EQ(border.left() + extra.width(), text_bounds.x());
- EXPECT_EQ(border.top() + extra.height() / 2 , text_bounds.y());
- EXPECT_EQ(required_size.width(), text_bounds.width());
- EXPECT_EQ(required_size.height(), text_bounds.height());
- EXPECT_EQ(0, flags);
-}
-
-TEST(LabelTest, DrawMultiLineString) {
- Label label;
- label.SetFocusable(false);
-
- // Turn off mirroring so that we don't need to figure out if
- // align right really means align left.
- label.EnableUIMirroringForRTLLanguages(false);
-
- std::wstring test_text(L"Another string\nwith returns\n\n!");
- label.SetText(test_text);
- label.SetMultiLine(true);
- label.SizeToFit(0);
-
- // Do some basic verifications for all three alignments.
- std::wstring paint_text;
- gfx::Rect text_bounds;
- int flags;
- label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
- EXPECT_STREQ(test_text.c_str(), paint_text.c_str());
- EXPECT_EQ(0, text_bounds.x());
- EXPECT_EQ(0, text_bounds.y());
- EXPECT_GT(text_bounds.width(), kMinTextDimension);
- EXPECT_GT(text_bounds.height(), kMinTextDimension);
- EXPECT_EQ(ChromeCanvas::MULTI_LINE | ChromeCanvas::TEXT_ALIGN_CENTER, flags);
- gfx::Rect center_bounds(text_bounds);
-
- label.SetHorizontalAlignment(Label::ALIGN_LEFT);
- paint_text.clear();
- text_bounds.SetRect(0, 0, 0, 0);
- label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
- EXPECT_STREQ(test_text.c_str(), paint_text.c_str());
- EXPECT_EQ(0, text_bounds.x());
- EXPECT_EQ(0, text_bounds.y());
- EXPECT_GT(text_bounds.width(), kMinTextDimension);
- EXPECT_GT(text_bounds.height(), kMinTextDimension);
- EXPECT_EQ(ChromeCanvas::MULTI_LINE | ChromeCanvas::TEXT_ALIGN_LEFT, flags);
-
- label.SetHorizontalAlignment(Label::ALIGN_RIGHT);
- paint_text.clear();
- text_bounds.SetRect(0, 0, 0, 0);
- label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
- EXPECT_STREQ(test_text.c_str(), paint_text.c_str());
- EXPECT_EQ(0, text_bounds.x());
- EXPECT_EQ(0, text_bounds.y());
- EXPECT_GT(text_bounds.width(), kMinTextDimension);
- EXPECT_GT(text_bounds.height(), kMinTextDimension);
- EXPECT_EQ(ChromeCanvas::MULTI_LINE | ChromeCanvas::TEXT_ALIGN_RIGHT, flags);
-
- // Test multiline drawing with a border.
- gfx::Insets border(19, 92, 23, 2);
- label.set_border(Border::CreateEmptyBorder(border.top(),
- border.left(),
- border.bottom(),
- border.right()));
- label.SizeToFit(0);
- label.SetHorizontalAlignment(Label::ALIGN_CENTER);
- paint_text.clear();
- text_bounds.SetRect(0, 0, 0, 0);
- label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
- EXPECT_STREQ(test_text.c_str(), paint_text.c_str());
- EXPECT_EQ(center_bounds.x() + border.left(), text_bounds.x());
- EXPECT_EQ(center_bounds.y() + border.top(), text_bounds.y());
- EXPECT_EQ(center_bounds.width(), text_bounds.width());
- EXPECT_EQ(center_bounds.height(), text_bounds.height());
- EXPECT_EQ(ChromeCanvas::MULTI_LINE | ChromeCanvas::TEXT_ALIGN_CENTER, flags);
-}
-
-} // namespace views
diff --git a/chrome/views/controls/link.cc b/chrome/views/controls/link.cc
deleted file mode 100644
index 53d2495..0000000
--- a/chrome/views/controls/link.cc
+++ /dev/null
@@ -1,183 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/controls/link.h"
-
-#include "app/gfx/chrome_font.h"
-#include "chrome/views/event.h"
-
-namespace views {
-
-static HCURSOR g_hand_cursor = NULL;
-
-// Default colors used for links.
-static const SkColor kHighlightedColor = SkColorSetRGB(255, 0x00, 0x00);
-static const SkColor kNormalColor = SkColorSetRGB(0, 51, 153);
-static const SkColor kDisabledColor = SkColorSetRGB(0, 0, 0);
-
-const char Link::kViewClassName[] = "chrome/views/Link";
-
-Link::Link() : Label(L""),
- controller_(NULL),
- highlighted_(false),
- highlighted_color_(kHighlightedColor),
- disabled_color_(kDisabledColor),
- normal_color_(kNormalColor) {
- Init();
- SetFocusable(true);
-}
-
-Link::Link(const std::wstring& title) : Label(title),
- controller_(NULL),
- highlighted_(false),
- highlighted_color_(kHighlightedColor),
- disabled_color_(kDisabledColor),
- normal_color_(kNormalColor) {
- Init();
- SetFocusable(true);
-}
-
-void Link::Init() {
- SetColor(normal_color_);
- ValidateStyle();
-}
-
-Link::~Link() {
-}
-
-void Link::SetController(LinkController* controller) {
- controller_ = controller;
-}
-
-const LinkController* Link::GetController() {
- return controller_;
-}
-
-std::string Link::GetClassName() const {
- return kViewClassName;
-}
-
-void Link::SetHighlightedColor(const SkColor& color) {
- normal_color_ = color;
- ValidateStyle();
-}
-
-void Link::SetDisabledColor(const SkColor& color) {
- disabled_color_ = color;
- ValidateStyle();
-}
-
-void Link::SetNormalColor(const SkColor& color) {
- normal_color_ = color;
- ValidateStyle();
-}
-
-bool Link::OnMousePressed(const MouseEvent& e) {
- if (!enabled_ || (!e.IsLeftMouseButton() && !e.IsMiddleMouseButton()))
- return false;
- SetHighlighted(true);
- return true;
-}
-
-bool Link::OnMouseDragged(const MouseEvent& e) {
- SetHighlighted(enabled_ &&
- (e.IsLeftMouseButton() || e.IsMiddleMouseButton()) &&
- HitTest(e.location()));
- return true;
-}
-
-void Link::OnMouseReleased(const MouseEvent& e, bool canceled) {
- // Change the highlight first just in case this instance is deleted
- // while calling the controller
- SetHighlighted(false);
- if (enabled_ && !canceled &&
- (e.IsLeftMouseButton() || e.IsMiddleMouseButton()) &&
- HitTest(e.location())) {
- // Focus the link on click.
- RequestFocus();
-
- if (controller_)
- controller_->LinkActivated(this, e.GetFlags());
- }
-}
-
-bool Link::OnKeyPressed(const KeyEvent& e) {
- if ((e.GetCharacter() == VK_SPACE) || (e.GetCharacter() == VK_RETURN)) {
- SetHighlighted(false);
-
- // Focus the link on key pressed.
- RequestFocus();
-
- if (controller_)
- controller_->LinkActivated(this, e.GetFlags());
-
- return true;
- }
- return false;
-}
-
-bool Link::OverrideAccelerator(const Accelerator& accelerator) {
- return (accelerator.GetKeyCode() == VK_SPACE) ||
- (accelerator.GetKeyCode() == VK_RETURN);
-}
-
-void Link::SetHighlighted(bool f) {
- if (f != highlighted_) {
- highlighted_ = f;
- ValidateStyle();
- SchedulePaint();
- }
-}
-
-void Link::ValidateStyle() {
- ChromeFont font = GetFont();
-
- if (enabled_) {
- if ((font.style() & ChromeFont::UNDERLINED) == 0) {
- Label::SetFont(font.DeriveFont(0, font.style() |
- ChromeFont::UNDERLINED));
- }
- } else {
- if ((font.style() & ChromeFont::UNDERLINED) != 0) {
- Label::SetFont(font.DeriveFont(0, font.style() &
- ~ChromeFont::UNDERLINED));
- }
- }
-
- if (enabled_) {
- if (highlighted_) {
- Label::SetColor(highlighted_color_);
- } else {
- Label::SetColor(normal_color_);
- }
- } else {
- Label::SetColor(disabled_color_);
- }
-}
-
-void Link::SetFont(const ChromeFont& font) {
- Label::SetFont(font);
- ValidateStyle();
-}
-
-void Link::SetEnabled(bool f) {
- if (f != enabled_) {
- enabled_ = f;
- ValidateStyle();
- SchedulePaint();
- }
-}
-
-HCURSOR Link::GetCursorForPoint(Event::EventType event_type, int x, int y) {
- if (enabled_) {
- if (!g_hand_cursor) {
- g_hand_cursor = LoadCursor(NULL, IDC_HAND);
- }
- return g_hand_cursor;
- } else {
- return NULL;
- }
-}
-
-} // namespace views
diff --git a/chrome/views/controls/link.h b/chrome/views/controls/link.h
deleted file mode 100644
index ee40236..0000000
--- a/chrome/views/controls/link.h
+++ /dev/null
@@ -1,94 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_CONTROLS_LINK_H_
-#define CHROME_VIEWS_CONTROLS_LINK_H_
-
-#include "chrome/views/controls/label.h"
-
-namespace views {
-
-class Link;
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// LinkController defines the method that should be implemented to
-// receive a notification when a link is clicked
-//
-////////////////////////////////////////////////////////////////////////////////
-class LinkController {
- public:
- virtual void LinkActivated(Link* source, int event_flags) = 0;
-};
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// Link class
-//
-// A Link is a label subclass that looks like an HTML link. It has a
-// controller which is notified when a click occurs.
-//
-////////////////////////////////////////////////////////////////////////////////
-class Link : public Label {
- public:
- static const char Link::kViewClassName[];
-
- Link();
- Link(const std::wstring& title);
- virtual ~Link();
-
- void SetController(LinkController* controller);
- const LinkController* GetController();
-
- // Overridden from View:
- virtual bool OnMousePressed(const MouseEvent& event);
- virtual bool OnMouseDragged(const MouseEvent& event);
- virtual void OnMouseReleased(const MouseEvent& event,
- bool canceled);
- virtual bool OnKeyPressed(const KeyEvent& e);
- virtual bool OverrideAccelerator(const Accelerator& accelerator);
-
- virtual void SetFont(const ChromeFont& font);
-
- // Set whether the link is enabled.
- virtual void SetEnabled(bool f);
-
- virtual HCURSOR GetCursorForPoint(Event::EventType event_type, int x, int y);
-
- virtual std::string GetClassName() const;
-
- void SetHighlightedColor(const SkColor& color);
- void SetDisabledColor(const SkColor& color);
- void SetNormalColor(const SkColor& color);
-
- private:
-
- // A highlighted link is clicked.
- void SetHighlighted(bool f);
-
- // Make sure the label style matched the current state.
- void ValidateStyle();
-
- void Init();
-
- LinkController* controller_;
-
- // Whether the link is currently highlighted.
- bool highlighted_;
-
- // The color when the link is highlighted.
- SkColor highlighted_color_;
-
- // The color when the link is disabled.
- SkColor disabled_color_;
-
- // The color when the link is neither highlighted nor disabled.
- SkColor normal_color_;
-
- DISALLOW_COPY_AND_ASSIGN(Link);
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_CONTROLS_LINK_H_
diff --git a/chrome/views/controls/menu/chrome_menu.cc b/chrome/views/controls/menu/chrome_menu.cc
deleted file mode 100644
index 1b1e475..0000000
--- a/chrome/views/controls/menu/chrome_menu.cc
+++ /dev/null
@@ -1,2816 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/controls/menu/chrome_menu.h"
-
-#include <windows.h>
-#include <uxtheme.h>
-#include <Vssym32.h>
-
-#include "app/gfx/chrome_canvas.h"
-#include "app/l10n_util.h"
-#include "app/l10n_util_win.h"
-#include "app/os_exchange_data.h"
-#include "base/base_drag_source.h"
-#include "base/gfx/native_theme.h"
-#include "base/message_loop.h"
-#include "base/task.h"
-#include "base/timer.h"
-#include "base/win_util.h"
-// TODO(beng): (Cleanup) remove this browser dep.
-#include "chrome/browser/drag_utils.h"
-#include "chrome/common/gfx/color_utils.h"
-#include "chrome/views/border.h"
-#include "chrome/views/view_constants.h"
-#include "chrome/views/widget/root_view.h"
-#include "chrome/views/widget/widget_win.h"
-#include "grit/generated_resources.h"
-#include "skia/ext/skia_utils_win.h"
-
-#undef min
-#undef max
-
-using base::Time;
-using base::TimeDelta;
-
-// Margins between the top of the item and the label.
-static const int kItemTopMargin = 3;
-
-// Margins between the bottom of the item and the label.
-static const int kItemBottomMargin = 4;
-
-// Margins used if the menu doesn't have icons.
-static const int kItemNoIconTopMargin = 1;
-static const int kItemNoIconBottomMargin = 3;
-
-// Margins between the left of the item and the icon.
-static const int kItemLeftMargin = 4;
-
-// Padding between the label and submenu arrow.
-static const int kLabelToArrowPadding = 10;
-
-// Padding between the arrow and the edge.
-static const int kArrowToEdgePadding = 5;
-
-// Padding between the icon and label.
-static const int kIconToLabelPadding = 8;
-
-// Padding between the gutter and label.
-static const int kGutterToLabel = 5;
-
-// Height of the scroll arrow.
-// This goes up to 4 with large fonts, but this is close enough for now.
-static const int kScrollArrowHeight = 3;
-
-// Size of the check. This comes from the OS.
-static int check_width;
-static int check_height;
-
-// Size of the submenu arrow. This comes from the OS.
-static int arrow_width;
-static int arrow_height;
-
-// Width of the gutter. Only used if render_gutter is true.
-static int gutter_width;
-
-// Margins between the right of the item and the label.
-static int item_right_margin;
-
-// X-coordinate of where the label starts.
-static int label_start;
-
-// Height of the separator.
-static int separator_height;
-
-// Padding around the edges of the submenu.
-static const int kSubmenuBorderSize = 3;
-
-// Amount to inset submenus.
-static const int kSubmenuHorizontalInset = 3;
-
-// Delay, in ms, between when menus are selected are moused over and the menu
-// appears.
-static const int kShowDelay = 400;
-
-// Amount of time from when the drop exits the menu and the menu is hidden.
-static const int kCloseOnExitTime = 1200;
-
-// Height of the drop indicator. This should be an event number.
-static const int kDropIndicatorHeight = 2;
-
-// Color of the drop indicator.
-static const SkColor kDropIndicatorColor = SK_ColorBLACK;
-
-// Whether or not the gutter should be rendered. The gutter is specific to
-// Vista.
-static bool render_gutter = false;
-
-// Max width of a menu. There does not appear to be an OS value for this, yet
-// both IE and FF restrict the max width of a menu.
-static const int kMaxMenuWidth = 400;
-
-// Period of the scroll timer (in milliseconds).
-static const int kScrollTimerMS = 30;
-
-// Preferred height of menu items. Reset every time a menu is run.
-static int pref_menu_height;
-
-// Are mnemonics shown? This is updated before the menus are shown.
-static bool show_mnemonics;
-
-using gfx::NativeTheme;
-
-namespace views {
-
-namespace {
-
-// Returns the font menus are to use.
-ChromeFont GetMenuFont() {
- NONCLIENTMETRICS metrics;
- win_util::GetNonClientMetrics(&metrics);
-
- l10n_util::AdjustUIFont(&(metrics.lfMenuFont));
- HFONT font = CreateFontIndirect(&metrics.lfMenuFont);
- DLOG_ASSERT(font);
- return ChromeFont::CreateFont(font);
-}
-
-// Calculates all sizes that we can from the OS.
-//
-// This is invoked prior to Running a menu.
-void UpdateMenuPartSizes(bool has_icons) {
- HDC dc = GetDC(NULL);
- RECT bounds = { 0, 0, 200, 200 };
- SIZE check_size;
- if (NativeTheme::instance()->GetThemePartSize(
- NativeTheme::MENU, dc, MENU_POPUPCHECK, MC_CHECKMARKNORMAL, &bounds,
- TS_TRUE, &check_size) == S_OK) {
- check_width = check_size.cx;
- check_height = check_size.cy;
- } else {
- check_width = GetSystemMetrics(SM_CXMENUCHECK);
- check_height = GetSystemMetrics(SM_CYMENUCHECK);
- }
-
- SIZE arrow_size;
- if (NativeTheme::instance()->GetThemePartSize(
- NativeTheme::MENU, dc, MENU_POPUPSUBMENU, MSM_NORMAL, &bounds,
- TS_TRUE, &arrow_size) == S_OK) {
- arrow_width = arrow_size.cx;
- arrow_height = arrow_size.cy;
- } else {
- // Sadly I didn't see a specify metrics for this.
- arrow_width = GetSystemMetrics(SM_CXMENUCHECK);
- arrow_height = GetSystemMetrics(SM_CYMENUCHECK);
- }
-
- SIZE gutter_size;
- if (NativeTheme::instance()->GetThemePartSize(
- NativeTheme::MENU, dc, MENU_POPUPGUTTER, MSM_NORMAL, &bounds,
- TS_TRUE, &gutter_size) == S_OK) {
- gutter_width = gutter_size.cx;
- render_gutter = true;
- } else {
- gutter_width = 0;
- render_gutter = false;
- }
-
- SIZE separator_size;
- if (NativeTheme::instance()->GetThemePartSize(
- NativeTheme::MENU, dc, MENU_POPUPSEPARATOR, MSM_NORMAL, &bounds,
- TS_TRUE, &separator_size) == S_OK) {
- separator_height = separator_size.cy;
- } else {
- separator_height = GetSystemMetrics(SM_CYMENU) / 2;
- }
-
- item_right_margin = kLabelToArrowPadding + arrow_width + kArrowToEdgePadding;
-
- if (has_icons) {
- label_start = kItemLeftMargin + check_width + kIconToLabelPadding;
- } else {
- // If there are no icons don't pad by the icon to label padding. This
- // makes us look close to system menus.
- label_start = kItemLeftMargin + check_width;
- }
- if (render_gutter)
- label_start += gutter_width + kGutterToLabel;
-
- ReleaseDC(NULL, dc);
-
- MenuItemView menu_item(NULL);
- menu_item.SetTitle(L"blah"); // Text doesn't matter here.
- pref_menu_height = menu_item.GetPreferredSize().height();
-}
-
-// Convenience for scrolling the view such that the origin is visible.
-static void ScrollToVisible(View* view) {
- view->ScrollRectToVisible(0, 0, view->width(), view->height());
-}
-
-// MenuScrollTask --------------------------------------------------------------
-
-// MenuScrollTask is used when the SubmenuView does not all fit on screen and
-// the mouse is over the scroll up/down buttons. MenuScrollTask schedules
-// itself with a RepeatingTimer. When Run is invoked MenuScrollTask scrolls
-// appropriately.
-
-class MenuScrollTask {
- public:
- MenuScrollTask() : submenu_(NULL) {
- pixels_per_second_ = pref_menu_height * 20;
- }
-
- void Update(const MenuController::MenuPart& part) {
- if (!part.is_scroll()) {
- StopScrolling();
- return;
- }
- DCHECK(part.submenu);
- SubmenuView* new_menu = part.submenu;
- bool new_is_up = (part.type == MenuController::MenuPart::SCROLL_UP);
- if (new_menu == submenu_ && is_scrolling_up_ == new_is_up)
- return;
-
- start_scroll_time_ = Time::Now();
- start_y_ = part.submenu->GetVisibleBounds().y();
- submenu_ = new_menu;
- is_scrolling_up_ = new_is_up;
-
- if (!scrolling_timer_.IsRunning()) {
- scrolling_timer_.Start(TimeDelta::FromMilliseconds(kScrollTimerMS), this,
- &MenuScrollTask::Run);
- }
- }
-
- void StopScrolling() {
- if (scrolling_timer_.IsRunning()) {
- scrolling_timer_.Stop();
- submenu_ = NULL;
- }
- }
-
- // The menu being scrolled. Returns null if not scrolling.
- SubmenuView* submenu() const { return submenu_; }
-
- private:
- void Run() {
- DCHECK(submenu_);
- gfx::Rect vis_rect = submenu_->GetVisibleBounds();
- const int delta_y = static_cast<int>(
- (Time::Now() - start_scroll_time_).InMilliseconds() *
- pixels_per_second_ / 1000);
- int target_y = start_y_;
- if (is_scrolling_up_)
- target_y = std::max(0, target_y - delta_y);
- else
- target_y = std::min(submenu_->height() - vis_rect.height(),
- target_y + delta_y);
- submenu_->ScrollRectToVisible(vis_rect.x(), target_y, vis_rect.width(),
- vis_rect.height());
- }
-
- // SubmenuView being scrolled.
- SubmenuView* submenu_;
-
- // Direction scrolling.
- bool is_scrolling_up_;
-
- // Timer to periodically scroll.
- base::RepeatingTimer<MenuScrollTask> scrolling_timer_;
-
- // Time we started scrolling at.
- Time start_scroll_time_;
-
- // How many pixels to scroll per second.
- int pixels_per_second_;
-
- // Y-coordinate of submenu_view_ when scrolling started.
- int start_y_;
-
- DISALLOW_COPY_AND_ASSIGN(MenuScrollTask);
-};
-
-// MenuScrollButton ------------------------------------------------------------
-
-// MenuScrollButton is used for the scroll buttons when not all menu items fit
-// on screen. MenuScrollButton forwards appropriate events to the
-// MenuController.
-
-class MenuScrollButton : public View {
- public:
- explicit MenuScrollButton(SubmenuView* host, bool is_up)
- : host_(host),
- is_up_(is_up),
- // Make our height the same as that of other MenuItemViews.
- pref_height_(pref_menu_height) {
- }
-
- virtual gfx::Size GetPreferredSize() {
- return gfx::Size(kScrollArrowHeight * 2 - 1, pref_height_);
- }
-
- virtual bool CanDrop(const OSExchangeData& data) {
- DCHECK(host_->GetMenuItem()->GetMenuController());
- return true; // Always return true so that drop events are targeted to us.
- }
-
- virtual void OnDragEntered(const DropTargetEvent& event) {
- DCHECK(host_->GetMenuItem()->GetMenuController());
- host_->GetMenuItem()->GetMenuController()->OnDragEnteredScrollButton(
- host_, is_up_);
- }
-
- virtual int OnDragUpdated(const DropTargetEvent& event) {
- return DragDropTypes::DRAG_NONE;
- }
-
- virtual void OnDragExited() {
- DCHECK(host_->GetMenuItem()->GetMenuController());
- host_->GetMenuItem()->GetMenuController()->OnDragExitedScrollButton(host_);
- }
-
- virtual int OnPerformDrop(const DropTargetEvent& event) {
- return DragDropTypes::DRAG_NONE;
- }
-
- virtual void Paint(ChromeCanvas* canvas) {
- HDC dc = canvas->beginPlatformPaint();
-
- // The background.
- RECT item_bounds = { 0, 0, width(), height() };
- NativeTheme::instance()->PaintMenuItemBackground(
- NativeTheme::MENU, dc, MENU_POPUPITEM, MPI_NORMAL, false,
- &item_bounds);
-
- // Then the arrow.
- int x = width() / 2;
- int y = (height() - kScrollArrowHeight) / 2;
- int delta_y = 1;
- if (!is_up_) {
- delta_y = -1;
- y += kScrollArrowHeight;
- }
- SkColor arrow_color = color_utils::GetSysSkColor(COLOR_MENUTEXT);
- for (int i = 0; i < kScrollArrowHeight; ++i, --x, y += delta_y)
- canvas->FillRectInt(arrow_color, x, y, (i * 2) + 1, 1);
-
- canvas->endPlatformPaint();
- }
-
- private:
- // SubmenuView we were created for.
- SubmenuView* host_;
-
- // Direction of the button.
- bool is_up_;
-
- // Preferred height.
- int pref_height_;
-
- DISALLOW_COPY_AND_ASSIGN(MenuScrollButton);
-};
-
-// MenuScrollView --------------------------------------------------------------
-
-// MenuScrollView is a viewport for the SubmenuView. It's reason to exist is so
-// that ScrollRectToVisible works.
-//
-// NOTE: It is possible to use ScrollView directly (after making it deal with
-// null scrollbars), but clicking on a child of ScrollView forces the window to
-// become active, which we don't want. As we really only need a fraction of
-// what ScrollView does, we use a one off variant.
-
-class MenuScrollView : public View {
- public:
- explicit MenuScrollView(View* child) {
- AddChildView(child);
- }
-
- virtual void ScrollRectToVisible(int x, int y, int width, int height) {
- // NOTE: this assumes we only want to scroll in the y direction.
-
- View* child = GetContents();
- // Convert y to view's coordinates.
- y -= child->y();
- gfx::Size pref = child->GetPreferredSize();
- // Constrain y to make sure we don't show past the bottom of the view.
- y = std::max(0, std::min(pref.height() - this->height(), y));
- child->SetY(-y);
- }
-
- // Returns the contents, which is the SubmenuView.
- View* GetContents() {
- return GetChildViewAt(0);
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MenuScrollView);
-};
-
-// MenuScrollViewContainer -----------------------------------------------------
-
-// MenuScrollViewContainer contains the SubmenuView (through a MenuScrollView)
-// and two scroll buttons. The scroll buttons are only visible and enabled if
-// the preferred height of the SubmenuView is bigger than our bounds.
-class MenuScrollViewContainer : public View {
- public:
- explicit MenuScrollViewContainer(SubmenuView* content_view) {
- scroll_up_button_ = new MenuScrollButton(content_view, true);
- scroll_down_button_ = new MenuScrollButton(content_view, false);
- AddChildView(scroll_up_button_);
- AddChildView(scroll_down_button_);
-
- scroll_view_ = new MenuScrollView(content_view);
- AddChildView(scroll_view_);
-
- set_border(Border::CreateEmptyBorder(
- kSubmenuBorderSize, kSubmenuBorderSize,
- kSubmenuBorderSize, kSubmenuBorderSize));
- }
-
- virtual void Paint(ChromeCanvas* canvas) {
- HDC dc = canvas->beginPlatformPaint();
- CRect bounds(0, 0, width(), height());
- NativeTheme::instance()->PaintMenuBackground(
- NativeTheme::MENU, dc, MENU_POPUPBACKGROUND, 0, &bounds);
- canvas->endPlatformPaint();
- }
-
- View* scroll_down_button() { return scroll_down_button_; }
-
- View* scroll_up_button() { return scroll_up_button_; }
-
- virtual void Layout() {
- gfx::Insets insets = GetInsets();
- int x = insets.left();
- int y = insets.top();
- int width = View::width() - insets.width();
- int content_height = height() - insets.height();
- if (!scroll_up_button_->IsVisible()) {
- scroll_view_->SetBounds(x, y, width, content_height);
- scroll_view_->Layout();
- return;
- }
-
- gfx::Size pref = scroll_up_button_->GetPreferredSize();
- scroll_up_button_->SetBounds(x, y, width, pref.height());
- content_height -= pref.height();
-
- const int scroll_view_y = y + pref.height();
-
- pref = scroll_down_button_->GetPreferredSize();
- scroll_down_button_->SetBounds(x, height() - pref.height() - insets.top(),
- width, pref.height());
- content_height -= pref.height();
-
- scroll_view_->SetBounds(x, scroll_view_y, width, content_height);
- scroll_view_->Layout();
- }
-
- virtual void DidChangeBounds(const gfx::Rect& previous,
- const gfx::Rect& current) {
- gfx::Size content_pref = scroll_view_->GetContents()->GetPreferredSize();
- scroll_up_button_->SetVisible(content_pref.height() > height());
- scroll_down_button_->SetVisible(content_pref.height() > height());
- }
-
- virtual gfx::Size GetPreferredSize() {
- gfx::Size prefsize = scroll_view_->GetContents()->GetPreferredSize();
- gfx::Insets insets = GetInsets();
- prefsize.Enlarge(insets.width(), insets.height());
- return prefsize;
- }
-
- private:
- // The scroll buttons.
- View* scroll_up_button_;
- View* scroll_down_button_;
-
- // The scroll view.
- MenuScrollView* scroll_view_;
-
- DISALLOW_COPY_AND_ASSIGN(MenuScrollViewContainer);
-};
-
-// MenuSeparator ---------------------------------------------------------------
-
-// Renders a separator.
-
-class MenuSeparator : public View {
- public:
- MenuSeparator() {
- }
-
- void Paint(ChromeCanvas* canvas) {
- // The gutter is rendered before the background.
- int start_x = 0;
- int start_y = height() / 3;
- HDC dc = canvas->beginPlatformPaint();
- if (render_gutter) {
- // If render_gutter is true, we're on Vista and need to render the
- // gutter, then indent the separator from the gutter.
- RECT gutter_bounds = { label_start - kGutterToLabel - gutter_width, 0, 0,
- height() };
- gutter_bounds.right = gutter_bounds.left + gutter_width;
- NativeTheme::instance()->PaintMenuGutter(dc, MENU_POPUPGUTTER, MPI_NORMAL,
- &gutter_bounds);
- start_x = gutter_bounds.left + gutter_width;
- start_y = 0;
- }
- RECT separator_bounds = { start_x, start_y, width(), height() };
- NativeTheme::instance()->PaintMenuSeparator(dc, MENU_POPUPSEPARATOR,
- MPI_NORMAL, &separator_bounds);
- canvas->endPlatformPaint();
- }
-
- gfx::Size GetPreferredSize() {
- return gfx::Size(10, // Just in case we're the only item in a menu.
- separator_height);
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MenuSeparator);
-};
-
-// MenuHostRootView ----------------------------------------------------------
-
-// MenuHostRootView is the RootView of the window showing the menu.
-// SubmenuView's scroll view is added as a child of MenuHostRootView.
-// MenuHostRootView forwards relevant events to the MenuController.
-//
-// As all the menu items are owned by the root menu item, care must be taken
-// such that when MenuHostRootView is deleted it doesn't delete the menu items.
-
-class MenuHostRootView : public RootView {
- public:
- explicit MenuHostRootView(Widget* widget,
- SubmenuView* submenu)
- : RootView(widget),
- submenu_(submenu),
- forward_drag_to_menu_controller_(true),
- suspend_events_(false) {
-#ifdef DEBUG_MENU
- DLOG(INFO) << " new MenuHostRootView " << this;
-#endif
- }
-
- virtual bool OnMousePressed(const MouseEvent& event) {
- if (suspend_events_)
- return true;
-
- forward_drag_to_menu_controller_ =
- ((event.x() < 0 || event.y() < 0 || event.x() >= width() ||
- event.y() >= height()) ||
- !RootView::OnMousePressed(event));
- if (forward_drag_to_menu_controller_)
- GetMenuController()->OnMousePressed(submenu_, event);
- return true;
- }
-
- virtual bool OnMouseDragged(const MouseEvent& event) {
- if (suspend_events_)
- return true;
-
- if (forward_drag_to_menu_controller_) {
-#ifdef DEBUG_MENU
- DLOG(INFO) << " MenuHostRootView::OnMouseDragged source=" << submenu_;
-#endif
- GetMenuController()->OnMouseDragged(submenu_, event);
- return true;
- }
- return RootView::OnMouseDragged(event);
- }
-
- virtual void OnMouseReleased(const MouseEvent& event, bool canceled) {
- if (suspend_events_)
- return;
-
- RootView::OnMouseReleased(event, canceled);
- if (forward_drag_to_menu_controller_) {
- forward_drag_to_menu_controller_ = false;
- if (canceled) {
- GetMenuController()->Cancel(true);
- } else {
- GetMenuController()->OnMouseReleased(submenu_, event);
- }
- }
- }
-
- virtual void OnMouseMoved(const MouseEvent& event) {
- if (suspend_events_)
- return;
-
- RootView::OnMouseMoved(event);
- GetMenuController()->OnMouseMoved(submenu_, event);
- }
-
- virtual void ProcessOnMouseExited() {
- if (suspend_events_)
- return;
-
- RootView::ProcessOnMouseExited();
- }
-
- virtual bool ProcessMouseWheelEvent(const MouseWheelEvent& e) {
- // RootView::ProcessMouseWheelEvent forwards to the focused view. We don't
- // have a focused view, so we need to override this then forward to
- // the menu.
- return submenu_->OnMouseWheel(e);
- }
-
- void SuspendEvents() {
- suspend_events_ = true;
- }
-
- private:
- MenuController* GetMenuController() {
- return submenu_->GetMenuItem()->GetMenuController();
- }
-
- // The SubmenuView we contain.
- SubmenuView* submenu_;
-
- // Whether mouse dragged/released should be forwarded to the MenuController.
- bool forward_drag_to_menu_controller_;
-
- // Whether events are suspended. If true, no events are forwarded to the
- // MenuController.
- bool suspend_events_;
-
- DISALLOW_COPY_AND_ASSIGN(MenuHostRootView);
-};
-
-// MenuHost ------------------------------------------------------------------
-
-// MenuHost is the window responsible for showing a single menu.
-//
-// Similar to MenuHostRootView, care must be taken such that when MenuHost is
-// deleted, it doesn't delete the menu items. MenuHost is closed via a
-// DelayedClosed, which avoids timing issues with deleting the window while
-// capture or events are directed at it.
-
-class MenuHost : public WidgetWin {
- public:
- explicit MenuHost(SubmenuView* submenu)
- : closed_(false),
- submenu_(submenu),
- owns_capture_(false) {
- set_window_style(WS_POPUP);
- set_initial_class_style(
- (win_util::GetWinVersion() < win_util::WINVERSION_XP) ?
- 0 : CS_DROPSHADOW);
- is_mouse_down_ =
- ((GetKeyState(VK_LBUTTON) & 0x80) ||
- (GetKeyState(VK_RBUTTON) & 0x80) ||
- (GetKeyState(VK_MBUTTON) & 0x80) ||
- (GetKeyState(VK_XBUTTON1) & 0x80) ||
- (GetKeyState(VK_XBUTTON2) & 0x80));
- // Mouse clicks shouldn't give us focus.
- set_window_ex_style(WS_EX_TOPMOST | WS_EX_NOACTIVATE);
- }
-
- void Init(HWND parent,
- const gfx::Rect& bounds,
- View* contents_view,
- bool do_capture) {
- WidgetWin::Init(parent, bounds, true);
- SetContentsView(contents_view);
- // We don't want to take focus away from the hosting window.
- ShowWindow(SW_SHOWNA);
- owns_capture_ = do_capture;
- if (do_capture) {
- SetCapture();
- has_capture_ = true;
-#ifdef DEBUG_MENU
- DLOG(INFO) << "Doing capture";
-#endif
- }
- }
-
- virtual void Hide() {
- if (closed_) {
- // We're already closed, nothing to do.
- // This is invoked twice if the first time just hid us, and the second
- // time deleted Closed (deleted) us.
- return;
- }
- // The menus are freed separately, and possibly before the window is closed,
- // remove them so that View doesn't try to access deleted objects.
- static_cast<MenuHostRootView*>(GetRootView())->SuspendEvents();
- GetRootView()->RemoveAllChildViews(false);
- closed_ = true;
- ReleaseCapture();
- WidgetWin::Hide();
- }
-
- virtual void HideWindow() {
- // Make sure we release capture before hiding.
- ReleaseCapture();
- WidgetWin::Hide();
- }
-
- virtual void OnCaptureChanged(HWND hwnd) {
- WidgetWin::OnCaptureChanged(hwnd);
- owns_capture_ = false;
-#ifdef DEBUG_MENU
- DLOG(INFO) << "Capture changed";
-#endif
- }
-
- void ReleaseCapture() {
- if (owns_capture_) {
-#ifdef DEBUG_MENU
- DLOG(INFO) << "released capture";
-#endif
- owns_capture_ = false;
- ::ReleaseCapture();
- }
- }
-
- protected:
- // Overriden to create MenuHostRootView.
- virtual RootView* CreateRootView() {
- return new MenuHostRootView(this, submenu_);
- }
-
- virtual void OnCancelMode() {
- if (!closed_) {
-#ifdef DEBUG_MENU
- DLOG(INFO) << "OnCanceMode, closing menu";
-#endif
- submenu_->GetMenuItem()->GetMenuController()->Cancel(true);
- }
- }
-
- // Overriden to return false, we do NOT want to release capture on mouse
- // release.
- virtual bool ReleaseCaptureOnMouseReleased() {
- return false;
- }
-
- private:
- // If true, we've been closed.
- bool closed_;
-
- // If true, we own the capture and need to release it.
- bool owns_capture_;
-
- // The view we contain.
- SubmenuView* submenu_;
-
- DISALLOW_COPY_AND_ASSIGN(MenuHost);
-};
-
-// EmptyMenuMenuItem ---------------------------------------------------------
-
-// EmptyMenuMenuItem is used when a menu has no menu items. EmptyMenuMenuItem
-// is itself a MenuItemView, but it uses a different ID so that it isn't
-// identified as a MenuItemView.
-
-class EmptyMenuMenuItem : public MenuItemView {
- public:
- // ID used for EmptyMenuMenuItem.
- static const int kEmptyMenuItemViewID;
-
- explicit EmptyMenuMenuItem(MenuItemView* parent) :
- MenuItemView(parent, 0, NORMAL) {
- SetTitle(l10n_util::GetString(IDS_MENU_EMPTY_SUBMENU));
- // Set this so that we're not identified as a normal menu item.
- SetID(kEmptyMenuItemViewID);
- SetEnabled(false);
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(EmptyMenuMenuItem);
-};
-
-// static
-const int EmptyMenuMenuItem::kEmptyMenuItemViewID =
- MenuItemView::kMenuItemViewID + 1;
-
-} // namespace
-
-// SubmenuView ---------------------------------------------------------------
-
-SubmenuView::SubmenuView(MenuItemView* parent)
- : parent_menu_item_(parent),
- host_(NULL),
- drop_item_(NULL),
- drop_position_(MenuDelegate::DROP_NONE),
- scroll_view_container_(NULL) {
- DCHECK(parent);
- // We'll delete ourselves, otherwise the ScrollView would delete us on close.
- SetParentOwned(false);
-}
-
-SubmenuView::~SubmenuView() {
- // The menu may not have been closed yet (it will be hidden, but not
- // necessarily closed).
- Close();
-
- delete scroll_view_container_;
-}
-
-int SubmenuView::GetMenuItemCount() {
- int count = 0;
- for (int i = 0; i < GetChildViewCount(); ++i) {
- if (GetChildViewAt(i)->GetID() == MenuItemView::kMenuItemViewID)
- count++;
- }
- return count;
-}
-
-MenuItemView* SubmenuView::GetMenuItemAt(int index) {
- for (int i = 0, count = 0; i < GetChildViewCount(); ++i) {
- if (GetChildViewAt(i)->GetID() == MenuItemView::kMenuItemViewID &&
- count++ == index) {
- return static_cast<MenuItemView*>(GetChildViewAt(i));
- }
- }
- NOTREACHED();
- return NULL;
-}
-
-void SubmenuView::Layout() {
- // We're in a ScrollView, and need to set our width/height ourselves.
- View* parent = GetParent();
- if (!parent)
- return;
- SetBounds(x(), y(), parent->width(), GetPreferredSize().height());
-
- gfx::Insets insets = GetInsets();
- int x = insets.left();
- int y = insets.top();
- int menu_item_width = width() - insets.width();
- for (int i = 0; i < GetChildViewCount(); ++i) {
- View* child = GetChildViewAt(i);
- gfx::Size child_pref_size = child->GetPreferredSize();
- child->SetBounds(x, y, menu_item_width, child_pref_size.height());
- y += child_pref_size.height();
- }
-}
-
-gfx::Size SubmenuView::GetPreferredSize() {
- if (GetChildViewCount() == 0)
- return gfx::Size();
-
- int max_width = 0;
- int height = 0;
- for (int i = 0; i < GetChildViewCount(); ++i) {
- View* child = GetChildViewAt(i);
- gfx::Size child_pref_size = child->GetPreferredSize();
- max_width = std::max(max_width, child_pref_size.width());
- height += child_pref_size.height();
- }
- gfx::Insets insets = GetInsets();
- return gfx::Size(max_width + insets.width(), height + insets.height());
-}
-
-void SubmenuView::DidChangeBounds(const gfx::Rect& previous,
- const gfx::Rect& current) {
- SchedulePaint();
-}
-
-void SubmenuView::PaintChildren(ChromeCanvas* canvas) {
- View::PaintChildren(canvas);
-
- if (drop_item_ && drop_position_ != MenuDelegate::DROP_ON)
- PaintDropIndicator(canvas, drop_item_, drop_position_);
-}
-
-bool SubmenuView::CanDrop(const OSExchangeData& data) {
- DCHECK(GetMenuItem()->GetMenuController());
- return GetMenuItem()->GetMenuController()->CanDrop(this, data);
-}
-
-void SubmenuView::OnDragEntered(const DropTargetEvent& event) {
- DCHECK(GetMenuItem()->GetMenuController());
- GetMenuItem()->GetMenuController()->OnDragEntered(this, event);
-}
-
-int SubmenuView::OnDragUpdated(const DropTargetEvent& event) {
- DCHECK(GetMenuItem()->GetMenuController());
- return GetMenuItem()->GetMenuController()->OnDragUpdated(this, event);
-}
-
-void SubmenuView::OnDragExited() {
- DCHECK(GetMenuItem()->GetMenuController());
- GetMenuItem()->GetMenuController()->OnDragExited(this);
-}
-
-int SubmenuView::OnPerformDrop(const DropTargetEvent& event) {
- DCHECK(GetMenuItem()->GetMenuController());
- return GetMenuItem()->GetMenuController()->OnPerformDrop(this, event);
-}
-
-bool SubmenuView::OnMouseWheel(const MouseWheelEvent& e) {
- gfx::Rect vis_bounds = GetVisibleBounds();
- int menu_item_count = GetMenuItemCount();
- if (vis_bounds.height() == height() || !menu_item_count) {
- // All menu items are visible, nothing to scroll.
- return true;
- }
-
- // Find the index of the first menu item whose y-coordinate is >= visible
- // y-coordinate.
- int first_vis_index = -1;
- for (int i = 0; i < menu_item_count; ++i) {
- MenuItemView* menu_item = GetMenuItemAt(i);
- if (menu_item->y() == vis_bounds.y()) {
- first_vis_index = i;
- break;
- } else if (menu_item->y() > vis_bounds.y()) {
- first_vis_index = std::max(0, i - 1);
- break;
- }
- }
- if (first_vis_index == -1)
- return true;
-
- // If the first item isn't entirely visible, make it visible, otherwise make
- // the next/previous one entirely visible.
- int delta = abs(e.GetOffset() / WHEEL_DELTA);
- bool scroll_up = (e.GetOffset() > 0);
- while (delta-- > 0) {
- int scroll_amount = 0;
- if (scroll_up) {
- if (GetMenuItemAt(first_vis_index)->y() == vis_bounds.y()) {
- if (first_vis_index != 0) {
- scroll_amount = GetMenuItemAt(first_vis_index - 1)->y() -
- vis_bounds.y();
- first_vis_index--;
- } else {
- break;
- }
- } else {
- scroll_amount = GetMenuItemAt(first_vis_index)->y() - vis_bounds.y();
- }
- } else {
- if (first_vis_index + 1 == GetMenuItemCount())
- break;
- scroll_amount = GetMenuItemAt(first_vis_index + 1)->y() -
- vis_bounds.y();
- if (GetMenuItemAt(first_vis_index)->y() == vis_bounds.y())
- first_vis_index++;
- }
- ScrollRectToVisible(0, vis_bounds.y() + scroll_amount, vis_bounds.width(),
- vis_bounds.height());
- vis_bounds = GetVisibleBounds();
- }
-
- return true;
-}
-
-bool SubmenuView::IsShowing() {
- return host_ && host_->IsVisible();
-}
-
-void SubmenuView::ShowAt(HWND parent,
- const gfx::Rect& bounds,
- bool do_capture) {
- if (host_) {
- host_->ShowWindow(SW_SHOWNA);
- return;
- }
-
- host_ = new MenuHost(this);
- // Force construction of the scroll view container.
- GetScrollViewContainer();
- // Make sure the first row is visible.
- ScrollRectToVisible(0, 0, 1, 1);
- host_->Init(parent, bounds, scroll_view_container_, do_capture);
-}
-
-void SubmenuView::Close() {
- if (host_) {
- host_->Close();
- host_ = NULL;
- }
-}
-
-void SubmenuView::Hide() {
- if (host_)
- host_->HideWindow();
-}
-
-void SubmenuView::ReleaseCapture() {
- host_->ReleaseCapture();
-}
-
-void SubmenuView::SetDropMenuItem(MenuItemView* item,
- MenuDelegate::DropPosition position) {
- if (drop_item_ == item && drop_position_ == position)
- return;
- SchedulePaintForDropIndicator(drop_item_, drop_position_);
- drop_item_ = item;
- drop_position_ = position;
- SchedulePaintForDropIndicator(drop_item_, drop_position_);
-}
-
-bool SubmenuView::GetShowSelection(MenuItemView* item) {
- if (drop_item_ == NULL)
- return true;
- // Something is being dropped on one of this menus items. Show the
- // selection if the drop is on the passed in item and the drop position is
- // ON.
- return (drop_item_ == item && drop_position_ == MenuDelegate::DROP_ON);
-}
-
-MenuScrollViewContainer* SubmenuView::GetScrollViewContainer() {
- if (!scroll_view_container_) {
- scroll_view_container_ = new MenuScrollViewContainer(this);
- // Otherwise MenuHost would delete us.
- scroll_view_container_->SetParentOwned(false);
- }
- return scroll_view_container_;
-}
-
-void SubmenuView::PaintDropIndicator(ChromeCanvas* canvas,
- MenuItemView* item,
- MenuDelegate::DropPosition position) {
- if (position == MenuDelegate::DROP_NONE)
- return;
-
- gfx::Rect bounds = CalculateDropIndicatorBounds(item, position);
- canvas->FillRectInt(kDropIndicatorColor, bounds.x(), bounds.y(),
- bounds.width(), bounds.height());
-}
-
-void SubmenuView::SchedulePaintForDropIndicator(
- MenuItemView* item,
- MenuDelegate::DropPosition position) {
- if (item == NULL)
- return;
-
- if (position == MenuDelegate::DROP_ON) {
- item->SchedulePaint();
- } else if (position != MenuDelegate::DROP_NONE) {
- gfx::Rect bounds = CalculateDropIndicatorBounds(item, position);
- SchedulePaint(bounds.x(), bounds.y(), bounds.width(), bounds.height());
- }
-}
-
-gfx::Rect SubmenuView::CalculateDropIndicatorBounds(
- MenuItemView* item,
- MenuDelegate::DropPosition position) {
- DCHECK(position != MenuDelegate::DROP_NONE);
- gfx::Rect item_bounds = item->bounds();
- switch (position) {
- case MenuDelegate::DROP_BEFORE:
- item_bounds.Offset(0, -kDropIndicatorHeight / 2);
- item_bounds.set_height(kDropIndicatorHeight);
- return item_bounds;
-
- case MenuDelegate::DROP_AFTER:
- item_bounds.Offset(0, item_bounds.height() - kDropIndicatorHeight / 2);
- item_bounds.set_height(kDropIndicatorHeight);
- return item_bounds;
-
- default:
- // Don't render anything for on.
- return gfx::Rect();
- }
-}
-
-// MenuItemView ---------------------------------------------------------------
-
-// static
-const int MenuItemView::kMenuItemViewID = 1001;
-
-// static
-bool MenuItemView::allow_task_nesting_during_run_ = false;
-
-MenuItemView::MenuItemView(MenuDelegate* delegate) {
- // NOTE: don't check the delegate for NULL, UpdateMenuPartSizes supplies a
- // NULL delegate.
- Init(NULL, 0, SUBMENU, delegate);
-}
-
-MenuItemView::~MenuItemView() {
- if (controller_) {
- // We're currently showing.
-
- // We can't delete ourselves while we're blocking.
- DCHECK(!controller_->IsBlockingRun());
-
- // Invoking Cancel is going to call us back and notify the delegate.
- // Notifying the delegate from the destructor can be problematic. To avoid
- // this the delegate is set to NULL.
- delegate_ = NULL;
-
- controller_->Cancel(true);
- }
- delete submenu_;
-}
-
-void MenuItemView::RunMenuAt(HWND parent,
- const gfx::Rect& bounds,
- AnchorPosition anchor,
- bool has_mnemonics) {
- PrepareForRun(has_mnemonics);
-
- int mouse_event_flags;
-
- MenuController* controller = MenuController::GetActiveInstance();
- if (controller && !controller->IsBlockingRun()) {
- // A menu is already showing, but it isn't a blocking menu. Cancel it.
- // We can get here during drag and drop if the user right clicks on the
- // menu quickly after the drop.
- controller->Cancel(true);
- controller = NULL;
- }
- bool owns_controller = false;
- if (!controller) {
- // No menus are showing, show one.
- controller = new MenuController(true);
- MenuController::SetActiveInstance(controller);
- owns_controller = true;
- } else {
- // A menu is already showing, use the same controller.
-
- // Don't support blocking from within non-blocking.
- DCHECK(controller->IsBlockingRun());
- }
-
- controller_ = controller;
-
- // Run the loop.
- MenuItemView* result =
- controller->Run(parent, this, bounds, anchor, &mouse_event_flags);
-
- RemoveEmptyMenus();
-
- controller_ = NULL;
-
- if (owns_controller) {
- // We created the controller and need to delete it.
- if (MenuController::GetActiveInstance() == controller)
- MenuController::SetActiveInstance(NULL);
- delete controller;
- }
- // Make sure all the windows we created to show the menus have been
- // destroyed.
- DestroyAllMenuHosts();
- if (result && delegate_)
- delegate_->ExecuteCommand(result->GetCommand(), mouse_event_flags);
-}
-
-void MenuItemView::RunMenuForDropAt(HWND parent,
- const gfx::Rect& bounds,
- AnchorPosition anchor) {
- PrepareForRun(false);
-
- // If there is a menu, hide it so that only one menu is shown during dnd.
- MenuController* current_controller = MenuController::GetActiveInstance();
- if (current_controller) {
- current_controller->Cancel(true);
- }
-
- // Always create a new controller for non-blocking.
- controller_ = new MenuController(false);
-
- // Set the instance, that way it can be canceled by another menu.
- MenuController::SetActiveInstance(controller_);
-
- controller_->Run(parent, this, bounds, anchor, NULL);
-}
-
-void MenuItemView::Cancel() {
- if (controller_ && !canceled_) {
- canceled_ = true;
- controller_->Cancel(true);
- }
-}
-
-SubmenuView* MenuItemView::CreateSubmenu() {
- if (!submenu_)
- submenu_ = new SubmenuView(this);
- return submenu_;
-}
-
-void MenuItemView::SetSelected(bool selected) {
- selected_ = selected;
- SchedulePaint();
-}
-
-void MenuItemView::SetIcon(const SkBitmap& icon, int item_id) {
- MenuItemView* item = GetDescendantByID(item_id);
- DCHECK(item);
- item->SetIcon(icon);
-}
-
-void MenuItemView::SetIcon(const SkBitmap& icon) {
- icon_ = icon;
- SchedulePaint();
-}
-
-void MenuItemView::Paint(ChromeCanvas* canvas) {
- Paint(canvas, false);
-}
-
-gfx::Size MenuItemView::GetPreferredSize() {
- ChromeFont& font = GetRootMenuItem()->font_;
- return gfx::Size(
- font.GetStringWidth(title_) + label_start + item_right_margin,
- font.height() + GetBottomMargin() + GetTopMargin());
-}
-
-MenuController* MenuItemView::GetMenuController() {
- return GetRootMenuItem()->controller_;
-}
-
-MenuDelegate* MenuItemView::GetDelegate() {
- return GetRootMenuItem()->delegate_;
-}
-
-MenuItemView* MenuItemView::GetRootMenuItem() {
- MenuItemView* item = this;
- while (item) {
- MenuItemView* parent = item->GetParentMenuItem();
- if (!parent)
- return item;
- item = parent;
- }
- NOTREACHED();
- return NULL;
-}
-
-wchar_t MenuItemView::GetMnemonic() {
- if (!has_mnemonics_)
- return 0;
-
- const std::wstring& title = GetTitle();
- size_t index = 0;
- do {
- index = title.find('&', index);
- if (index != std::wstring::npos) {
- if (index + 1 != title.size() && title[index + 1] != '&')
- return title[index + 1];
- index++;
- }
- } while (index != std::wstring::npos);
- return 0;
-}
-
-MenuItemView::MenuItemView(MenuItemView* parent,
- int command,
- MenuItemView::Type type) {
- Init(parent, command, type, NULL);
-}
-
-void MenuItemView::Init(MenuItemView* parent,
- int command,
- MenuItemView::Type type,
- MenuDelegate* delegate) {
- delegate_ = delegate;
- controller_ = NULL;
- canceled_ = false;
- parent_menu_item_ = parent;
- type_ = type;
- selected_ = false;
- command_ = command;
- submenu_ = NULL;
- // Assign our ID, this allows SubmenuItemView to find MenuItemViews.
- SetID(kMenuItemViewID);
- has_icons_ = false;
-
- MenuDelegate* root_delegate = GetDelegate();
- if (root_delegate)
- SetEnabled(root_delegate->IsCommandEnabled(command));
-}
-
-MenuItemView* MenuItemView::AppendMenuItemInternal(int item_id,
- const std::wstring& label,
- const SkBitmap& icon,
- Type type) {
- if (!submenu_)
- CreateSubmenu();
- if (type == SEPARATOR) {
- submenu_->AddChildView(new MenuSeparator());
- return NULL;
- }
- MenuItemView* item = new MenuItemView(this, item_id, type);
- if (label.empty() && GetDelegate())
- item->SetTitle(GetDelegate()->GetLabel(item_id));
- else
- item->SetTitle(label);
- item->SetIcon(icon);
- if (type == SUBMENU)
- item->CreateSubmenu();
- submenu_->AddChildView(item);
- return item;
-}
-
-MenuItemView* MenuItemView::GetDescendantByID(int id) {
- if (GetCommand() == id)
- return this;
- if (!HasSubmenu())
- return NULL;
- for (int i = 0; i < GetSubmenu()->GetChildViewCount(); ++i) {
- View* child = GetSubmenu()->GetChildViewAt(i);
- if (child->GetID() == MenuItemView::kMenuItemViewID) {
- MenuItemView* result = static_cast<MenuItemView*>(child)->
- GetDescendantByID(id);
- if (result)
- return result;
- }
- }
- return NULL;
-}
-
-void MenuItemView::DropMenuClosed(bool notify_delegate) {
- DCHECK(controller_);
- DCHECK(!controller_->IsBlockingRun());
- if (MenuController::GetActiveInstance() == controller_)
- MenuController::SetActiveInstance(NULL);
- delete controller_;
- controller_ = NULL;
-
- RemoveEmptyMenus();
-
- if (notify_delegate && delegate_) {
- // Our delegate is null when invoked from the destructor.
- delegate_->DropMenuClosed(this);
- }
- // WARNING: its possible the delegate deleted us at this point.
-}
-
-void MenuItemView::PrepareForRun(bool has_mnemonics) {
- // Currently we only support showing the root.
- DCHECK(!parent_menu_item_);
-
- // Don't invoke run from within run on the same menu.
- DCHECK(!controller_);
-
- // Force us to have a submenu.
- CreateSubmenu();
-
- canceled_ = false;
-
- has_mnemonics_ = has_mnemonics;
-
- AddEmptyMenus();
-
- if (!MenuController::GetActiveInstance()) {
- // Only update the menu size if there are no menus showing, otherwise
- // things may shift around.
- UpdateMenuPartSizes(has_icons_);
- }
-
- font_ = GetMenuFont();
-
- BOOL show_cues;
- show_mnemonics =
- (SystemParametersInfo(SPI_GETKEYBOARDCUES, 0, &show_cues, 0) &&
- show_cues == TRUE);
-}
-
-int MenuItemView::GetDrawStringFlags() {
- int flags = 0;
- if (UILayoutIsRightToLeft())
- flags |= ChromeCanvas::TEXT_ALIGN_RIGHT;
- else
- flags |= ChromeCanvas::TEXT_ALIGN_LEFT;
-
- if (has_mnemonics_) {
- if (show_mnemonics)
- flags |= ChromeCanvas::SHOW_PREFIX;
- else
- flags |= ChromeCanvas::HIDE_PREFIX;
- }
- return flags;
-}
-
-void MenuItemView::AddEmptyMenus() {
- DCHECK(HasSubmenu());
- if (submenu_->GetChildViewCount() == 0) {
- submenu_->AddChildView(0, new EmptyMenuMenuItem(this));
- } else {
- for (int i = 0, item_count = submenu_->GetMenuItemCount(); i < item_count;
- ++i) {
- MenuItemView* child = submenu_->GetMenuItemAt(i);
- if (child->HasSubmenu())
- child->AddEmptyMenus();
- }
- }
-}
-
-void MenuItemView::RemoveEmptyMenus() {
- DCHECK(HasSubmenu());
- // Iterate backwards as we may end up removing views, which alters the child
- // view count.
- for (int i = submenu_->GetChildViewCount() - 1; i >= 0; --i) {
- View* child = submenu_->GetChildViewAt(i);
- if (child->GetID() == MenuItemView::kMenuItemViewID) {
- MenuItemView* menu_item = static_cast<MenuItemView*>(child);
- if (menu_item->HasSubmenu())
- menu_item->RemoveEmptyMenus();
- } else if (child->GetID() == EmptyMenuMenuItem::kEmptyMenuItemViewID) {
- submenu_->RemoveChildView(child);
- }
- }
-}
-
-void MenuItemView::AdjustBoundsForRTLUI(RECT* rect) const {
- gfx::Rect mirrored_rect(*rect);
- mirrored_rect.set_x(MirroredLeftPointForRect(mirrored_rect));
- *rect = mirrored_rect.ToRECT();
-}
-
-void MenuItemView::Paint(ChromeCanvas* canvas, bool for_drag) {
- bool render_selection =
- (!for_drag && IsSelected() &&
- parent_menu_item_->GetSubmenu()->GetShowSelection(this));
- int state = render_selection ? MPI_HOT :
- (IsEnabled() ? MPI_NORMAL : MPI_DISABLED);
- HDC dc = canvas->beginPlatformPaint();
-
- // The gutter is rendered before the background.
- if (render_gutter && !for_drag) {
- RECT gutter_bounds = { label_start - kGutterToLabel - gutter_width, 0, 0,
- height() };
- gutter_bounds.right = gutter_bounds.left + gutter_width;
- AdjustBoundsForRTLUI(&gutter_bounds);
- NativeTheme::instance()->PaintMenuGutter(dc, MENU_POPUPGUTTER, MPI_NORMAL,
- &gutter_bounds);
- }
-
- // Render the background.
- if (!for_drag) {
- RECT item_bounds = { 0, 0, width(), height() };
- AdjustBoundsForRTLUI(&item_bounds);
- NativeTheme::instance()->PaintMenuItemBackground(
- NativeTheme::MENU, dc, MENU_POPUPITEM, state, render_selection,
- &item_bounds);
- }
-
- int icon_x = kItemLeftMargin;
- int top_margin = GetTopMargin();
- int bottom_margin = GetBottomMargin();
- int icon_y = top_margin + (height() - kItemTopMargin -
- bottom_margin - check_height) / 2;
- int icon_height = check_height;
- int icon_width = check_width;
-
- if (type_ == CHECKBOX && GetDelegate()->IsItemChecked(GetCommand())) {
- // Draw the check background.
- RECT check_bg_bounds = { 0, 0, icon_x + icon_width, height() };
- const int bg_state = IsEnabled() ? MCB_NORMAL : MCB_DISABLED;
- AdjustBoundsForRTLUI(&check_bg_bounds);
- NativeTheme::instance()->PaintMenuCheckBackground(
- NativeTheme::MENU, dc, MENU_POPUPCHECKBACKGROUND, bg_state,
- &check_bg_bounds);
-
- // And the check.
- RECT check_bounds = { icon_x, icon_y, icon_x + icon_width,
- icon_y + icon_height };
- const int check_state = IsEnabled() ? MC_CHECKMARKNORMAL :
- MC_CHECKMARKDISABLED;
- AdjustBoundsForRTLUI(&check_bounds);
- NativeTheme::instance()->PaintMenuCheck(
- NativeTheme::MENU, dc, MENU_POPUPCHECK, check_state, &check_bounds,
- render_selection);
- }
-
- // Render the foreground.
- // Menu color is specific to Vista, fallback to classic colors if can't
- // get color.
- int default_sys_color = render_selection ? COLOR_HIGHLIGHTTEXT :
- (IsEnabled() ? COLOR_MENUTEXT : COLOR_GRAYTEXT);
- SkColor fg_color = NativeTheme::instance()->GetThemeColorWithDefault(
- NativeTheme::MENU, MENU_POPUPITEM, state, TMT_TEXTCOLOR,
- default_sys_color);
- int width = this->width() - item_right_margin - label_start;
- ChromeFont& font = GetRootMenuItem()->font_;
- gfx::Rect text_bounds(label_start, top_margin, width, font.height());
- text_bounds.set_x(MirroredLeftPointForRect(text_bounds));
- if (for_drag) {
- // With different themes, it's difficult to tell what the correct foreground
- // and background colors are for the text to draw the correct halo. Instead,
- // just draw black on white, which will look good in most cases.
- canvas->DrawStringWithHalo(GetTitle(), font, 0x00000000, 0xFFFFFFFF,
- text_bounds.x(), text_bounds.y(),
- text_bounds.width(), text_bounds.height(),
- GetRootMenuItem()->GetDrawStringFlags());
- } else {
- canvas->DrawStringInt(GetTitle(), font, fg_color,
- text_bounds.x(), text_bounds.y(), text_bounds.width(),
- text_bounds.height(),
- GetRootMenuItem()->GetDrawStringFlags());
- }
-
- if (icon_.width() > 0) {
- gfx::Rect icon_bounds(kItemLeftMargin,
- top_margin + (height() - top_margin -
- bottom_margin - icon_.height()) / 2,
- icon_.width(),
- icon_.height());
- icon_bounds.set_x(MirroredLeftPointForRect(icon_bounds));
- canvas->DrawBitmapInt(icon_, icon_bounds.x(), icon_bounds.y());
- }
-
- if (HasSubmenu()) {
- int state_id = IsEnabled() ? MSM_NORMAL : MSM_DISABLED;
- RECT arrow_bounds = {
- this->width() - item_right_margin + kLabelToArrowPadding,
- 0,
- 0,
- height()
- };
- arrow_bounds.right = arrow_bounds.left + arrow_width;
- AdjustBoundsForRTLUI(&arrow_bounds);
-
- // If our sub menus open from right to left (which is the case when the
- // locale is RTL) then we should make sure the menu arrow points to the
- // right direction.
- NativeTheme::MenuArrowDirection arrow_direction;
- if (UILayoutIsRightToLeft())
- arrow_direction = NativeTheme::LEFT_POINTING_ARROW;
- else
- arrow_direction = NativeTheme::RIGHT_POINTING_ARROW;
-
- NativeTheme::instance()->PaintMenuArrow(
- NativeTheme::MENU, dc, MENU_POPUPSUBMENU, state_id, &arrow_bounds,
- arrow_direction, render_selection);
- }
- canvas->endPlatformPaint();
-}
-
-void MenuItemView::DestroyAllMenuHosts() {
- if (!HasSubmenu())
- return;
-
- submenu_->Close();
- for (int i = 0, item_count = submenu_->GetMenuItemCount(); i < item_count;
- ++i) {
- submenu_->GetMenuItemAt(i)->DestroyAllMenuHosts();
- }
-}
-
-int MenuItemView::GetTopMargin() {
- MenuItemView* root = GetRootMenuItem();
- return root && root->has_icons_ ? kItemTopMargin : kItemNoIconTopMargin;
-}
-
-int MenuItemView::GetBottomMargin() {
- MenuItemView* root = GetRootMenuItem();
- return root && root->has_icons_ ?
- kItemBottomMargin : kItemNoIconBottomMargin;
-}
-
-// MenuController ------------------------------------------------------------
-
-// static
-MenuController* MenuController::active_instance_ = NULL;
-
-// static
-MenuController* MenuController::GetActiveInstance() {
- return active_instance_;
-}
-
-#ifdef DEBUG_MENU
-static int instance_count = 0;
-static int nested_depth = 0;
-#endif
-
-MenuItemView* MenuController::Run(HWND parent,
- MenuItemView* root,
- const gfx::Rect& bounds,
- MenuItemView::AnchorPosition position,
- int* result_mouse_event_flags) {
- exit_all_ = false;
- possible_drag_ = false;
-
- bool nested_menu = showing_;
- if (showing_) {
- // Only support nesting of blocking_run menus, nesting of
- // blocking/non-blocking shouldn't be needed.
- DCHECK(blocking_run_);
-
- // We're already showing, push the current state.
- menu_stack_.push_back(state_);
-
- // The context menu should be owned by the same parent.
- DCHECK(owner_ == parent);
- } else {
- showing_ = true;
- }
-
- // Reset current state.
- pending_state_ = State();
- state_ = State();
- pending_state_.initial_bounds = bounds;
- if (bounds.height() > 1) {
- // Inset the bounds slightly, otherwise drag coordinates don't line up
- // nicely and menus close prematurely.
- pending_state_.initial_bounds.Inset(0, 1);
- }
- pending_state_.anchor = position;
- owner_ = parent;
-
- // Calculate the bounds of the monitor we'll show menus on. Do this once to
- // avoid repeated system queries for the info.
- POINT initial_loc = { bounds.x(), bounds.y() };
- HMONITOR monitor = MonitorFromPoint(initial_loc, MONITOR_DEFAULTTONEAREST);
- if (monitor) {
- MONITORINFO mi = {0};
- mi.cbSize = sizeof(mi);
- GetMonitorInfo(monitor, &mi);
- // Menus appear over the taskbar.
- pending_state_.monitor_bounds = gfx::Rect(mi.rcMonitor);
- }
-
- // Set the selection, which opens the initial menu.
- SetSelection(root, true, true);
-
- if (!blocking_run_) {
- // Start the timer to hide the menu. This is needed as we get no
- // notification when the drag has finished.
- StartCancelAllTimer();
- return NULL;
- }
-
-#ifdef DEBUG_MENU
- nested_depth++;
- DLOG(INFO) << " entering nested loop, depth=" << nested_depth;
-#endif
-
- MessageLoopForUI* loop = MessageLoopForUI::current();
- if (MenuItemView::allow_task_nesting_during_run_) {
- bool did_allow_task_nesting = loop->NestableTasksAllowed();
- loop->SetNestableTasksAllowed(true);
- loop->Run(this);
- loop->SetNestableTasksAllowed(did_allow_task_nesting);
- } else {
- loop->Run(this);
- }
-
-#ifdef DEBUG_MENU
- nested_depth--;
- DLOG(INFO) << " exiting nested loop, depth=" << nested_depth;
-#endif
-
- // Close any open menus.
- SetSelection(NULL, false, true);
-
- if (nested_menu) {
- DCHECK(!menu_stack_.empty());
- // We're running from within a menu, restore the previous state.
- // The menus are already showing, so we don't have to show them.
- state_ = menu_stack_.back();
- pending_state_ = menu_stack_.back();
- menu_stack_.pop_back();
- } else {
- showing_ = false;
- did_capture_ = false;
- }
-
- MenuItemView* result = result_;
- // In case we're nested, reset result_.
- result_ = NULL;
-
- if (result_mouse_event_flags)
- *result_mouse_event_flags = result_mouse_event_flags_;
-
- if (nested_menu && result) {
- // We're nested and about to return a value. The caller might enter another
- // blocking loop. We need to make sure all menus are hidden before that
- // happens otherwise the menus will stay on screen.
- CloseAllNestedMenus();
-
- // Set exit_all_ to true, which makes sure all nested loops exit
- // immediately.
- exit_all_ = true;
- }
-
- return result;
-}
-
-void MenuController::SetSelection(MenuItemView* menu_item,
- bool open_submenu,
- bool update_immediately) {
- size_t paths_differ_at = 0;
- std::vector<MenuItemView*> current_path;
- std::vector<MenuItemView*> new_path;
- BuildPathsAndCalculateDiff(pending_state_.item, menu_item, &current_path,
- &new_path, &paths_differ_at);
-
- size_t current_size = current_path.size();
- size_t new_size = new_path.size();
-
- // Notify the old path it isn't selected.
- for (size_t i = paths_differ_at; i < current_size; ++i)
- current_path[i]->SetSelected(false);
-
- // Notify the new path it is selected.
- for (size_t i = paths_differ_at; i < new_size; ++i)
- new_path[i]->SetSelected(true);
-
- if (menu_item && menu_item->GetDelegate())
- menu_item->GetDelegate()->SelectionChanged(menu_item);
-
- pending_state_.item = menu_item;
- pending_state_.submenu_open = open_submenu;
-
- // Stop timers.
- StopShowTimer();
- StopCancelAllTimer();
-
- if (update_immediately)
- CommitPendingSelection();
- else
- StartShowTimer();
-}
-
-void MenuController::Cancel(bool all) {
- if (!showing_) {
- // This occurs if we're in the process of notifying the delegate for a drop
- // and the delegate cancels us.
- return;
- }
-
- MenuItemView* selected = state_.item;
- exit_all_ = all;
-
- // Hide windows immediately.
- SetSelection(NULL, false, true);
-
- if (!blocking_run_) {
- // If we didn't block the caller we need to notify the menu, which
- // triggers deleting us.
- DCHECK(selected);
- showing_ = false;
- selected->GetRootMenuItem()->DropMenuClosed(true);
- // WARNING: the call to MenuClosed deletes us.
- return;
- }
-}
-
-void MenuController::OnMousePressed(SubmenuView* source,
- const MouseEvent& event) {
-#ifdef DEBUG_MENU
- DLOG(INFO) << "OnMousePressed source=" << source;
-#endif
- if (!blocking_run_)
- return;
-
- MenuPart part =
- GetMenuPartByScreenCoordinate(source, event.x(), event.y());
- if (part.is_scroll())
- return; // Ignore presses on scroll buttons.
-
- if (part.type == MenuPart::NONE ||
- (part.type == MenuPart::MENU_ITEM && part.menu &&
- part.menu->GetRootMenuItem() != state_.item->GetRootMenuItem())) {
- // Mouse wasn't pressed over any menu, or the active menu, cancel.
-
- // We're going to close and we own the mouse capture. We need to repost the
- // mouse down, otherwise the window the user clicked on won't get the
- // event.
- RepostEvent(source, event);
-
- // And close.
- Cancel(true);
- return;
- }
-
- bool open_submenu = false;
- if (!part.menu) {
- part.menu = source->GetMenuItem();
- open_submenu = true;
- } else {
- if (part.menu->GetDelegate()->CanDrag(part.menu)) {
- possible_drag_ = true;
- press_x_ = event.x();
- press_y_ = event.y();
- }
- if (part.menu->HasSubmenu())
- open_submenu = true;
- }
- // On a press we immediately commit the selection, that way a submenu
- // pops up immediately rather than after a delay.
- SetSelection(part.menu, open_submenu, true);
-}
-
-void MenuController::OnMouseDragged(SubmenuView* source,
- const MouseEvent& event) {
-#ifdef DEBUG_MENU
- DLOG(INFO) << "OnMouseDragged source=" << source;
-#endif
- MenuPart part =
- GetMenuPartByScreenCoordinate(source, event.x(), event.y());
- UpdateScrolling(part);
-
- if (!blocking_run_)
- return;
-
- if (possible_drag_) {
- if (View::ExceededDragThreshold(event.x() - press_x_,
- event.y() - press_y_)) {
- MenuItemView* item = state_.item;
- DCHECK(item);
- // Points are in the coordinates of the submenu, need to map to that of
- // the selected item. Additionally source may not be the parent of
- // the selected item, so need to map to screen first then to item.
- gfx::Point press_loc(press_x_, press_y_);
- View::ConvertPointToScreen(source->GetScrollViewContainer(), &press_loc);
- View::ConvertPointToView(NULL, item, &press_loc);
- gfx::Point drag_loc(event.location());
- View::ConvertPointToScreen(source->GetScrollViewContainer(), &drag_loc);
- View::ConvertPointToView(NULL, item, &drag_loc);
- ChromeCanvas canvas(item->width(), item->height(), false);
- item->Paint(&canvas, true);
-
- scoped_refptr<OSExchangeData> data(new OSExchangeData);
- item->GetDelegate()->WriteDragData(item, data.get());
- drag_utils::SetDragImageOnDataObject(canvas, item->width(),
- item->height(), press_loc.x(),
- press_loc.y(), data);
-
- scoped_refptr<BaseDragSource> drag_source(new BaseDragSource);
- int drag_ops = item->GetDelegate()->GetDragOperations(item);
- DWORD effects;
- StopScrolling();
- DoDragDrop(data, drag_source,
- DragDropTypes::DragOperationToDropEffect(drag_ops),
- &effects);
- if (GetActiveInstance() == this) {
- if (showing_) {
- // We're still showing, close all menus.
- CloseAllNestedMenus();
- Cancel(true);
- } // else case, drop was on us.
- } // else case, someone canceled us, don't do anything
- }
- return;
- }
- if (part.type == MenuPart::MENU_ITEM) {
- if (!part.menu)
- part.menu = source->GetMenuItem();
- SetSelection(part.menu ? part.menu : state_.item, true, false);
- }
-}
-
-void MenuController::OnMouseReleased(SubmenuView* source,
- const MouseEvent& event) {
-#ifdef DEBUG_MENU
- DLOG(INFO) << "OnMouseReleased source=" << source;
-#endif
- if (!blocking_run_)
- return;
-
- DCHECK(state_.item);
- possible_drag_ = false;
- DCHECK(blocking_run_);
- MenuPart part =
- GetMenuPartByScreenCoordinate(source, event.x(), event.y());
- if (event.IsRightMouseButton() && (part.type == MenuPart::MENU_ITEM &&
- part.menu)) {
- // Set the selection immediately, making sure the submenu is only open
- // if it already was.
- bool open_submenu = (state_.item == pending_state_.item &&
- state_.submenu_open);
- SetSelection(pending_state_.item, open_submenu, true);
- gfx::Point loc(event.location());
- View::ConvertPointToScreen(source->GetScrollViewContainer(), &loc);
-
- // If we open a context menu just return now
- if (part.menu->GetDelegate()->ShowContextMenu(
- part.menu, part.menu->GetCommand(), loc.x(), loc.y(), true))
- return;
- }
-
- if (!part.is_scroll() && part.menu && !part.menu->HasSubmenu()) {
- if (part.menu->GetDelegate()->IsTriggerableEvent(event)) {
- Accept(part.menu, event.GetFlags());
- return;
- }
- } else if (part.type == MenuPart::MENU_ITEM) {
- // User either clicked on empty space, or a menu that has children.
- SetSelection(part.menu ? part.menu : state_.item, true, true);
- }
-}
-
-void MenuController::OnMouseMoved(SubmenuView* source,
- const MouseEvent& event) {
-#ifdef DEBUG_MENU
- DLOG(INFO) << "OnMouseMoved source=" << source;
-#endif
- if (showing_submenu_)
- return;
-
- MenuPart part =
- GetMenuPartByScreenCoordinate(source, event.x(), event.y());
-
- UpdateScrolling(part);
-
- if (!blocking_run_)
- return;
-
- if (part.type == MenuPart::MENU_ITEM && part.menu) {
- SetSelection(part.menu, true, false);
- } else if (!part.is_scroll() && pending_state_.item &&
- (!pending_state_.item->HasSubmenu() ||
- !pending_state_.item->GetSubmenu()->IsShowing())) {
- // On exit if the user hasn't selected an item with a submenu, move the
- // selection back to the parent menu item.
- SetSelection(pending_state_.item->GetParentMenuItem(), true, false);
- }
-}
-
-void MenuController::OnMouseEntered(SubmenuView* source,
- const MouseEvent& event) {
- // MouseEntered is always followed by a mouse moved, so don't need to
- // do anything here.
-}
-
-bool MenuController::CanDrop(SubmenuView* source, const OSExchangeData& data) {
- return source->GetMenuItem()->GetDelegate()->CanDrop(source->GetMenuItem(),
- data);
-}
-
-void MenuController::OnDragEntered(SubmenuView* source,
- const DropTargetEvent& event) {
- valid_drop_coordinates_ = false;
-}
-
-int MenuController::OnDragUpdated(SubmenuView* source,
- const DropTargetEvent& event) {
- StopCancelAllTimer();
-
- gfx::Point screen_loc(event.location());
- View::ConvertPointToScreen(source, &screen_loc);
- if (valid_drop_coordinates_ && screen_loc.x() == drop_x_ &&
- screen_loc.y() == drop_y_) {
- return last_drop_operation_;
- }
- drop_x_ = screen_loc.x();
- drop_y_ = screen_loc.y();
- valid_drop_coordinates_ = true;
-
- MenuItemView* menu_item = GetMenuItemAt(source, event.x(), event.y());
- bool over_empty_menu = false;
- if (!menu_item) {
- // See if we're over an empty menu.
- menu_item = GetEmptyMenuItemAt(source, event.x(), event.y());
- if (menu_item)
- over_empty_menu = true;
- }
- MenuDelegate::DropPosition drop_position = MenuDelegate::DROP_NONE;
- int drop_operation = DragDropTypes::DRAG_NONE;
- if (menu_item) {
- gfx::Point menu_item_loc(event.location());
- View::ConvertPointToView(source, menu_item, &menu_item_loc);
- MenuItemView* query_menu_item;
- if (!over_empty_menu) {
- int menu_item_height = menu_item->height();
- if (menu_item->HasSubmenu() &&
- (menu_item_loc.y() > kDropBetweenPixels &&
- menu_item_loc.y() < (menu_item_height - kDropBetweenPixels))) {
- drop_position = MenuDelegate::DROP_ON;
- } else if (menu_item_loc.y() < menu_item_height / 2) {
- drop_position = MenuDelegate::DROP_BEFORE;
- } else {
- drop_position = MenuDelegate::DROP_AFTER;
- }
- query_menu_item = menu_item;
- } else {
- query_menu_item = menu_item->GetParentMenuItem();
- drop_position = MenuDelegate::DROP_ON;
- }
- drop_operation = menu_item->GetDelegate()->GetDropOperation(
- query_menu_item, event, &drop_position);
-
- if (menu_item->HasSubmenu()) {
- // The menu has a submenu, schedule the submenu to open.
- SetSelection(menu_item, true, false);
- } else {
- SetSelection(menu_item, false, false);
- }
-
- if (drop_position == MenuDelegate::DROP_NONE ||
- drop_operation == DragDropTypes::DRAG_NONE) {
- menu_item = NULL;
- }
- } else {
- SetSelection(source->GetMenuItem(), true, false);
- }
- SetDropMenuItem(menu_item, drop_position);
- last_drop_operation_ = drop_operation;
- return drop_operation;
-}
-
-void MenuController::OnDragExited(SubmenuView* source) {
- StartCancelAllTimer();
-
- if (drop_target_) {
- StopShowTimer();
- SetDropMenuItem(NULL, MenuDelegate::DROP_NONE);
- }
-}
-
-int MenuController::OnPerformDrop(SubmenuView* source,
- const DropTargetEvent& event) {
- DCHECK(drop_target_);
- // NOTE: the delegate may delete us after invoking OnPerformDrop, as such
- // we don't call cancel here.
-
- MenuItemView* item = state_.item;
- DCHECK(item);
-
- MenuItemView* drop_target = drop_target_;
- MenuDelegate::DropPosition drop_position = drop_position_;
-
- // Close all menus, including any nested menus.
- SetSelection(NULL, false, true);
- CloseAllNestedMenus();
-
- // Set state such that we exit.
- showing_ = false;
- exit_all_ = true;
-
- if (!IsBlockingRun())
- item->GetRootMenuItem()->DropMenuClosed(false);
-
- // WARNING: the call to MenuClosed deletes us.
-
- // If over an empty menu item, drop occurs on the parent.
- if (drop_target->GetID() == EmptyMenuMenuItem::kEmptyMenuItemViewID)
- drop_target = drop_target->GetParentMenuItem();
-
- return drop_target->GetDelegate()->OnPerformDrop(
- drop_target, drop_position, event);
-}
-
-void MenuController::OnDragEnteredScrollButton(SubmenuView* source,
- bool is_up) {
- MenuPart part;
- part.type = is_up ? MenuPart::SCROLL_UP : MenuPart::SCROLL_DOWN;
- part.submenu = source;
- UpdateScrolling(part);
-
- // Do this to force the selection to hide.
- SetDropMenuItem(source->GetMenuItemAt(0), MenuDelegate::DROP_NONE);
-
- StopCancelAllTimer();
-}
-
-void MenuController::OnDragExitedScrollButton(SubmenuView* source) {
- StartCancelAllTimer();
- SetDropMenuItem(NULL, MenuDelegate::DROP_NONE);
- StopScrolling();
-}
-
-// static
-void MenuController::SetActiveInstance(MenuController* controller) {
- active_instance_ = controller;
-}
-
-bool MenuController::Dispatch(const MSG& msg) {
- DCHECK(blocking_run_);
-
- if (exit_all_) {
- // We must translate/dispatch the message here, otherwise we would drop
- // the message on the floor.
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- return false;
- }
-
- // NOTE: we don't get WM_ACTIVATE or anything else interesting in here.
- switch (msg.message) {
- case WM_CONTEXTMENU: {
- MenuItemView* item = pending_state_.item;
- if (item && item->GetRootMenuItem() != item) {
- gfx::Point screen_loc(0, item->height());
- View::ConvertPointToScreen(item, &screen_loc);
- item->GetDelegate()->ShowContextMenu(
- item, item->GetCommand(), screen_loc.x(), screen_loc.y(), false);
- }
- return true;
- }
-
- // NOTE: focus wasn't changed when the menu was shown. As such, don't
- // dispatch key events otherwise the focused window will get the events.
- case WM_KEYDOWN:
- return OnKeyDown(msg);
-
- case WM_CHAR:
- return OnChar(msg);
-
- case WM_KEYUP:
- return true;
-
- case WM_SYSKEYUP:
- // We may have been shown on a system key, as such don't do anything
- // here. If another system key is pushed we'll get a WM_SYSKEYDOWN and
- // close the menu.
- return true;
-
- case WM_CANCELMODE:
- case WM_SYSKEYDOWN:
- // Exit immediately on system keys.
- Cancel(true);
- return false;
-
- default:
- break;
- }
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- return !exit_all_;
-}
-
-bool MenuController::OnKeyDown(const MSG& msg) {
- DCHECK(blocking_run_);
-
- switch (msg.wParam) {
- case VK_UP:
- IncrementSelection(-1);
- break;
-
- case VK_DOWN:
- IncrementSelection(1);
- break;
-
- // Handling of VK_RIGHT and VK_LEFT is different depending on the UI
- // layout.
- case VK_RIGHT:
- if (l10n_util::TextDirection() == l10n_util::RIGHT_TO_LEFT)
- CloseSubmenu();
- else
- OpenSubmenuChangeSelectionIfCan();
- break;
-
- case VK_LEFT:
- if (l10n_util::TextDirection() == l10n_util::RIGHT_TO_LEFT)
- OpenSubmenuChangeSelectionIfCan();
- else
- CloseSubmenu();
- break;
-
- case VK_RETURN:
- if (pending_state_.item) {
- if (pending_state_.item->HasSubmenu()) {
- OpenSubmenuChangeSelectionIfCan();
- } else if (pending_state_.item->IsEnabled()) {
- Accept(pending_state_.item, 0);
- return false;
- }
- }
- break;
-
- case VK_ESCAPE:
- if (!state_.item->GetParentMenuItem() ||
- (!state_.item->GetParentMenuItem()->GetParentMenuItem() &&
- (!state_.item->HasSubmenu() ||
- !state_.item->GetSubmenu()->IsShowing()))) {
- // User pressed escape and only one menu is shown, cancel it.
- Cancel(false);
- return false;
- } else {
- CloseSubmenu();
- }
- break;
-
- case VK_APPS:
- break;
-
- default:
- TranslateMessage(&msg);
- break;
- }
- return true;
-}
-
-bool MenuController::OnChar(const MSG& msg) {
- DCHECK(blocking_run_);
-
- return !SelectByChar(static_cast<wchar_t>(msg.wParam));
-}
-
-MenuController::MenuController(bool blocking)
- : blocking_run_(blocking),
- showing_(false),
- exit_all_(false),
- did_capture_(false),
- result_(NULL),
- drop_target_(NULL),
- owner_(NULL),
- possible_drag_(false),
- valid_drop_coordinates_(false),
- showing_submenu_(false),
- result_mouse_event_flags_(0) {
-#ifdef DEBUG_MENU
- instance_count++;
- DLOG(INFO) << "created MC, count=" << instance_count;
-#endif
-}
-
-MenuController::~MenuController() {
- DCHECK(!showing_);
- StopShowTimer();
- StopCancelAllTimer();
-#ifdef DEBUG_MENU
- instance_count--;
- DLOG(INFO) << "destroyed MC, count=" << instance_count;
-#endif
-}
-
-void MenuController::Accept(MenuItemView* item, int mouse_event_flags) {
- DCHECK(IsBlockingRun());
- result_ = item;
- exit_all_ = true;
- result_mouse_event_flags_ = mouse_event_flags;
-}
-
-void MenuController::CloseAllNestedMenus() {
- for (std::list<State>::iterator i = menu_stack_.begin();
- i != menu_stack_.end(); ++i) {
- MenuItemView* item = i->item;
- MenuItemView* last_item = item;
- while (item) {
- CloseMenu(item);
- last_item = item;
- item = item->GetParentMenuItem();
- }
- i->submenu_open = false;
- i->item = last_item;
- }
-}
-
-MenuItemView* MenuController::GetMenuItemAt(View* source, int x, int y) {
- View* child_under_mouse = source->GetViewForPoint(gfx::Point(x, y));
- if (child_under_mouse && child_under_mouse->IsEnabled() &&
- child_under_mouse->GetID() == MenuItemView::kMenuItemViewID) {
- return static_cast<MenuItemView*>(child_under_mouse);
- }
- return NULL;
-}
-
-MenuItemView* MenuController::GetEmptyMenuItemAt(View* source, int x, int y) {
- View* child_under_mouse = source->GetViewForPoint(gfx::Point(x, y));
- if (child_under_mouse &&
- child_under_mouse->GetID() == EmptyMenuMenuItem::kEmptyMenuItemViewID) {
- return static_cast<MenuItemView*>(child_under_mouse);
- }
- return NULL;
-}
-
-bool MenuController::IsScrollButtonAt(SubmenuView* source,
- int x,
- int y,
- MenuPart::Type* part) {
- MenuScrollViewContainer* scroll_view = source->GetScrollViewContainer();
- View* child_under_mouse = scroll_view->GetViewForPoint(gfx::Point(x, y));
- if (child_under_mouse && child_under_mouse->IsEnabled()) {
- if (child_under_mouse == scroll_view->scroll_up_button()) {
- *part = MenuPart::SCROLL_UP;
- return true;
- }
- if (child_under_mouse == scroll_view->scroll_down_button()) {
- *part = MenuPart::SCROLL_DOWN;
- return true;
- }
- }
- return false;
-}
-
-MenuController::MenuPart MenuController::GetMenuPartByScreenCoordinate(
- SubmenuView* source,
- int source_x,
- int source_y) {
- MenuPart part;
-
- gfx::Point screen_loc(source_x, source_y);
- View::ConvertPointToScreen(source->GetScrollViewContainer(), &screen_loc);
-
- MenuItemView* item = state_.item;
- while (item) {
- if (item->HasSubmenu() && item->GetSubmenu()->IsShowing() &&
- GetMenuPartByScreenCoordinateImpl(item->GetSubmenu(), screen_loc,
- &part)) {
- return part;
- }
- item = item->GetParentMenuItem();
- }
-
- return part;
-}
-
-bool MenuController::GetMenuPartByScreenCoordinateImpl(
- SubmenuView* menu,
- const gfx::Point& screen_loc,
- MenuPart* part) {
- // Is the mouse over the scroll buttons?
- gfx::Point scroll_view_loc = screen_loc;
- View* scroll_view_container = menu->GetScrollViewContainer();
- View::ConvertPointToView(NULL, scroll_view_container, &scroll_view_loc);
- if (scroll_view_loc.x() < 0 ||
- scroll_view_loc.x() >= scroll_view_container->width() ||
- scroll_view_loc.y() < 0 ||
- scroll_view_loc.y() >= scroll_view_container->height()) {
- // Point isn't contained in menu.
- return false;
- }
- if (IsScrollButtonAt(menu, scroll_view_loc.x(), scroll_view_loc.y(),
- &(part->type))) {
- part->submenu = menu;
- return true;
- }
-
- // Not over the scroll button. Check the actual menu.
- if (DoesSubmenuContainLocation(menu, screen_loc)) {
- gfx::Point menu_loc = screen_loc;
- View::ConvertPointToView(NULL, menu, &menu_loc);
- part->menu = GetMenuItemAt(menu, menu_loc.x(), menu_loc.y());
- part->type = MenuPart::MENU_ITEM;
- return true;
- }
-
- // While the mouse isn't over a menu item or the scroll buttons of menu, it
- // is contained by menu and so we return true. If we didn't return true other
- // menus would be searched, even though they are likely obscured by us.
- return true;
-}
-
-bool MenuController::DoesSubmenuContainLocation(SubmenuView* submenu,
- const gfx::Point& screen_loc) {
- gfx::Point view_loc = screen_loc;
- View::ConvertPointToView(NULL, submenu, &view_loc);
- gfx::Rect vis_rect = submenu->GetVisibleBounds();
- return vis_rect.Contains(view_loc.x(), view_loc.y());
-}
-
-void MenuController::CommitPendingSelection() {
- StopShowTimer();
-
- size_t paths_differ_at = 0;
- std::vector<MenuItemView*> current_path;
- std::vector<MenuItemView*> new_path;
- BuildPathsAndCalculateDiff(state_.item, pending_state_.item, &current_path,
- &new_path, &paths_differ_at);
-
- // Hide the old menu.
- for (size_t i = paths_differ_at; i < current_path.size(); ++i) {
- if (current_path[i]->HasSubmenu()) {
- current_path[i]->GetSubmenu()->Hide();
- }
- }
-
- // Copy pending to state_, making sure to preserve the direction menus were
- // opened.
- std::list<bool> pending_open_direction;
- state_.open_leading.swap(pending_open_direction);
- state_ = pending_state_;
- state_.open_leading.swap(pending_open_direction);
-
- int menu_depth = MenuDepth(state_.item);
- if (menu_depth == 0) {
- state_.open_leading.clear();
- } else {
- int cached_size = static_cast<int>(state_.open_leading.size());
- DCHECK(menu_depth >= 0);
- while (cached_size-- >= menu_depth)
- state_.open_leading.pop_back();
- }
-
- if (!state_.item) {
- // Nothing to select.
- StopScrolling();
- return;
- }
-
- // Open all the submenus preceeding the last menu item (last menu item is
- // handled next).
- if (new_path.size() > 1) {
- for (std::vector<MenuItemView*>::iterator i = new_path.begin();
- i != new_path.end() - 1; ++i) {
- OpenMenu(*i);
- }
- }
-
- if (state_.submenu_open) {
- // The submenu should be open, open the submenu if the item has a submenu.
- if (state_.item->HasSubmenu()) {
- OpenMenu(state_.item);
- } else {
- state_.submenu_open = false;
- }
- } else if (state_.item->HasSubmenu() &&
- state_.item->GetSubmenu()->IsShowing()) {
- state_.item->GetSubmenu()->Hide();
- }
-
- if (scroll_task_.get() && scroll_task_->submenu()) {
- // Stop the scrolling if none of the elements of the selection contain
- // the menu being scrolled.
- bool found = false;
- MenuItemView* item = state_.item;
- while (item && !found) {
- found = (item->HasSubmenu() && item->GetSubmenu()->IsShowing() &&
- item->GetSubmenu() == scroll_task_->submenu());
- item = item->GetParentMenuItem();
- }
- if (!found)
- StopScrolling();
- }
-}
-
-void MenuController::CloseMenu(MenuItemView* item) {
- DCHECK(item);
- if (!item->HasSubmenu())
- return;
- item->GetSubmenu()->Hide();
-}
-
-void MenuController::OpenMenu(MenuItemView* item) {
- DCHECK(item);
- if (item->GetSubmenu()->IsShowing()) {
- return;
- }
-
- bool prefer_leading =
- state_.open_leading.empty() ? true : state_.open_leading.back();
- bool resulting_direction;
- gfx::Rect bounds =
- CalculateMenuBounds(item, prefer_leading, &resulting_direction);
- state_.open_leading.push_back(resulting_direction);
- bool do_capture = (!did_capture_ && blocking_run_);
- showing_submenu_ = true;
- item->GetSubmenu()->ShowAt(owner_, bounds, do_capture);
- showing_submenu_ = false;
- did_capture_ = true;
-}
-
-void MenuController::BuildPathsAndCalculateDiff(
- MenuItemView* old_item,
- MenuItemView* new_item,
- std::vector<MenuItemView*>* old_path,
- std::vector<MenuItemView*>* new_path,
- size_t* first_diff_at) {
- DCHECK(old_path && new_path && first_diff_at);
- BuildMenuItemPath(old_item, old_path);
- BuildMenuItemPath(new_item, new_path);
-
- size_t common_size = std::min(old_path->size(), new_path->size());
-
- // Find the first difference between the two paths, when the loop
- // returns, diff_i is the first index where the two paths differ.
- for (size_t i = 0; i < common_size; ++i) {
- if ((*old_path)[i] != (*new_path)[i]) {
- *first_diff_at = i;
- return;
- }
- }
-
- *first_diff_at = common_size;
-}
-
-void MenuController::BuildMenuItemPath(MenuItemView* item,
- std::vector<MenuItemView*>* path) {
- if (!item)
- return;
- BuildMenuItemPath(item->GetParentMenuItem(), path);
- path->push_back(item);
-}
-
-void MenuController::StartShowTimer() {
- show_timer_.Start(TimeDelta::FromMilliseconds(kShowDelay), this,
- &MenuController::CommitPendingSelection);
-}
-
-void MenuController::StopShowTimer() {
- show_timer_.Stop();
-}
-
-void MenuController::StartCancelAllTimer() {
- cancel_all_timer_.Start(TimeDelta::FromMilliseconds(kCloseOnExitTime),
- this, &MenuController::CancelAll);
-}
-
-void MenuController::StopCancelAllTimer() {
- cancel_all_timer_.Stop();
-}
-
-gfx::Rect MenuController::CalculateMenuBounds(MenuItemView* item,
- bool prefer_leading,
- bool* is_leading) {
- DCHECK(item);
-
- SubmenuView* submenu = item->GetSubmenu();
- DCHECK(submenu);
-
- gfx::Size pref = submenu->GetScrollViewContainer()->GetPreferredSize();
-
- // Don't let the menu go to wide. This is some where between what IE and FF
- // do.
- pref.set_width(std::min(pref.width(), kMaxMenuWidth));
- if (!state_.monitor_bounds.IsEmpty())
- pref.set_width(std::min(pref.width(), state_.monitor_bounds.width()));
-
- // Assume we can honor prefer_leading.
- *is_leading = prefer_leading;
-
- int x, y;
-
- if (!item->GetParentMenuItem()) {
- // First item, position relative to initial location.
- x = state_.initial_bounds.x();
- y = state_.initial_bounds.bottom();
- if (state_.anchor == MenuItemView::TOPRIGHT)
- x = x + state_.initial_bounds.width() - pref.width();
- if (!state_.monitor_bounds.IsEmpty() &&
- y + pref.height() > state_.monitor_bounds.bottom()) {
- // The menu doesn't fit on screen. If the first location is above the
- // half way point, show from the mouse location to bottom of screen.
- // Otherwise show from the top of the screen to the location of the mouse.
- // While odd, this behavior matches IE.
- if (y < (state_.monitor_bounds.y() +
- state_.monitor_bounds.height() / 2)) {
- pref.set_height(std::min(pref.height(),
- state_.monitor_bounds.bottom() - y));
- } else {
- pref.set_height(std::min(pref.height(),
- state_.initial_bounds.y() - state_.monitor_bounds.y()));
- y = state_.initial_bounds.y() - pref.height();
- }
- }
- } else {
- // Not the first menu; position it relative to the bounds of the menu
- // item.
- gfx::Point item_loc;
- View::ConvertPointToScreen(item, &item_loc);
-
- // We must make sure we take into account the UI layout. If the layout is
- // RTL, then a 'leading' menu is positioned to the left of the parent menu
- // item and not to the right.
- bool layout_is_rtl = item->UILayoutIsRightToLeft();
- bool create_on_the_right = (prefer_leading && !layout_is_rtl) ||
- (!prefer_leading && layout_is_rtl);
-
- if (create_on_the_right) {
- x = item_loc.x() + item->width() - kSubmenuHorizontalInset;
- if (state_.monitor_bounds.width() != 0 &&
- x + pref.width() > state_.monitor_bounds.right()) {
- if (layout_is_rtl)
- *is_leading = true;
- else
- *is_leading = false;
- x = item_loc.x() - pref.width() + kSubmenuHorizontalInset;
- }
- } else {
- x = item_loc.x() - pref.width() + kSubmenuHorizontalInset;
- if (state_.monitor_bounds.width() != 0 && x < state_.monitor_bounds.x()) {
- if (layout_is_rtl)
- *is_leading = false;
- else
- *is_leading = true;
- x = item_loc.x() + item->width() - kSubmenuHorizontalInset;
- }
- }
- y = item_loc.y() - kSubmenuBorderSize;
- if (state_.monitor_bounds.width() != 0) {
- pref.set_height(std::min(pref.height(), state_.monitor_bounds.height()));
- if (y + pref.height() > state_.monitor_bounds.bottom())
- y = state_.monitor_bounds.bottom() - pref.height();
- if (y < state_.monitor_bounds.y())
- y = state_.monitor_bounds.y();
- }
- }
-
- if (state_.monitor_bounds.width() != 0) {
- if (x + pref.width() > state_.monitor_bounds.right())
- x = state_.monitor_bounds.right() - pref.width();
- if (x < state_.monitor_bounds.x())
- x = state_.monitor_bounds.x();
- }
- return gfx::Rect(x, y, pref.width(), pref.height());
-}
-
-// static
-int MenuController::MenuDepth(MenuItemView* item) {
- if (!item)
- return 0;
- return MenuDepth(item->GetParentMenuItem()) + 1;
-}
-
-void MenuController::IncrementSelection(int delta) {
- MenuItemView* item = pending_state_.item;
- DCHECK(item);
- if (pending_state_.submenu_open && item->HasSubmenu() &&
- item->GetSubmenu()->IsShowing()) {
- // A menu is selected and open, but none of its children are selected,
- // select the first menu item.
- if (item->GetSubmenu()->GetMenuItemCount()) {
- SetSelection(item->GetSubmenu()->GetMenuItemAt(0), false, false);
- ScrollToVisible(item->GetSubmenu()->GetMenuItemAt(0));
- return; // return so else case can fall through.
- }
- }
- if (item->GetParentMenuItem()) {
- MenuItemView* parent = item->GetParentMenuItem();
- int parent_count = parent->GetSubmenu()->GetMenuItemCount();
- if (parent_count > 1) {
- for (int i = 0; i < parent_count; ++i) {
- if (parent->GetSubmenu()->GetMenuItemAt(i) == item) {
- int next_index = (i + delta + parent_count) % parent_count;
- ScrollToVisible(parent->GetSubmenu()->GetMenuItemAt(next_index));
- SetSelection(parent->GetSubmenu()->GetMenuItemAt(next_index), false,
- false);
- break;
- }
- }
- }
- }
-}
-
-void MenuController::OpenSubmenuChangeSelectionIfCan() {
- MenuItemView* item = pending_state_.item;
- if (item->HasSubmenu()) {
- if (item->GetSubmenu()->GetMenuItemCount() > 0) {
- SetSelection(item->GetSubmenu()->GetMenuItemAt(0), false, true);
- } else {
- // No menu items, just show the sub-menu.
- SetSelection(item, true, true);
- }
- }
-}
-
-void MenuController::CloseSubmenu() {
- MenuItemView* item = state_.item;
- DCHECK(item);
- if (!item->GetParentMenuItem())
- return;
- if (item->HasSubmenu() && item->GetSubmenu()->IsShowing()) {
- SetSelection(item, false, true);
- } else if (item->GetParentMenuItem()->GetParentMenuItem()) {
- SetSelection(item->GetParentMenuItem(), false, true);
- }
-}
-
-bool MenuController::IsMenuWindow(MenuItemView* item, HWND window) {
- if (!item)
- return false;
- return ((item->HasSubmenu() && item->GetSubmenu()->IsShowing() &&
- item->GetSubmenu()->GetWidget()->GetNativeView() == window) ||
- IsMenuWindow(item->GetParentMenuItem(), window));
-}
-
-bool MenuController::SelectByChar(wchar_t character) {
- wchar_t char_array[1] = { character };
- wchar_t key = l10n_util::ToLower(char_array)[0];
- MenuItemView* item = pending_state_.item;
- if (!item->HasSubmenu() || !item->GetSubmenu()->IsShowing())
- item = item->GetParentMenuItem();
- DCHECK(item);
- DCHECK(item->HasSubmenu());
- SubmenuView* submenu = item->GetSubmenu();
- DCHECK(submenu);
- int menu_item_count = submenu->GetMenuItemCount();
- if (!menu_item_count)
- return false;
- for (int i = 0; i < menu_item_count; ++i) {
- MenuItemView* child = submenu->GetMenuItemAt(i);
- if (child->GetMnemonic() == key && child->IsEnabled()) {
- Accept(child, 0);
- return true;
- }
- }
-
- // No matching mnemonic, search through items that don't have mnemonic
- // based on first character of the title.
- int first_match = -1;
- bool has_multiple = false;
- int next_match = -1;
- int index_of_item = -1;
- for (int i = 0; i < menu_item_count; ++i) {
- MenuItemView* child = submenu->GetMenuItemAt(i);
- if (!child->GetMnemonic() && child->IsEnabled()) {
- std::wstring lower_title = l10n_util::ToLower(child->GetTitle());
- if (child == pending_state_.item)
- index_of_item = i;
- if (lower_title.length() && lower_title[0] == key) {
- if (first_match == -1)
- first_match = i;
- else
- has_multiple = true;
- if (next_match == -1 && index_of_item != -1 && i > index_of_item)
- next_match = i;
- }
- }
- }
- if (first_match != -1) {
- if (!has_multiple) {
- if (submenu->GetMenuItemAt(first_match)->HasSubmenu()) {
- SetSelection(submenu->GetMenuItemAt(first_match), true, false);
- } else {
- Accept(submenu->GetMenuItemAt(first_match), 0);
- return true;
- }
- } else if (index_of_item == -1 || next_match == -1) {
- SetSelection(submenu->GetMenuItemAt(first_match), false, false);
- } else {
- SetSelection(submenu->GetMenuItemAt(next_match), false, false);
- }
- }
- return false;
-}
-
-void MenuController::RepostEvent(SubmenuView* source,
- const MouseEvent& event) {
- gfx::Point screen_loc(event.location());
- View::ConvertPointToScreen(source->GetScrollViewContainer(), &screen_loc);
- HWND window = WindowFromPoint(screen_loc.ToPOINT());
- if (window) {
-#ifdef DEBUG_MENU
- DLOG(INFO) << "RepostEvent on press";
-#endif
-
- // Release the capture.
- SubmenuView* submenu = state_.item->GetRootMenuItem()->GetSubmenu();
- submenu->ReleaseCapture();
-
- if (submenu->host() && submenu->host()->GetNativeView() &&
- GetWindowThreadProcessId(submenu->host()->GetNativeView(), NULL) !=
- GetWindowThreadProcessId(window, NULL)) {
- // Even though we have mouse capture, windows generates a mouse event
- // if the other window is in a separate thread. Don't generate an event in
- // this case else the target window can get double events leading to bad
- // behavior.
- return;
- }
-
- // Convert the coordinates to the target window.
- RECT window_bounds;
- GetWindowRect(window, &window_bounds);
- int window_x = screen_loc.x() - window_bounds.left;
- int window_y = screen_loc.y() - window_bounds.top;
-
- // Determine whether the click was in the client area or not.
- // NOTE: WM_NCHITTEST coordinates are relative to the screen.
- LRESULT nc_hit_result = SendMessage(window, WM_NCHITTEST, 0,
- MAKELPARAM(screen_loc.x(),
- screen_loc.y()));
- const bool in_client_area = (nc_hit_result == HTCLIENT);
-
- // TODO(sky): this isn't right. The event to generate should correspond
- // with the event we just got. MouseEvent only tells us what is down,
- // which may differ. Need to add ability to get changed button from
- // MouseEvent.
- int event_type;
- if (event.IsLeftMouseButton())
- event_type = in_client_area ? WM_LBUTTONDOWN : WM_NCLBUTTONDOWN;
- else if (event.IsMiddleMouseButton())
- event_type = in_client_area ? WM_MBUTTONDOWN : WM_NCMBUTTONDOWN;
- else if (event.IsRightMouseButton())
- event_type = in_client_area ? WM_RBUTTONDOWN : WM_NCRBUTTONDOWN;
- else
- event_type = 0; // Unknown mouse press.
-
- if (event_type) {
- if (in_client_area) {
- PostMessage(window, event_type, event.GetWindowsFlags(),
- MAKELPARAM(window_x, window_y));
- } else {
- PostMessage(window, event_type, nc_hit_result,
- MAKELPARAM(screen_loc.x(), screen_loc.y()));
- }
- }
- }
-}
-
-void MenuController::SetDropMenuItem(
- MenuItemView* new_target,
- MenuDelegate::DropPosition new_position) {
- if (new_target == drop_target_ && new_position == drop_position_)
- return;
-
- if (drop_target_) {
- drop_target_->GetParentMenuItem()->GetSubmenu()->SetDropMenuItem(
- NULL, MenuDelegate::DROP_NONE);
- }
- drop_target_ = new_target;
- drop_position_ = new_position;
- if (drop_target_) {
- drop_target_->GetParentMenuItem()->GetSubmenu()->SetDropMenuItem(
- drop_target_, drop_position_);
- }
-}
-
-void MenuController::UpdateScrolling(const MenuPart& part) {
- if (!part.is_scroll() && !scroll_task_.get())
- return;
-
- if (!scroll_task_.get())
- scroll_task_.reset(new MenuScrollTask());
- scroll_task_->Update(part);
-}
-
-void MenuController::StopScrolling() {
- scroll_task_.reset(NULL);
-}
-
-} // namespace views
diff --git a/chrome/views/controls/menu/chrome_menu.h b/chrome/views/controls/menu/chrome_menu.h
deleted file mode 100644
index 6f18abb..0000000
--- a/chrome/views/controls/menu/chrome_menu.h
+++ /dev/null
@@ -1,948 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_CONTROLS_MENU_CHROME_MENU_H_
-#define CHROME_VIEWS_CONTROLS_MENU_CHROME_MENU_H_
-
-#include <list>
-#include <vector>
-
-#include "app/drag_drop_types.h"
-#include "app/gfx/chrome_font.h"
-#include "base/gfx/point.h"
-#include "base/gfx/rect.h"
-#include "base/message_loop.h"
-#include "base/task.h"
-#include "chrome/views/controls/menu/controller.h"
-#include "chrome/views/view.h"
-#include "skia/include/SkBitmap.h"
-
-namespace views {
-
-class WidgetWin;
-class MenuController;
-class MenuItemView;
-class SubmenuView;
-
-namespace {
-class MenuHost;
-class MenuHostRootView;
-class MenuScrollTask;
-class MenuScrollViewContainer;
-}
-
-// MenuDelegate --------------------------------------------------------------
-
-// Delegate for the menu.
-
-class MenuDelegate : Controller {
- public:
- // Used during drag and drop to indicate where the drop indicator should
- // be rendered.
- enum DropPosition {
- // Indicates a drop is not allowed here.
- DROP_NONE,
-
- // Indicates the drop should occur before the item.
- DROP_BEFORE,
-
- // Indicates the drop should occur after the item.
- DROP_AFTER,
-
- // Indicates the drop should occur on the item.
- DROP_ON
- };
-
- // Whether or not an item should be shown as checked.
- // TODO(sky): need checked support.
- virtual bool IsItemChecked(int id) const {
- return false;
- }
-
- // The string shown for the menu item. This is only invoked when an item is
- // added with an empty label.
- virtual std::wstring GetLabel(int id) const {
- return std::wstring();
- }
-
- // Shows the context menu with the specified id. This is invoked when the
- // user does the appropriate gesture to show a context menu. The id
- // identifies the id of the menu to show the context menu for.
- // is_mouse_gesture is true if this is the result of a mouse gesture.
- // If this is not the result of a mouse gesture x/y is the recommended
- // location to display the content menu at. In either case, x/y is in
- // screen coordinates.
- // Returns true if a context menu was displayed, otherwise false
- virtual bool ShowContextMenu(MenuItemView* source,
- int id,
- int x,
- int y,
- bool is_mouse_gesture) {
- return false;
- }
-
- // Controller
- virtual bool SupportsCommand(int id) const {
- return true;
- }
- virtual bool IsCommandEnabled(int id) const {
- return true;
- }
- virtual bool GetContextualLabel(int id, std::wstring* out) const {
- return false;
- }
- virtual void ExecuteCommand(int id) {
- }
-
- // Executes the specified command. mouse_event_flags give the flags of the
- // mouse event that triggered this to be invoked (views::MouseEvent
- // flags). mouse_event_flags is 0 if this is triggered by a user gesture
- // other than a mouse event.
- virtual void ExecuteCommand(int id, int mouse_event_flags) {
- ExecuteCommand(id);
- }
-
- // Returns true if the specified mouse event is one the user can use
- // to trigger, or accept, the mouse. Defaults to left or right mouse buttons.
- virtual bool IsTriggerableEvent(const MouseEvent& e) {
- return e.IsLeftMouseButton() || e.IsRightMouseButton();
- }
-
- // Invoked to determine if drops can be accepted for a submenu. This is
- // ONLY invoked for menus that have submenus and indicates whether or not
- // a drop can occur on any of the child items of the item. For example,
- // consider the following menu structure:
- //
- // A
- // B
- // C
- //
- // Where A has a submenu with children B and C. This is ONLY invoked for
- // A, not B and C.
- //
- // To restrict which children can be dropped on override GetDropOperation.
- virtual bool CanDrop(MenuItemView* menu, const OSExchangeData& data) {
- return false;
- }
-
- // Returns the drop operation for the specified target menu item. This is
- // only invoked if CanDrop returned true for the parent menu. position
- // is set based on the location of the mouse, reset to specify a different
- // position.
- //
- // If a drop should not be allowed, returned DragDropTypes::DRAG_NONE.
- virtual int GetDropOperation(MenuItemView* item,
- const DropTargetEvent& event,
- DropPosition* position) {
- NOTREACHED() << "If you override CanDrop, you need to override this too";
- return DragDropTypes::DRAG_NONE;
- }
-
- // Invoked to perform the drop operation. This is ONLY invoked if
- // canDrop returned true for the parent menu item, and GetDropOperation
- // returned an operation other than DragDropTypes::DRAG_NONE.
- //
- // menu indicates the menu the drop occurred on.
- virtual int OnPerformDrop(MenuItemView* menu,
- DropPosition position,
- const DropTargetEvent& event) {
- NOTREACHED() << "If you override CanDrop, you need to override this too";
- return DragDropTypes::DRAG_NONE;
- }
-
- // Invoked to determine if it is possible for the user to drag the specified
- // menu item.
- virtual bool CanDrag(MenuItemView* menu) {
- return false;
- }
-
- // Invoked to write the data for a drag operation to data. sender is the
- // MenuItemView being dragged.
- virtual void WriteDragData(MenuItemView* sender, OSExchangeData* data) {
- NOTREACHED() << "If you override CanDrag, you must override this too.";
- }
-
- // Invoked to determine the drag operations for a drag session of sender.
- // See DragDropTypes for possible values.
- virtual int GetDragOperations(MenuItemView* sender) {
- NOTREACHED() << "If you override CanDrag, you must override this too.";
- return 0;
- }
-
- // Notification the menu has closed. This is only sent when running the
- // menu for a drop.
- virtual void DropMenuClosed(MenuItemView* menu) {
- }
-
- // Notification that the user has highlighted the specified item.
- virtual void SelectionChanged(MenuItemView* menu) {
- }
-};
-
-// MenuItemView --------------------------------------------------------------
-
-// MenuItemView represents a single menu item with a label and optional icon.
-// Each MenuItemView may also contain a submenu, which in turn may contain
-// any number of child MenuItemViews.
-//
-// To use a menu create an initial MenuItemView using the constructor that
-// takes a MenuDelegate, then create any number of child menu items by way
-// of the various AddXXX methods.
-//
-// MenuItemView is itself a View, which means you can add Views to each
-// MenuItemView. This normally NOT want you want, rather add other child Views
-// to the submenu of the MenuItemView.
-//
-// There are two ways to show a MenuItemView:
-// 1. Use RunMenuAt. This blocks the caller, executing the selected command
-// on success.
-// 2. Use RunMenuForDropAt. This is intended for use during a drop session
-// and does NOT block the caller. Instead the delegate is notified when the
-// menu closes via the DropMenuClosed method.
-
-class MenuItemView : public View {
- friend class MenuController;
-
- public:
- // ID used to identify menu items.
- static const int kMenuItemViewID;
-
- // If true SetNestableTasksAllowed(true) is invoked before MessageLoop::Run
- // is invoked. This is only useful for testing and defaults to false.
- static bool allow_task_nesting_during_run_;
-
- // Different types of menu items.
- enum Type {
- NORMAL,
- SUBMENU,
- CHECKBOX,
- RADIO,
- SEPARATOR
- };
-
- // Where the menu should be anchored to.
- enum AnchorPosition {
- TOPLEFT,
- TOPRIGHT
- };
-
- // Constructor for use with the top level menu item. This menu is never
- // shown to the user, rather its use as the parent for all menu items.
- explicit MenuItemView(MenuDelegate* delegate);
-
- virtual ~MenuItemView();
-
- // Run methods. See description above class for details. Both Run methods take
- // a rectangle, which is used to position the menu. |has_mnemonics| indicates
- // whether the items have mnemonics. Mnemonics are identified by way of the
- // character following the '&'.
- void RunMenuAt(HWND parent,
- const gfx::Rect& bounds,
- AnchorPosition anchor,
- bool has_mnemonics);
- void RunMenuForDropAt(HWND parent,
- const gfx::Rect& bounds,
- AnchorPosition anchor);
-
- // Hides and cancels the menu. This does nothing if the menu is not open.
- void Cancel();
-
- // Adds an item to this menu.
- // item_id The id of the item, used to identify it in delegate callbacks
- // or (if delegate is NULL) to identify the command associated
- // with this item with the controller specified in the ctor. Note
- // that this value should not be 0 as this has a special meaning
- // ("NULL command, no item selected")
- // label The text label shown.
- // type The type of item.
- void AppendMenuItem(int item_id,
- const std::wstring& label,
- Type type) {
- AppendMenuItemInternal(item_id, label, SkBitmap(), type);
- }
-
- // Append a submenu to this menu.
- // The returned pointer is owned by this menu.
- MenuItemView* AppendSubMenu(int item_id,
- const std::wstring& label) {
- return AppendMenuItemInternal(item_id, label, SkBitmap(), SUBMENU);
- }
-
- // Append a submenu with an icon to this menu.
- // The returned pointer is owned by this menu.
- MenuItemView* AppendSubMenuWithIcon(int item_id,
- const std::wstring& label,
- const SkBitmap& icon) {
- return AppendMenuItemInternal(item_id, label, icon, SUBMENU);
- }
-
- // This is a convenience for standard text label menu items where the label
- // is provided with this call.
- void AppendMenuItemWithLabel(int item_id,
- const std::wstring& label) {
- AppendMenuItem(item_id, label, NORMAL);
- }
-
- // This is a convenience for text label menu items where the label is
- // provided by the delegate.
- void AppendDelegateMenuItem(int item_id) {
- AppendMenuItem(item_id, std::wstring(), NORMAL);
- }
-
- // Adds a separator to this menu
- void AppendSeparator() {
- AppendMenuItemInternal(0, std::wstring(), SkBitmap(), SEPARATOR);
- }
-
- // Appends a menu item with an icon. This is for the menu item which
- // needs an icon. Calling this function forces the Menu class to draw
- // the menu, instead of relying on Windows.
- void AppendMenuItemWithIcon(int item_id,
- const std::wstring& label,
- const SkBitmap& icon) {
- AppendMenuItemInternal(item_id, label, icon, NORMAL);
- }
-
- // Returns the view that contains child menu items. If the submenu has
- // not been creates, this creates it.
- virtual SubmenuView* CreateSubmenu();
-
- // Returns true if this menu item has a submenu.
- virtual bool HasSubmenu() const { return (submenu_ != NULL); }
-
- // Returns the view containing child menu items.
- virtual SubmenuView* GetSubmenu() const { return submenu_; }
-
- // Returns the parent menu item.
- MenuItemView* GetParentMenuItem() const { return parent_menu_item_; }
-
- // Sets the font.
- void SetFont(const ChromeFont& font) { font_ = font; }
-
- // Sets the title
- void SetTitle(const std::wstring& title) {
- title_ = title;
- }
-
- // Returns the title.
- const std::wstring& GetTitle() const { return title_; }
-
- // Sets whether this item is selected. This is invoked as the user moves
- // the mouse around the menu while open.
- void SetSelected(bool selected);
-
- // Returns true if the item is selected.
- bool IsSelected() const { return selected_; }
-
- // Sets the icon for the descendant identified by item_id.
- void SetIcon(const SkBitmap& icon, int item_id);
-
- // Sets the icon of this menu item.
- void SetIcon(const SkBitmap& icon);
-
- // Returns the icon.
- const SkBitmap& GetIcon() const { return icon_; }
-
- // Sets the command id of this menu item.
- void SetCommand(int command) { command_ = command; }
-
- // Returns the command id of this item.
- int GetCommand() const { return command_; }
-
- // Paints the menu item.
- virtual void Paint(ChromeCanvas* canvas);
-
- // Returns the preferred size of this item.
- virtual gfx::Size GetPreferredSize();
-
- // Returns the object responsible for controlling showing the menu.
- MenuController* GetMenuController();
-
- // Returns the delegate. This returns the delegate of the root menu item.
- MenuDelegate* GetDelegate();
-
- // Returns the root parent, or this if this has no parent.
- MenuItemView* GetRootMenuItem();
-
- // Returns the mnemonic for this MenuItemView, or 0 if this MenuItemView
- // doesn't have a mnemonic.
- wchar_t GetMnemonic();
-
- // Do we have icons? This only has effect on the top menu. Turning this on
- // makes the menus slightly wider and taller.
- void set_has_icons(bool has_icons) {
- has_icons_ = has_icons;
- }
-
- protected:
- // Creates a MenuItemView. This is used by the various AddXXX methods.
- MenuItemView(MenuItemView* parent, int command, Type type);
-
- private:
- // Called by the two constructors to initialize this menu item.
- void Init(MenuItemView* parent,
- int command,
- MenuItemView::Type type,
- MenuDelegate* delegate);
-
- // All the AddXXX methods funnel into this.
- MenuItemView* AppendMenuItemInternal(int item_id,
- const std::wstring& label,
- const SkBitmap& icon,
- Type type);
-
- // Returns the descendant with the specified command.
- MenuItemView* GetDescendantByID(int id);
-
- // Invoked by the MenuController when the menu closes as the result of
- // drag and drop run.
- void DropMenuClosed(bool notify_delegate);
-
- // The RunXXX methods call into this to set up the necessary state before
- // running.
- void PrepareForRun(bool has_mnemonics);
-
- // Returns the flags passed to DrawStringInt.
- int GetDrawStringFlags();
-
- // If this menu item has no children a child is added showing it has no
- // children. Otherwise AddEmtpyMenuIfNecessary is recursively invoked on
- // child menu items that have children.
- void AddEmptyMenus();
-
- // Undoes the work of AddEmptyMenus.
- void RemoveEmptyMenus();
-
- // Given bounds within our View, this helper routine mirrors the bounds if
- // necessary.
- void AdjustBoundsForRTLUI(RECT* rect) const;
-
- // Actual paint implementation. If for_drag is true, portions of the menu
- // are not rendered.
- void Paint(ChromeCanvas* canvas, bool for_drag);
-
- // Destroys the window used to display this menu and recursively destroys
- // the windows used to display all descendants.
- void DestroyAllMenuHosts();
-
- // Returns the various margins.
- int GetTopMargin();
- int GetBottomMargin();
-
- // The delegate. This is only valid for the root menu item. You shouldn't
- // use this directly, instead use GetDelegate() which walks the tree as
- // as necessary.
- MenuDelegate* delegate_;
-
- // Returns the controller for the run operation, or NULL if the menu isn't
- // showing.
- MenuController* controller_;
-
- // Used to detect when Cancel was invoked.
- bool canceled_;
-
- // Our parent.
- MenuItemView* parent_menu_item_;
-
- // Type of menu. NOTE: MenuItemView doesn't itself represent SEPARATOR,
- // that is handled by an entirely different view class.
- Type type_;
-
- // Whether we're selected.
- bool selected_;
-
- // Command id.
- int command_;
-
- // Submenu, created via CreateSubmenu.
- SubmenuView* submenu_;
-
- // Font.
- ChromeFont font_;
-
- // Title.
- std::wstring title_;
-
- // Icon.
- SkBitmap icon_;
-
- // Does the title have a mnemonic?
- bool has_mnemonics_;
-
- bool has_icons_;
-
- DISALLOW_EVIL_CONSTRUCTORS(MenuItemView);
-};
-
-// SubmenuView ----------------------------------------------------------------
-
-// SubmenuView is the parent of all menu items.
-//
-// SubmenuView has the following responsibilities:
-// . It positions and sizes all child views (any type of View may be added,
-// not just MenuItemViews).
-// . Forwards the appropriate events to the MenuController. This allows the
-// MenuController to update the selection as the user moves the mouse around.
-// . Renders the drop indicator during a drop operation.
-// . Shows and hides the window (a WidgetWin) when the menu is shown on
-// screen.
-//
-// SubmenuView is itself contained in a MenuScrollViewContainer.
-// MenuScrollViewContainer handles showing as much of the SubmenuView as the
-// screen allows. If the SubmenuView is taller than the screen, scroll buttons
-// are provided that allow the user to see all the menu items.
-class SubmenuView : public View {
- public:
- // Creates a SubmenuView for the specified menu item.
- explicit SubmenuView(MenuItemView* parent);
- ~SubmenuView();
-
- // Returns the number of child views that are MenuItemViews.
- // MenuItemViews are identified by ID.
- int GetMenuItemCount();
-
- // Returns the MenuItemView at the specified index.
- MenuItemView* GetMenuItemAt(int index);
-
- // Positions and sizes the child views. This tiles the views vertically,
- // giving each child the available width.
- virtual void Layout();
- virtual gfx::Size GetPreferredSize();
-
- // View method. Overriden to schedule a paint. We do this so that when
- // scrolling occurs, everything is repainted correctly.
- virtual void DidChangeBounds(const gfx::Rect& previous,
- const gfx::Rect& current);
-
- // Painting.
- void PaintChildren(ChromeCanvas* canvas);
-
- // Drag and drop methods. These are forwarded to the MenuController.
- virtual bool CanDrop(const OSExchangeData& data);
- virtual void OnDragEntered(const DropTargetEvent& event);
- virtual int OnDragUpdated(const DropTargetEvent& event);
- virtual void OnDragExited();
- virtual int OnPerformDrop(const DropTargetEvent& event);
-
- // Scrolls on menu item boundaries.
- virtual bool OnMouseWheel(const MouseWheelEvent& e);
-
- // Returns true if the menu is showing.
- bool IsShowing();
-
- // Shows the menu at the specified location. Coordinates are in screen
- // coordinates. max_width gives the max width the view should be.
- void ShowAt(HWND parent, const gfx::Rect& bounds, bool do_capture);
-
- // Closes the menu, destroying the host.
- void Close();
-
- // Hides the hosting window.
- //
- // The hosting window is hidden first, then deleted (Close) when the menu is
- // done running. This is done to avoid deletion ordering dependencies. In
- // particular, during drag and drop (and when a modal dialog is shown as
- // a result of choosing a context menu) it is possible that an event is
- // being processed by the host, so that host is on the stack when we need to
- // close the window. If we closed the window immediately (and deleted it),
- // when control returned back to host we would crash as host was deleted.
- void Hide();
-
- // If mouse capture was grabbed, it is released. Does nothing if mouse was
- // not captured.
- void ReleaseCapture();
-
- // Returns the parent menu item we're showing children for.
- MenuItemView* GetMenuItem() const { return parent_menu_item_; }
-
- // Overriden to return true. This prevents tab from doing anything.
- virtual bool CanProcessTabKeyEvents() { return true; }
-
- // Set the drop item and position.
- void SetDropMenuItem(MenuItemView* item,
- MenuDelegate::DropPosition position);
-
- // Returns whether the selection should be shown for the specified item.
- // The selection is NOT shown during drag and drop when the drop is over
- // the menu.
- bool GetShowSelection(MenuItemView* item);
-
- // Returns the container for the SubmenuView.
- MenuScrollViewContainer* GetScrollViewContainer();
-
- // Returns the host of the menu. Returns NULL if not showing.
- MenuHost* host() const { return host_; }
-
- private:
- // Paints the drop indicator. This is only invoked if item is non-NULL and
- // position is not DROP_NONE.
- void PaintDropIndicator(ChromeCanvas* canvas,
- MenuItemView* item,
- MenuDelegate::DropPosition position);
-
- void SchedulePaintForDropIndicator(MenuItemView* item,
- MenuDelegate::DropPosition position);
-
- // Calculates the location of th edrop indicator.
- gfx::Rect CalculateDropIndicatorBounds(MenuItemView* item,
- MenuDelegate::DropPosition position);
-
- // Parent menu item.
- MenuItemView* parent_menu_item_;
-
- // WidgetWin subclass used to show the children.
- MenuHost* host_;
-
- // If non-null, indicates a drop is in progress and drop_item is the item
- // the drop is over.
- MenuItemView* drop_item_;
-
- // Position of the drop.
- MenuDelegate::DropPosition drop_position_;
-
- // Ancestor of the SubmenuView, lazily created.
- MenuScrollViewContainer* scroll_view_container_;
-
- DISALLOW_EVIL_CONSTRUCTORS(SubmenuView);
-};
-
-// MenuController -------------------------------------------------------------
-
-// MenuController manages showing, selecting and drag/drop for menus.
-// All relevant events are forwarded to the MenuController from SubmenuView
-// and MenuHost.
-
-class MenuController : public MessageLoopForUI::Dispatcher {
- public:
- friend class MenuHostRootView;
- friend class MenuItemView;
- friend class MenuScrollTask;
-
- // If a menu is currently active, this returns the controller for it.
- static MenuController* GetActiveInstance();
-
- // Runs the menu at the specified location. If the menu was configured to
- // block, the selected item is returned. If the menu does not block this
- // returns NULL immediately.
- MenuItemView* Run(HWND parent,
- MenuItemView* root,
- const gfx::Rect& bounds,
- MenuItemView::AnchorPosition position,
- int* mouse_event_flags);
-
- // Whether or not Run blocks.
- bool IsBlockingRun() const { return blocking_run_; }
-
- // Sets the selection to menu_item, a value of NULL unselects everything.
- // If open_submenu is true and menu_item has a submenu, the submenu is shown.
- // If update_immediately is true, submenus are opened immediately, otherwise
- // submenus are only opened after a timer fires.
- //
- // Internally this updates pending_state_ immediatley, and if
- // update_immediately is true, CommitPendingSelection is invoked to
- // show/hide submenus and update state_.
- void SetSelection(MenuItemView* menu_item,
- bool open_submenu,
- bool update_immediately);
-
- // Cancels the current Run. If all is true, any nested loops are canceled
- // as well. This immediately hides all menus.
- void Cancel(bool all);
-
- // An alternative to Cancel(true) that can be used with a OneShotTimer.
- void CancelAll() { return Cancel(true); }
-
- // Various events, forwarded from the submenu.
- //
- // NOTE: the coordinates of the events are in that of the
- // MenuScrollViewContainer.
- void OnMousePressed(SubmenuView* source, const MouseEvent& event);
- void OnMouseDragged(SubmenuView* source, const MouseEvent& event);
- void OnMouseReleased(SubmenuView* source, const MouseEvent& event);
- void OnMouseMoved(SubmenuView* source, const MouseEvent& event);
- void OnMouseEntered(SubmenuView* source, const MouseEvent& event);
- bool CanDrop(SubmenuView* source, const OSExchangeData& data);
- void OnDragEntered(SubmenuView* source, const DropTargetEvent& event);
- int OnDragUpdated(SubmenuView* source, const DropTargetEvent& event);
- void OnDragExited(SubmenuView* source);
- int OnPerformDrop(SubmenuView* source, const DropTargetEvent& event);
-
- // Invoked from the scroll buttons of the MenuScrollViewContainer.
- void OnDragEnteredScrollButton(SubmenuView* source, bool is_up);
- void OnDragExitedScrollButton(SubmenuView* source);
-
- private:
- // Tracks selection information.
- struct State {
- State() : item(NULL), submenu_open(false) {}
-
- // The selected menu item.
- MenuItemView* item;
-
- // If item has a submenu this indicates if the submenu is showing.
- bool submenu_open;
-
- // Bounds passed to the run menu. Used for positioning the first menu.
- gfx::Rect initial_bounds;
-
- // Position of the initial menu.
- MenuItemView::AnchorPosition anchor;
-
- // The direction child menus have opened in.
- std::list<bool> open_leading;
-
- // Bounds for the monitor we're showing on.
- gfx::Rect monitor_bounds;
- };
-
- // Used by GetMenuPartByScreenCoordinate to indicate the menu part at a
- // particular location.
- struct MenuPart {
- // Type of part.
- enum Type {
- NONE,
- MENU_ITEM,
- SCROLL_UP,
- SCROLL_DOWN
- };
-
- MenuPart() : type(NONE), menu(NULL), submenu(NULL) {}
-
- // Convenience for testing type == SCROLL_DOWN or type == SCROLL_UP.
- bool is_scroll() const { return type == SCROLL_DOWN || type == SCROLL_UP; }
-
- // Type of part.
- Type type;
-
- // If type is MENU_ITEM, this is the menu item the mouse is over, otherwise
- // this is NULL.
- // NOTE: if type is MENU_ITEM and the mouse is not over a valid menu item
- // but is over a menu (for example, the mouse is over a separator or
- // empty menu), this is NULL.
- MenuItemView* menu;
-
- // If type is SCROLL_*, this is the submenu the mouse is over.
- SubmenuView* submenu;
- };
-
- // Sets the active MenuController.
- static void SetActiveInstance(MenuController* controller);
-
- // Dispatcher method. This returns true if the menu was canceled, or
- // if the message is such that the menu should be closed.
- virtual bool Dispatch(const MSG& msg);
-
- // Key processing. The return value of these is returned from Dispatch.
- // In other words, if these return false (which they do if escape was
- // pressed, or a matching mnemonic was found) the message loop returns.
- bool OnKeyDown(const MSG& msg);
- bool OnChar(const MSG& msg);
-
- // Creates a MenuController. If blocking is true, Run blocks the caller
- explicit MenuController(bool blocking);
-
- ~MenuController();
-
- // Invoked when the user accepts the selected item. This is only used
- // when blocking. This schedules the loop to quit.
- void Accept(MenuItemView* item, int mouse_event_flags);
-
- // Closes all menus, including any menus of nested invocations of Run.
- void CloseAllNestedMenus();
-
- // Gets the enabled menu item at the specified location.
- // If over_any_menu is non-null it is set to indicate whether the location
- // is over any menu. It is possible for this to return NULL, but
- // over_any_menu to be true. For example, the user clicked on a separator.
- MenuItemView* GetMenuItemAt(View* menu, int x, int y);
-
- // If there is an empty menu item at the specified location, it is returned.
- MenuItemView* GetEmptyMenuItemAt(View* source, int x, int y);
-
- // Returns true if the coordinate is over the scroll buttons of the
- // SubmenuView's MenuScrollViewContainer. If true is returned, part is set to
- // indicate which scroll button the coordinate is.
- bool IsScrollButtonAt(SubmenuView* source,
- int x,
- int y,
- MenuPart::Type* part);
-
- // Returns the target for the mouse event.
- MenuPart GetMenuPartByScreenCoordinate(SubmenuView* source,
- int source_x,
- int source_y);
-
- // Implementation of GetMenuPartByScreenCoordinate for a single menu. Returns
- // true if the supplied SubmenuView contains the location in terms of the
- // screen. If it does, part is set appropriately and true is returned.
- bool GetMenuPartByScreenCoordinateImpl(SubmenuView* menu,
- const gfx::Point& screen_loc,
- MenuPart* part);
-
- // Returns true if the SubmenuView contains the specified location. This does
- // NOT included the scroll buttons, only the submenu view.
- bool DoesSubmenuContainLocation(SubmenuView* submenu,
- const gfx::Point& screen_loc);
-
- // Opens/Closes the necessary menus such that state_ matches that of
- // pending_state_. This is invoked if submenus are not opened immediately,
- // but after a delay.
- void CommitPendingSelection();
-
- // If item has a submenu, it is closed. This does NOT update the selection
- // in anyway.
- void CloseMenu(MenuItemView* item);
-
- // If item has a submenu, it is opened. This does NOT update the selection
- // in anyway.
- void OpenMenu(MenuItemView* item);
-
- // Builds the paths of the two menu items into the two paths, and
- // sets first_diff_at to the location of the first difference between the
- // two paths.
- void BuildPathsAndCalculateDiff(MenuItemView* old_item,
- MenuItemView* new_item,
- std::vector<MenuItemView*>* old_path,
- std::vector<MenuItemView*>* new_path,
- size_t* first_diff_at);
-
- // Builds the path for the specified item.
- void BuildMenuItemPath(MenuItemView* item, std::vector<MenuItemView*>* path);
-
- // Starts/stops the timer that commits the pending state to state
- // (opens/closes submenus).
- void StartShowTimer();
- void StopShowTimer();
-
- // Starts/stops the timer cancel the menu. This is used during drag and
- // drop when the drop enters/exits the menu.
- void StartCancelAllTimer();
- void StopCancelAllTimer();
-
- // Calculates the bounds of the menu to show. is_leading is set to match the
- // direction the menu opened in.
- gfx::Rect CalculateMenuBounds(MenuItemView* item,
- bool prefer_leading,
- bool* is_leading);
-
- // Returns the depth of the menu.
- static int MenuDepth(MenuItemView* item);
-
- // Selects the next/previous menu item.
- void IncrementSelection(int delta);
-
- // If the selected item has a submenu and it isn't currently open, the
- // the selection is changed such that the menu opens immediately.
- void OpenSubmenuChangeSelectionIfCan();
-
- // If possible, closes the submenu.
- void CloseSubmenu();
-
- // Returns true if window is the window used to show item, or any of
- // items ancestors.
- bool IsMenuWindow(MenuItemView* item, HWND window);
-
- // Selects by mnemonic, and if that doesn't work tries the first character of
- // the title. Returns true if a match was selected and the menu should exit.
- bool SelectByChar(wchar_t key);
-
- // If there is a window at the location of the event, a new mouse event is
- // generated and posted to it.
- void RepostEvent(SubmenuView* source, const MouseEvent& event);
-
- // Sets the drop target to new_item.
- void SetDropMenuItem(MenuItemView* new_item,
- MenuDelegate::DropPosition position);
-
- // Starts/stops scrolling as appropriate. part gives the part the mouse is
- // over.
- void UpdateScrolling(const MenuPart& part);
-
- // Stops scrolling.
- void StopScrolling();
-
- // The active instance.
- static MenuController* active_instance_;
-
- // If true, Run blocks. If false, Run doesn't block and this is used for
- // drag and drop. Note that the semantics for drag and drop are slightly
- // different: cancel timer is kicked off any time the drag moves outside the
- // menu, mouse events do nothing...
- bool blocking_run_;
-
- // If true, we're showing.
- bool showing_;
-
- // If true, all nested run loops should be exited.
- bool exit_all_;
-
- // Whether we did a capture. We do a capture only if we're blocking and
- // the mouse was down when Run.
- bool did_capture_;
-
- // As the user drags the mouse around pending_state_ changes immediately.
- // When the user stops moving/dragging the mouse (or clicks the mouse)
- // pending_state_ is committed to state_, potentially resulting in
- // opening or closing submenus. This gives a slight delayed effect to
- // submenus as the user moves the mouse around. This is done so that as the
- // user moves the mouse all submenus don't immediately pop.
- State pending_state_;
- State state_;
-
- // If the user accepted the selection, this is the result.
- MenuItemView* result_;
-
- // The mouse event flags when the user clicked on a menu. Is 0 if the
- // user did not use the mousee to select the menu.
- int result_mouse_event_flags_;
-
- // If not empty, it means we're nested. When Run is invoked from within
- // Run, the current state (state_) is pushed onto menu_stack_. This allows
- // MenuController to restore the state when the nested run returns.
- std::list<State> menu_stack_;
-
- // As the mouse moves around submenus are not opened immediately. Instead
- // they open after this timer fires.
- base::OneShotTimer<MenuController> show_timer_;
-
- // Used to invoke CancelAll(). This is used during drag and drop to hide the
- // menu after the mouse moves out of the of the menu. This is necessitated by
- // the lack of an ability to detect when the drag has completed from the drop
- // side.
- base::OneShotTimer<MenuController> cancel_all_timer_;
-
- // Drop target.
- MenuItemView* drop_target_;
- MenuDelegate::DropPosition drop_position_;
-
- // Owner of child windows.
- HWND owner_;
-
- // Indicates a possible drag operation.
- bool possible_drag_;
-
- // Location the mouse was pressed at. Used to detect d&d.
- int press_x_;
- int press_y_;
-
- // We get a slew of drag updated messages as the mouse is over us. To avoid
- // continually processing whether we can drop, we cache the coordinates.
- bool valid_drop_coordinates_;
- int drop_x_;
- int drop_y_;
- int last_drop_operation_;
-
- // If true, we're in the middle of invoking ShowAt on a submenu.
- bool showing_submenu_;
-
- // Task for scrolling the menu. If non-null indicates a scroll is currently
- // underway.
- scoped_ptr<MenuScrollTask> scroll_task_;
-
- DISALLOW_EVIL_CONSTRUCTORS(MenuController);
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_CONTROLS_MENU_CHROME_MENU_H_
diff --git a/chrome/views/controls/menu/controller.h b/chrome/views/controls/menu/controller.h
deleted file mode 100644
index af8af2e..0000000
--- a/chrome/views/controls/menu/controller.h
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_CONTROLS_MENU_CONTROLLER_H_
-#define CHROME_VIEWS_CONTROLS_MENU_CONTROLLER_H_
-
-#include <string>
-
-// TODO(beng): remove this interface and fold it into MenuDelegate.
-
-class Controller {
- public:
- virtual ~Controller() { }
-
- // Whether or not a command is supported by this controller.
- virtual bool SupportsCommand(int id) const = 0;
-
- // Whether or not a command is enabled.
- virtual bool IsCommandEnabled(int id) const = 0;
-
- // Assign the provided string with a contextual label. Returns true if a
- // contextual label exists and false otherwise. This method can be used when
- // implementing a menu or button that needs to have a different label
- // depending on the context. If this method returns false, the default
- // label used when creating the button or menu is used.
- virtual bool GetContextualLabel(int id, std::wstring* out) const = 0;
-
- // Executes a command.
- virtual void ExecuteCommand(int id) = 0;
-};
-
-#endif // CHROME_VIEWS_CONTROLS_MENU_CONTROLLER_H_
diff --git a/chrome/views/controls/menu/menu.cc b/chrome/views/controls/menu/menu.cc
deleted file mode 100644
index 09ebe8d..0000000
--- a/chrome/views/controls/menu/menu.cc
+++ /dev/null
@@ -1,626 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/controls/menu/menu.h"
-
-#include <atlbase.h>
-#include <atlapp.h>
-#include <atlwin.h>
-#include <atlcrack.h>
-#include <atlframe.h>
-#include <atlmisc.h>
-#include <string>
-
-#include "app/gfx/chrome_canvas.h"
-#include "app/gfx/chrome_font.h"
-#include "app/l10n_util.h"
-#include "app/l10n_util_win.h"
-#include "base/gfx/rect.h"
-#include "base/logging.h"
-#include "base/stl_util-inl.h"
-#include "base/string_util.h"
-#include "chrome/views/accelerator.h"
-
-const SkBitmap* Menu::Delegate::kEmptyIcon = 0;
-
-// The width of an icon, including the pixels between the icon and
-// the item label.
-static const int kIconWidth = 23;
-// Margins between the top of the item and the label.
-static const int kItemTopMargin = 3;
-// Margins between the bottom of the item and the label.
-static const int kItemBottomMargin = 4;
-// Margins between the left of the item and the icon.
-static const int kItemLeftMargin = 4;
-// Margins between the right of the item and the label.
-static const int kItemRightMargin = 10;
-// The width for displaying the sub-menu arrow.
-static const int kArrowWidth = 10;
-
-// Current active MenuHostWindow. If NULL, no menu is active.
-static MenuHostWindow* active_host_window = NULL;
-
-// The data of menu items needed to display.
-struct Menu::ItemData {
- std::wstring label;
- SkBitmap icon;
- bool submenu;
-};
-
-namespace {
-
-static int ChromeGetMenuItemID(HMENU hMenu, int pos) {
- // The built-in Windows ::GetMenuItemID doesn't work for submenus,
- // so here's our own implementation.
- MENUITEMINFO mii = {0};
- mii.cbSize = sizeof(mii);
- mii.fMask = MIIM_ID;
- GetMenuItemInfo(hMenu, pos, TRUE, &mii);
- return mii.wID;
-}
-
-// MenuHostWindow -------------------------------------------------------------
-
-// MenuHostWindow is the HWND the HMENU is parented to. MenuHostWindow is used
-// to intercept right clicks on the HMENU and notify the delegate as well as
-// for drawing icons.
-//
-class MenuHostWindow : public CWindowImpl<MenuHostWindow, CWindow,
- CWinTraits<WS_CHILD>> {
- public:
- MenuHostWindow(Menu* menu, HWND parent_window) : menu_(menu) {
- int extended_style = 0;
- // If the menu needs to be created with a right-to-left UI layout, we must
- // set the appropriate RTL flags (such as WS_EX_LAYOUTRTL) property for the
- // underlying HWND.
- if (menu_->delegate_->IsRightToLeftUILayout())
- extended_style |= l10n_util::GetExtendedStyles();
- Create(parent_window, gfx::Rect().ToRECT(), 0, 0, extended_style);
- }
-
- ~MenuHostWindow() {
- DestroyWindow();
- }
-
- DECLARE_FRAME_WND_CLASS(L"MenuHostWindow", NULL);
- BEGIN_MSG_MAP(MenuHostWindow);
- MSG_WM_RBUTTONUP(OnRButtonUp)
- MSG_WM_MEASUREITEM(OnMeasureItem)
- MSG_WM_DRAWITEM(OnDrawItem)
- END_MSG_MAP();
-
- private:
- // NOTE: I really REALLY tried to use WM_MENURBUTTONUP, but I ran into
- // two problems in using it:
- // 1. It doesn't contain the coordinates of the mouse.
- // 2. It isn't invoked for menuitems representing a submenu that have children
- // menu items (not empty).
-
- void OnRButtonUp(UINT w_param, const CPoint& loc) {
- int id;
- if (menu_->delegate_ && FindMenuIDByLocation(menu_, loc, &id))
- menu_->delegate_->ShowContextMenu(menu_, id, loc.x, loc.y, true);
- }
-
- void OnMeasureItem(WPARAM w_param, MEASUREITEMSTRUCT* lpmis) {
- Menu::ItemData* data = reinterpret_cast<Menu::ItemData*>(lpmis->itemData);
- if (data != NULL) {
- ChromeFont font;
- lpmis->itemWidth = font.GetStringWidth(data->label) + kIconWidth +
- kItemLeftMargin + kItemRightMargin -
- GetSystemMetrics(SM_CXMENUCHECK);
- if (data->submenu)
- lpmis->itemWidth += kArrowWidth;
- // If the label contains an accelerator, make room for tab.
- if (data->label.find(L'\t') != std::wstring::npos)
- lpmis->itemWidth += font.GetStringWidth(L" ");
- lpmis->itemHeight = font.height() + kItemBottomMargin + kItemTopMargin;
- } else {
- // Measure separator size.
- lpmis->itemHeight = GetSystemMetrics(SM_CYMENU) / 2;
- lpmis->itemWidth = 0;
- }
- }
-
- void OnDrawItem(UINT wParam, DRAWITEMSTRUCT* lpdis) {
- HDC hDC = lpdis->hDC;
- COLORREF prev_bg_color, prev_text_color;
-
- // Set background color and text color
- if (lpdis->itemState & ODS_SELECTED) {
- prev_bg_color = SetBkColor(hDC, GetSysColor(COLOR_HIGHLIGHT));
- prev_text_color = SetTextColor(hDC, GetSysColor(COLOR_HIGHLIGHTTEXT));
- } else {
- prev_bg_color = SetBkColor(hDC, GetSysColor(COLOR_MENU));
- if (lpdis->itemState & ODS_DISABLED)
- prev_text_color = SetTextColor(hDC, GetSysColor(COLOR_GRAYTEXT));
- else
- prev_text_color = SetTextColor(hDC, GetSysColor(COLOR_MENUTEXT));
- }
-
- if (lpdis->itemData) {
- Menu::ItemData* data =
- reinterpret_cast<Menu::ItemData*>(lpdis->itemData);
-
- // Draw the background.
- HBRUSH hbr = CreateSolidBrush(GetBkColor(hDC));
- FillRect(hDC, &lpdis->rcItem, hbr);
- DeleteObject(hbr);
-
- // Draw the label.
- RECT rect = lpdis->rcItem;
- rect.top += kItemTopMargin;
- // Should we add kIconWidth only when icon.width() != 0 ?
- rect.left += kItemLeftMargin + kIconWidth;
- rect.right -= kItemRightMargin;
- UINT format = DT_TOP | DT_SINGLELINE;
- // Check whether the mnemonics should be underlined.
- BOOL underline_mnemonics;
- SystemParametersInfo(SPI_GETKEYBOARDCUES, 0, &underline_mnemonics, 0);
- if (!underline_mnemonics)
- format |= DT_HIDEPREFIX;
- ChromeFont font;
- HGDIOBJ old_font = static_cast<HFONT>(SelectObject(hDC, font.hfont()));
- int fontsize = font.FontSize();
-
- // If an accelerator is specified (with a tab delimiting the rest of the
- // label from the accelerator), we have to justify the fist part on the
- // left and the accelerator on the right.
- // TODO(jungshik): This will break in RTL UI. Currently, he/ar use the
- // window system UI font and will not hit here.
- std::wstring label = data->label;
- std::wstring accel;
- std::wstring::size_type tab_pos = label.find(L'\t');
- if (tab_pos != std::wstring::npos) {
- accel = label.substr(tab_pos);
- label = label.substr(0, tab_pos);
- }
- DrawTextEx(hDC, const_cast<wchar_t*>(label.data()),
- static_cast<int>(label.size()), &rect, format | DT_LEFT, NULL);
- if (!accel.empty())
- DrawTextEx(hDC, const_cast<wchar_t*>(accel.data()),
- static_cast<int>(accel.size()), &rect,
- format | DT_RIGHT, NULL);
- SelectObject(hDC, old_font);
-
- // Draw the icon after the label, otherwise it would be covered
- // by the label.
- if (data->icon.width() != 0 && data->icon.height() != 0) {
- ChromeCanvas canvas(data->icon.width(), data->icon.height(), false);
- canvas.drawColor(SK_ColorBLACK, SkPorterDuff::kClear_Mode);
- canvas.DrawBitmapInt(data->icon, 0, 0);
- canvas.getTopPlatformDevice().drawToHDC(hDC, lpdis->rcItem.left +
- kItemLeftMargin, lpdis->rcItem.top + (lpdis->rcItem.bottom -
- lpdis->rcItem.top - data->icon.height()) / 2, NULL);
- }
-
- } else {
- // Draw the separator
- lpdis->rcItem.top += (lpdis->rcItem.bottom - lpdis->rcItem.top) / 3;
- DrawEdge(hDC, &lpdis->rcItem, EDGE_ETCHED, BF_TOP);
- }
-
- SetBkColor(hDC, prev_bg_color);
- SetTextColor(hDC, prev_text_color);
- }
-
- bool FindMenuIDByLocation(Menu* menu, const CPoint& loc, int* id) {
- int index = MenuItemFromPoint(NULL, menu->menu_, loc);
- if (index != -1) {
- *id = ChromeGetMenuItemID(menu->menu_, index);
- return true;
- } else {
- for (std::vector<Menu*>::iterator i = menu->submenus_.begin();
- i != menu->submenus_.end(); ++i) {
- if (FindMenuIDByLocation(*i, loc, id))
- return true;
- }
- }
- return false;
- }
-
- // The menu that created us.
- Menu* menu_;
-
- DISALLOW_EVIL_CONSTRUCTORS(MenuHostWindow);
-};
-
-} // namespace
-
-bool Menu::Delegate::IsRightToLeftUILayout() const {
- return l10n_util::GetTextDirection() == l10n_util::RIGHT_TO_LEFT;
-}
-
-const SkBitmap& Menu::Delegate::GetEmptyIcon() const {
- if (kEmptyIcon == NULL)
- kEmptyIcon = new SkBitmap();
- return *kEmptyIcon;
-}
-
-Menu::Menu(Delegate* delegate, AnchorPoint anchor, HWND owner)
- : delegate_(delegate),
- menu_(CreatePopupMenu()),
- anchor_(anchor),
- owner_(owner),
- is_menu_visible_(false),
- owner_draw_(l10n_util::NeedOverrideDefaultUIFont(NULL, NULL)) {
- DCHECK(delegate_);
-}
-
-Menu::Menu(Menu* parent)
- : delegate_(parent->delegate_),
- menu_(CreatePopupMenu()),
- anchor_(parent->anchor_),
- owner_(parent->owner_),
- is_menu_visible_(false),
- owner_draw_(parent->owner_draw_) {
-}
-
-Menu::Menu(HMENU hmenu)
- : delegate_(NULL),
- menu_(hmenu),
- anchor_(TOPLEFT),
- owner_(NULL),
- is_menu_visible_(false),
- owner_draw_(false) {
- DCHECK(menu_);
-}
-
-Menu::~Menu() {
- STLDeleteContainerPointers(submenus_.begin(), submenus_.end());
- STLDeleteContainerPointers(item_data_.begin(), item_data_.end());
- DestroyMenu(menu_);
-}
-
-UINT Menu::GetStateFlagsForItemID(int item_id) const {
- // Use the delegate to get enabled and checked state.
- UINT flags =
- delegate_->IsCommandEnabled(item_id) ? MFS_ENABLED : MFS_DISABLED;
-
- if (delegate_->IsItemChecked(item_id))
- flags |= MFS_CHECKED;
-
- if (delegate_->IsItemDefault(item_id))
- flags |= MFS_DEFAULT;
-
- return flags;
-}
-
-void Menu::AddMenuItemInternal(int index,
- int item_id,
- const std::wstring& label,
- const SkBitmap& icon,
- HMENU submenu,
- MenuItemType type) {
- DCHECK(type != SEPARATOR) << "Call AddSeparator instead!";
-
- if (label.empty() && !delegate_) {
- // No label and no delegate; don't add an empty menu.
- // It appears under some circumstance we're getting an empty label
- // (l10n_util::GetString(IDS_TASK_MANAGER) returns ""). This shouldn't
- // happen, but I'm working over the crash here.
- NOTREACHED();
- return;
- }
-
- MENUITEMINFO mii;
- mii.cbSize = sizeof(mii);
- mii.fMask = MIIM_FTYPE | MIIM_ID;
- if (submenu) {
- mii.fMask |= MIIM_SUBMENU;
- mii.hSubMenu = submenu;
- }
-
- // Set the type and ID.
- if (!owner_draw_) {
- mii.fType = MFT_STRING;
- mii.fMask |= MIIM_STRING;
- } else {
- mii.fType = MFT_OWNERDRAW;
- }
-
- if (type == RADIO)
- mii.fType |= MFT_RADIOCHECK;
-
- mii.wID = item_id;
-
- // Set the item data.
- Menu::ItemData* data = new ItemData;
- item_data_.push_back(data);
- data->submenu = submenu != NULL;
-
- std::wstring actual_label(label.empty() ?
- delegate_->GetLabel(item_id) : label);
-
- // Find out if there is a shortcut we need to append to the label.
- views::Accelerator accelerator(0, false, false, false);
- if (delegate_ && delegate_->GetAcceleratorInfo(item_id, &accelerator)) {
- actual_label += L'\t';
- actual_label += accelerator.GetShortcutText();
- }
- labels_.push_back(actual_label);
-
- if (owner_draw_) {
- if (icon.width() != 0 && icon.height() != 0)
- data->icon = icon;
- else
- data->icon = delegate_->GetIcon(item_id);
- } else {
- mii.dwTypeData = const_cast<wchar_t*>(labels_.back().c_str());
- }
-
- InsertMenuItem(menu_, index, TRUE, &mii);
-}
-
-void Menu::AppendMenuItem(int item_id,
- const std::wstring& label,
- MenuItemType type) {
- AddMenuItem(-1, item_id, label, type);
-}
-
-void Menu::AddMenuItem(int index,
- int item_id,
- const std::wstring& label,
- MenuItemType type) {
- if (type == SEPARATOR)
- AddSeparator(index);
- else
- AddMenuItemInternal(index, item_id, label, SkBitmap(), NULL, type);
-}
-
-Menu* Menu::AppendSubMenu(int item_id, const std::wstring& label) {
- return AddSubMenu(-1, item_id, label);
-}
-
-Menu* Menu::AddSubMenu(int index, int item_id, const std::wstring& label) {
- return AddSubMenuWithIcon(index, item_id, label, SkBitmap());
-}
-
-Menu* Menu::AppendSubMenuWithIcon(int item_id,
- const std::wstring& label,
- const SkBitmap& icon) {
- return AddSubMenuWithIcon(-1, item_id, label, icon);
-}
-
-Menu* Menu::AddSubMenuWithIcon(int index,
- int item_id,
- const std::wstring& label,
- const SkBitmap& icon) {
- if (!owner_draw_ && icon.width() != 0 && icon.height() != 0)
- owner_draw_ = true;
-
- Menu* submenu = new Menu(this);
- submenus_.push_back(submenu);
- AddMenuItemInternal(index, item_id, label, icon, submenu->menu_, NORMAL);
- return submenu;
-}
-
-void Menu::AppendMenuItemWithLabel(int item_id, const std::wstring& label) {
- AddMenuItemWithLabel(-1, item_id, label);
-}
-
-void Menu::AddMenuItemWithLabel(int index, int item_id,
- const std::wstring& label) {
- AddMenuItem(index, item_id, label, Menu::NORMAL);
-}
-
-void Menu::AppendDelegateMenuItem(int item_id) {
- AddDelegateMenuItem(-1, item_id);
-}
-
-void Menu::AddDelegateMenuItem(int index, int item_id) {
- AddMenuItem(index, item_id, std::wstring(), Menu::NORMAL);
-}
-
-void Menu::AppendSeparator() {
- AddSeparator(-1);
-}
-
-void Menu::AddSeparator(int index) {
- MENUITEMINFO mii;
- mii.cbSize = sizeof(mii);
- mii.fMask = MIIM_FTYPE;
- mii.fType = MFT_SEPARATOR;
- InsertMenuItem(menu_, index, TRUE, &mii);
-}
-
-void Menu::AppendMenuItemWithIcon(int item_id,
- const std::wstring& label,
- const SkBitmap& icon) {
- AddMenuItemWithIcon(-1, item_id, label, icon);
-}
-
-void Menu::AddMenuItemWithIcon(int index,
- int item_id,
- const std::wstring& label,
- const SkBitmap& icon) {
- if (!owner_draw_)
- owner_draw_ = true;
- AddMenuItemInternal(index, item_id, label, icon, NULL, Menu::NORMAL);
-}
-
-void Menu::EnableMenuItemByID(int item_id, bool enabled) {
- UINT enable_flags = enabled ? MF_ENABLED : MF_DISABLED | MF_GRAYED;
- EnableMenuItem(menu_, item_id, MF_BYCOMMAND | enable_flags);
-}
-
-void Menu::EnableMenuItemAt(int index, bool enabled) {
- UINT enable_flags = enabled ? MF_ENABLED : MF_DISABLED | MF_GRAYED;
- EnableMenuItem(menu_, index, MF_BYPOSITION | enable_flags);
-}
-
-void Menu::SetMenuLabel(int item_id, const std::wstring& label) {
- MENUITEMINFO mii = {0};
- mii.cbSize = sizeof(mii);
- mii.fMask = MIIM_STRING;
- mii.dwTypeData = const_cast<wchar_t*>(label.c_str());
- mii.cch = static_cast<UINT>(label.size());
- SetMenuItemInfo(menu_, item_id, false, &mii);
-}
-
-DWORD Menu::GetTPMAlignFlags() const {
- // The manner in which we handle the menu alignment depends on whether or not
- // the menu is displayed within a mirrored view. If the UI is mirrored, the
- // alignment needs to be fliped so that instead of aligning the menu to the
- // right of the point, we align it to the left and vice versa.
- DWORD align_flags = TPM_TOPALIGN;
- switch (anchor_) {
- case TOPLEFT:
- if (delegate_->IsRightToLeftUILayout()) {
- align_flags |= TPM_RIGHTALIGN;
- } else {
- align_flags |= TPM_LEFTALIGN;
- }
- break;
-
- case TOPRIGHT:
- if (delegate_->IsRightToLeftUILayout()) {
- align_flags |= TPM_LEFTALIGN;
- } else {
- align_flags |= TPM_RIGHTALIGN;
- }
- break;
-
- default:
- NOTREACHED();
- return 0;
- }
- return align_flags;
-}
-
-bool Menu::SetIcon(const SkBitmap& icon, int item_id) {
- if (!owner_draw_)
- owner_draw_ = true;
-
- const int num_items = GetMenuItemCount(menu_);
- int sep_count = 0;
- for (int i = 0; i < num_items; ++i) {
- if (!(GetMenuState(menu_, i, MF_BYPOSITION) & MF_SEPARATOR)) {
- if (ChromeGetMenuItemID(menu_, i) == item_id) {
- item_data_[i - sep_count]->icon = icon;
- // When the menu is running, we use SetMenuItemInfo to let Windows
- // update the item information so that the icon being displayed
- // could change immediately.
- if (active_host_window) {
- MENUITEMINFO mii;
- mii.cbSize = sizeof(mii);
- mii.fMask = MIIM_FTYPE | MIIM_DATA;
- mii.fType = MFT_OWNERDRAW;
- mii.dwItemData =
- reinterpret_cast<ULONG_PTR>(item_data_[i - sep_count]);
- SetMenuItemInfo(menu_, item_id, false, &mii);
- }
- return true;
- }
- } else {
- ++sep_count;
- }
- }
-
- // Continue searching for the item in submenus.
- for (size_t i = 0; i < submenus_.size(); ++i) {
- if (submenus_[i]->SetIcon(icon, item_id))
- return true;
- }
-
- return false;
-}
-
-void Menu::SetMenuInfo() {
- const int num_items = GetMenuItemCount(menu_);
- int sep_count = 0;
- for (int i = 0; i < num_items; ++i) {
- MENUITEMINFO mii_info;
- mii_info.cbSize = sizeof(mii_info);
- // Get the menu's original type.
- mii_info.fMask = MIIM_FTYPE;
- GetMenuItemInfo(menu_, i, MF_BYPOSITION, &mii_info);
- // Set item states.
- if (!(mii_info.fType & MF_SEPARATOR)) {
- const int id = ChromeGetMenuItemID(menu_, i);
-
- MENUITEMINFO mii;
- mii.cbSize = sizeof(mii);
- mii.fMask = MIIM_STATE | MIIM_FTYPE | MIIM_DATA | MIIM_STRING;
- // We also need MFT_STRING for owner drawn items in order to let Windows
- // handle the accelerators for us.
- mii.fType = MFT_STRING;
- if (owner_draw_)
- mii.fType |= MFT_OWNERDRAW;
- // If the menu originally has radiocheck type, we should follow it.
- if (mii_info.fType & MFT_RADIOCHECK)
- mii.fType |= MFT_RADIOCHECK;
- mii.fState = GetStateFlagsForItemID(id);
-
- // Validate the label. If there is a contextual label, use it, otherwise
- // default to the static label
- std::wstring label;
- if (!delegate_->GetContextualLabel(id, &label))
- label = labels_[i - sep_count];
-
- if (owner_draw_) {
- item_data_[i - sep_count]->label = label;
- mii.dwItemData = reinterpret_cast<ULONG_PTR>(item_data_[i - sep_count]);
- }
- mii.dwTypeData = const_cast<wchar_t*>(label.c_str());
- mii.cch = static_cast<UINT>(label.size());
- SetMenuItemInfo(menu_, i, true, &mii);
- } else {
- // Set data for owner drawn separators. Set dwItemData NULL to indicate
- // a separator.
- if (owner_draw_) {
- MENUITEMINFO mii;
- mii.cbSize = sizeof(mii);
- mii.fMask = MIIM_FTYPE;
- mii.fType = MFT_SEPARATOR | MFT_OWNERDRAW;
- mii.dwItemData = NULL;
- SetMenuItemInfo(menu_, i, true, &mii);
- }
- ++sep_count;
- }
- }
-
- for (size_t i = 0; i < submenus_.size(); ++i)
- submenus_[i]->SetMenuInfo();
-}
-
-void Menu::RunMenuAt(int x, int y) {
- SetMenuInfo();
-
- delegate_->MenuWillShow();
-
- // NOTE: we don't use TPM_RIGHTBUTTON here as it breaks selecting by way of
- // press, drag, release. See bugs 718 and 8560.
- UINT flags =
- GetTPMAlignFlags() | TPM_LEFTBUTTON | TPM_RETURNCMD | TPM_RECURSE;
- is_menu_visible_ = true;
- DCHECK(owner_);
- // In order for context menus on menus to work, the context menu needs to
- // share the same window as the first menu is parented to.
- bool created_host = false;
- if (!active_host_window) {
- created_host = true;
- active_host_window = new MenuHostWindow(this, owner_);
- }
- UINT selected_id =
- TrackPopupMenuEx(menu_, flags, x, y, active_host_window->m_hWnd, NULL);
- if (created_host) {
- delete active_host_window;
- active_host_window = NULL;
- }
- is_menu_visible_ = false;
-
- // Execute the chosen command
- if (selected_id != 0)
- delegate_->ExecuteCommand(selected_id);
-}
-
-void Menu::Cancel() {
- DCHECK(is_menu_visible_);
- EndMenu();
-}
-
-int Menu::ItemCount() {
- return GetMenuItemCount(menu_);
-}
diff --git a/chrome/views/controls/menu/menu.h b/chrome/views/controls/menu/menu.h
deleted file mode 100644
index 67c292a..0000000
--- a/chrome/views/controls/menu/menu.h
+++ /dev/null
@@ -1,355 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_CONTROLS_MENU_VIEWS_MENU_H_
-#define CHROME_CONTROLS_MENU_VIEWS_MENU_H_
-
-#include <windows.h>
-
-#include <vector>
-
-#include "base/basictypes.h"
-#include "chrome/views/controls/menu/controller.h"
-
-class SkBitmap;
-
-namespace {
-class MenuHostWindow;
-}
-
-namespace views {
-class Accelerator;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Menu class
-//
-// A wrapper around a Win32 HMENU handle that provides convenient APIs for
-// menu construction, display and subsequent command execution.
-//
-///////////////////////////////////////////////////////////////////////////////
-class Menu {
- friend class MenuHostWindow;
-
- public:
- /////////////////////////////////////////////////////////////////////////////
- //
- // Delegate Interface
- //
- // Classes implement this interface to tell the menu system more about each
- // item as it is created.
- //
- /////////////////////////////////////////////////////////////////////////////
- class Delegate : public Controller {
- public:
- virtual ~Delegate() { }
-
- // Whether or not an item should be shown as checked.
- virtual bool IsItemChecked(int id) const {
- return false;
- }
-
- // Whether or not an item should be shown as the default (using bold).
- // There can only be one default menu item.
- virtual bool IsItemDefault(int id) const {
- return false;
- }
-
- // The string shown for the menu item.
- virtual std::wstring GetLabel(int id) const {
- return std::wstring();
- }
-
- // The delegate needs to implement this function if it wants to display
- // the shortcut text next to each menu item. If there is an accelerator
- // for a given item id, the implementor must return it.
- virtual bool GetAcceleratorInfo(int id, views::Accelerator* accel) {
- return false;
- }
-
- // The icon shown for the menu item.
- virtual const SkBitmap& GetIcon(int id) const {
- return GetEmptyIcon();
- }
-
- // The number of items to show in the menu
- virtual int GetItemCount() const {
- return 0;
- }
-
- // Whether or not an item is a separator.
- virtual bool IsItemSeparator(int id) const {
- return false;
- }
-
- // Shows the context menu with the specified id. This is invoked when the
- // user does the appropriate gesture to show a context menu. The id
- // identifies the id of the menu to show the context menu for.
- // is_mouse_gesture is true if this is the result of a mouse gesture.
- // If this is not the result of a mouse gesture x/y is the recommended
- // location to display the content menu at. In either case, x/y is in
- // screen coordinates.
- virtual void ShowContextMenu(Menu* source,
- int id,
- int x,
- int y,
- bool is_mouse_gesture) {
- }
-
- // Whether an item has an icon.
- virtual bool HasIcon(int id) const {
- return false;
- }
-
- // Notification that the menu is about to be popped up.
- virtual void MenuWillShow() {
- }
-
- // Whether to create a right-to-left menu. The default implementation
- // returns true if the locale's language is a right-to-left language (such
- // as Hebrew) and false otherwise. This is generally the right behavior
- // since there is no reason to show left-to-right menus for right-to-left
- // locales. However, subclasses can override this behavior so that the menu
- // is a right-to-left menu only if the view's layout is right-to-left
- // (since the view can use a different layout than the locale's language
- // layout).
- virtual bool IsRightToLeftUILayout() const;
-
- // Controller
- virtual bool SupportsCommand(int id) const {
- return true;
- }
- virtual bool IsCommandEnabled(int id) const {
- return true;
- }
- virtual bool GetContextualLabel(int id, std::wstring* out) const {
- return false;
- }
- virtual void ExecuteCommand(int id) {
- }
-
- protected:
- // Returns an empty icon. Will initialize kEmptyIcon if it hasn't been
- // initialized.
- const SkBitmap& GetEmptyIcon() const;
-
- private:
- // Will be initialized to an icon of 0 width and 0 height when first using.
- // An empty icon means we don't need to draw it.
- static const SkBitmap* kEmptyIcon;
- };
-
- // This class is a helper that simply wraps a controller and forwards all
- // state and execution actions to it. Use this when you're not defining your
- // own custom delegate, but just hooking a context menu to some existing
- // controller elsewhere.
- class BaseControllerDelegate : public Delegate {
- public:
- explicit BaseControllerDelegate(Controller* wrapped)
- : controller_(wrapped) {
- }
-
- // Overridden from Menu::Delegate
- virtual bool SupportsCommand(int id) const {
- return controller_->SupportsCommand(id);
- }
- virtual bool IsCommandEnabled(int id) const {
- return controller_->IsCommandEnabled(id);
- }
- virtual void ExecuteCommand(int id) {
- controller_->ExecuteCommand(id);
- }
- virtual bool GetContextualLabel(int id, std::wstring* out) const {
- return controller_->GetContextualLabel(id, out);
- }
-
- private:
- // The internal controller that we wrap to forward state and execution
- // actions to.
- Controller* controller_;
-
- DISALLOW_COPY_AND_ASSIGN(BaseControllerDelegate);
- };
-
- // How this popup should align itself relative to the point it is run at.
- enum AnchorPoint {
- TOPLEFT,
- TOPRIGHT
- };
-
- // Different types of menu items
- enum MenuItemType {
- NORMAL,
- CHECKBOX,
- RADIO,
- SEPARATOR
- };
-
- // Construct a Menu using the specified controller to determine command
- // state.
- // delegate A Menu::Delegate implementation that provides more
- // information about the Menu presentation.
- // anchor An alignment hint for the popup menu.
- // owner The window that the menu is being brought up relative
- // to. Not actually used for anything but must not be
- // NULL.
- Menu(Delegate* delegate, AnchorPoint anchor, HWND owner);
- // Alternatively, a Menu object can be constructed wrapping an existing
- // HMENU. This can be used to use the convenience methods to insert
- // menu items and manage label string ownership. However this kind of
- // Menu object cannot use the delegate.
- explicit Menu(HMENU hmenu);
- virtual ~Menu();
-
- void set_delegate(Delegate* delegate) { delegate_ = delegate; }
-
- // Adds an item to this menu.
- // item_id The id of the item, used to identify it in delegate callbacks
- // or (if delegate is NULL) to identify the command associated
- // with this item with the controller specified in the ctor. Note
- // that this value should not be 0 as this has a special meaning
- // ("NULL command, no item selected")
- // label The text label shown.
- // type The type of item.
- void AppendMenuItem(int item_id,
- const std::wstring& label,
- MenuItemType type);
- void AddMenuItem(int index,
- int item_id,
- const std::wstring& label,
- MenuItemType type);
-
- // Append a submenu to this menu.
- // The returned pointer is owned by this menu.
- Menu* AppendSubMenu(int item_id,
- const std::wstring& label);
- Menu* AddSubMenu(int index, int item_id, const std::wstring& label);
-
- // Append a submenu with an icon to this menu
- // The returned pointer is owned by this menu.
- // Unless the icon is empty, calling this function forces the Menu class
- // to draw the menu, instead of relying on Windows.
- Menu* AppendSubMenuWithIcon(int item_id,
- const std::wstring& label,
- const SkBitmap& icon);
- Menu* AddSubMenuWithIcon(int index,
- int item_id,
- const std::wstring& label,
- const SkBitmap& icon);
-
- // This is a convenience for standard text label menu items where the label
- // is provided with this call.
- void AppendMenuItemWithLabel(int item_id, const std::wstring& label);
- void AddMenuItemWithLabel(int index, int item_id, const std::wstring& label);
-
- // This is a convenience for text label menu items where the label is
- // provided by the delegate.
- void AppendDelegateMenuItem(int item_id);
- void AddDelegateMenuItem(int index, int item_id);
-
- // Adds a separator to this menu
- void AppendSeparator();
- void AddSeparator(int index);
-
- // Appends a menu item with an icon. This is for the menu item which
- // needs an icon. Calling this function forces the Menu class to draw
- // the menu, instead of relying on Windows.
- void AppendMenuItemWithIcon(int item_id,
- const std::wstring& label,
- const SkBitmap& icon);
- void AddMenuItemWithIcon(int index,
- int item_id,
- const std::wstring& label,
- const SkBitmap& icon);
-
- // Enables or disables the item with the specified id.
- void EnableMenuItemByID(int item_id, bool enabled);
- void EnableMenuItemAt(int index, bool enabled);
-
- // Sets menu label at specified index.
- void SetMenuLabel(int item_id, const std::wstring& label);
-
- // Sets an icon for an item with a given item_id. Calling this function
- // also forces the Menu class to draw the menu, instead of relying on Windows.
- // Returns false if the item with |item_id| is not found.
- bool SetIcon(const SkBitmap& icon, int item_id);
-
- // Shows the menu, blocks until the user dismisses the menu or selects an
- // item, and executes the command for the selected item (if any).
- // Warning: Blocking call. Will implicitly run a message loop.
- void RunMenuAt(int x, int y);
-
- // Cancels the menu.
- virtual void Cancel();
-
- // Returns the number of menu items.
- int ItemCount();
-
- protected:
- // The delegate that is being used to get information about the presentation.
- Delegate* delegate_;
-
- private:
- // The data of menu items needed to display.
- struct ItemData;
-
- explicit Menu(Menu* parent);
-
- void AddMenuItemInternal(int index,
- int item_id,
- const std::wstring& label,
- const SkBitmap& icon,
- HMENU submenu,
- MenuItemType type);
-
- // Sets menu information before displaying, including sub-menus.
- void SetMenuInfo();
-
- // Get all the state flags for the |fState| field of MENUITEMINFO for the
- // item with the specified id. |delegate| is consulted if non-NULL about
- // the state of the item in preference to |controller_|.
- UINT GetStateFlagsForItemID(int item_id) const;
-
- // Gets the Win32 TPM alignment flags for the specified AnchorPoint.
- DWORD GetTPMAlignFlags() const;
-
- // The Win32 Menu Handle we wrap
- HMENU menu_;
-
- // The window that would receive WM_COMMAND messages when the user selects
- // an item from the menu.
- HWND owner_;
-
- // This list is used to store the default labels for the menu items.
- // We may use contextual labels when RunMenu is called, so we must save
- // a copy of default ones here.
- std::vector<std::wstring> labels_;
-
- // A flag to indicate whether this menu will be drawn by the Menu class.
- // If it's true, all the menu items will be owner drawn. Otherwise,
- // all the drawing will be done by Windows.
- bool owner_draw_;
-
- // How this popup menu should be aligned relative to the point it is run at.
- AnchorPoint anchor_;
-
- // This list is to store the string labels and icons to display. It's used
- // when owner_draw_ is true. We give MENUITEMINFO pointers to these
- // structures to specify what we'd like to draw. If owner_draw_ is false,
- // we only give MENUITEMINFO pointers to the labels_.
- // The label member of the ItemData structure comes from either labels_ or
- // the GetContextualLabel.
- std::vector<ItemData*> item_data_;
-
- // Our sub-menus, if any.
- std::vector<Menu*> submenus_;
-
- // Whether the menu is visible.
- bool is_menu_visible_;
-
- DISALLOW_COPY_AND_ASSIGN(Menu);
-};
-
-#endif // CHROME_CONTROLS_MENU_VIEWS_MENU_H_
diff --git a/chrome/views/controls/menu/view_menu_delegate.h b/chrome/views/controls/menu/view_menu_delegate.h
deleted file mode 100644
index 3f8f190..0000000
--- a/chrome/views/controls/menu/view_menu_delegate.h
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_CONTROLS_MENU_VIEW_MENU_DELEGATE_H_
-#define CHROME_VIEWS_CONTROLS_MENU_VIEW_MENU_DELEGATE_H_
-
-#include "base/gfx/native_widget_types.h"
-
-namespace views {
-
-class View;
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// ViewMenuDelegate
-//
-// An interface that allows a component to tell a View about a menu that it
-// has constructed that the view can show (e.g. for MenuButton views, or as a
-// context menu.)
-//
-////////////////////////////////////////////////////////////////////////////////
-class ViewMenuDelegate {
- public:
- // Create and show a menu at the specified position. Source is the view the
- // ViewMenuDelegate was set on.
- virtual void RunMenu(View* source,
- const CPoint& pt,
- gfx::NativeView hwnd) = 0;
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_CONTROLS_MENU_VIEW_MENU_DELEGATE_H_
diff --git a/chrome/views/controls/message_box_view.cc b/chrome/views/controls/message_box_view.cc
deleted file mode 100644
index 6fb895a..0000000
--- a/chrome/views/controls/message_box_view.cc
+++ /dev/null
@@ -1,209 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/controls/message_box_view.h"
-
-#include "app/l10n_util.h"
-#include "app/message_box_flags.h"
-#include "base/clipboard.h"
-#include "base/message_loop.h"
-#include "base/scoped_clipboard_writer.h"
-#include "base/string_util.h"
-#include "chrome/browser/browser_process.h"
-#include "chrome/browser/views/standard_layout.h"
-#include "chrome/views/controls/button/checkbox.h"
-#include "chrome/views/window/client_view.h"
-#include "grit/generated_resources.h"
-
-static const int kDefaultMessageWidth = 320;
-
-///////////////////////////////////////////////////////////////////////////////
-// MessageBoxView, public:
-
-MessageBoxView::MessageBoxView(int dialog_flags,
- const std::wstring& message,
- const std::wstring& default_prompt,
- int message_width)
- : message_label_(new views::Label(message)),
- prompt_field_(NULL),
- icon_(NULL),
- checkbox_(NULL),
- message_width_(message_width),
- focus_grabber_factory_(this) {
- Init(dialog_flags, default_prompt);
-}
-
-MessageBoxView::MessageBoxView(int dialog_flags,
- const std::wstring& message,
- const std::wstring& default_prompt)
- : message_label_(new views::Label(message)),
- prompt_field_(NULL),
- icon_(NULL),
- checkbox_(NULL),
- message_width_(kDefaultMessageWidth),
- focus_grabber_factory_(this) {
- Init(dialog_flags, default_prompt);
-}
-
-std::wstring MessageBoxView::GetInputText() {
- if (prompt_field_)
- return prompt_field_->GetText();
- return EmptyWString();
-}
-
-bool MessageBoxView::IsCheckBoxSelected() {
- return checkbox_ ? checkbox_->checked() : false;
-}
-
-void MessageBoxView::SetIcon(const SkBitmap& icon) {
- if (!icon_)
- icon_ = new views::ImageView();
- icon_->SetImage(icon);
- icon_->SetBounds(0, 0, icon.width(), icon.height());
- ResetLayoutManager();
-}
-
-void MessageBoxView::SetCheckBoxLabel(const std::wstring& label) {
- if (!checkbox_)
- checkbox_ = new views::Checkbox(label);
- else
- checkbox_->SetLabel(label);
- ResetLayoutManager();
-}
-
-void MessageBoxView::SetCheckBoxSelected(bool selected) {
- if (!checkbox_)
- return;
- checkbox_->SetChecked(selected);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// MessageBoxView, views::View overrides:
-
-void MessageBoxView::ViewHierarchyChanged(bool is_add,
- views::View* parent,
- views::View* child) {
- if (child == this && is_add) {
- if (prompt_field_)
- prompt_field_->SelectAll();
- }
-}
-
-bool MessageBoxView::AcceleratorPressed(
- const views::Accelerator& accelerator) {
- // We only accepts Ctrl-C.
- DCHECK(accelerator.GetKeyCode() == 'C' && accelerator.IsCtrlDown());
-
- Clipboard* clipboard = g_browser_process->clipboard();
- if (!clipboard)
- return false;
-
- ScopedClipboardWriter scw(clipboard);
- scw.WriteText(message_label_->GetText());
- return true;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// MessageBoxView, private:
-
-void MessageBoxView::Init(int dialog_flags,
- const std::wstring& default_prompt) {
- message_label_->SetMultiLine(true);
- message_label_->SetAllowCharacterBreak(true);
- if (dialog_flags & MessageBoxFlags::kAutoDetectAlignment) {
- // Determine the alignment and directionality based on the first character
- // with strong directionality.
- l10n_util::TextDirection direction =
- l10n_util::GetFirstStrongCharacterDirection(message_label_->GetText());
- views::Label::Alignment alignment;
- if (direction == l10n_util::RIGHT_TO_LEFT)
- alignment = views::Label::ALIGN_RIGHT;
- else
- alignment = views::Label::ALIGN_LEFT;
- // In addition, we should set the RTL alignment mode as
- // AUTO_DETECT_ALIGNMENT so that the alignment will not be flipped around
- // in RTL locales.
- message_label_->SetRTLAlignmentMode(views::Label::AUTO_DETECT_ALIGNMENT);
- message_label_->SetHorizontalAlignment(alignment);
- } else {
- message_label_->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
- }
-
- if (dialog_flags & MessageBoxFlags::kFlagHasPromptField) {
- prompt_field_ = new views::TextField;
- prompt_field_->SetText(default_prompt);
- }
-
- ResetLayoutManager();
-}
-
-void MessageBoxView::ResetLayoutManager() {
- using views::GridLayout;
- using views::ColumnSet;
-
- // Initialize the Grid Layout Manager used for this dialog box.
- GridLayout* layout = CreatePanelGridLayout(this);
- SetLayoutManager(layout);
-
- gfx::Size icon_size;
- if (icon_)
- icon_size = icon_->GetPreferredSize();
-
- // Add the column set for the message displayed at the top of the dialog box.
- // And an icon, if one has been set.
- const int message_column_view_set_id = 0;
- ColumnSet* column_set = layout->AddColumnSet(message_column_view_set_id);
- if (icon_) {
- column_set->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 0,
- GridLayout::FIXED, icon_size.width(),
- icon_size.height());
- column_set->AddPaddingColumn(0, kUnrelatedControlHorizontalSpacing);
- }
- column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1,
- GridLayout::FIXED, message_width_, 0);
-
- // Column set for prompt textfield, if one has been set.
- const int textfield_column_view_set_id = 1;
- if (prompt_field_) {
- column_set = layout->AddColumnSet(textfield_column_view_set_id);
- if (icon_) {
- column_set->AddPaddingColumn(0,
- icon_size.width() + kUnrelatedControlHorizontalSpacing);
- }
- column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1,
- GridLayout::USE_PREF, 0, 0);
- }
-
- // Column set for checkbox, if one has been set.
- const int checkbox_column_view_set_id = 2;
- if (checkbox_) {
- column_set = layout->AddColumnSet(checkbox_column_view_set_id);
- if (icon_) {
- column_set->AddPaddingColumn(0,
- icon_size.width() + kUnrelatedControlHorizontalSpacing);
- }
- column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1,
- GridLayout::USE_PREF, 0, 0);
- }
-
- layout->StartRow(0, message_column_view_set_id);
- if (icon_)
- layout->AddView(icon_);
-
- layout->AddView(message_label_);
-
- if (prompt_field_) {
- layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
- layout->StartRow(0, textfield_column_view_set_id);
- layout->AddView(prompt_field_);
- }
-
- if (checkbox_) {
- layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
- layout->StartRow(0, checkbox_column_view_set_id);
- layout->AddView(checkbox_);
- }
-
- layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
-}
diff --git a/chrome/views/controls/message_box_view.h b/chrome/views/controls/message_box_view.h
deleted file mode 100644
index c3960ac..0000000
--- a/chrome/views/controls/message_box_view.h
+++ /dev/null
@@ -1,94 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_CONTROLS_MESSAGE_BOX_VIEW_VIEW_H_
-#define CHROME_VIEWS_CONTROLS_MESSAGE_BOX_VIEW_VIEW_H_
-
-#include <string>
-
-#include "base/task.h"
-#include "chrome/views/controls/image_view.h"
-#include "chrome/views/controls/label.h"
-#include "chrome/views/controls/text_field.h"
-#include "chrome/views/view.h"
-
-namespace views {
-class Checkbox;
-}
-
-// This class displays the contents of a message box. It is intended for use
-// within a constrained window, and has options for a message, prompt, OK
-// and Cancel buttons.
-class MessageBoxView : public views::View {
- public:
- MessageBoxView(int dialog_flags,
- const std::wstring& message,
- const std::wstring& default_prompt,
- int message_width);
-
- MessageBoxView(int dialog_flags,
- const std::wstring& message,
- const std::wstring& default_prompt);
-
- // Returns the text box.
- views::TextField* text_box() { return prompt_field_; }
-
- // Returns user entered data in the prompt field.
- std::wstring GetInputText();
-
- // Returns true if a checkbox is selected, false otherwise. (And false if
- // the message box has no checkbox.)
- bool IsCheckBoxSelected();
-
- // Adds |icon| to the upper left of the message box or replaces the current
- // icon. To start out, the message box has no icon.
- void SetIcon(const SkBitmap& icon);
-
- // Adds a checkbox with the specified label to the message box if this is the
- // first call. Otherwise, it changes the label of the current checkbox. To
- // start, the message box has no checkbox until this function is called.
- void SetCheckBoxLabel(const std::wstring& label);
-
- // Sets the state of the check-box.
- void SetCheckBoxSelected(bool selected);
-
- protected:
- // Layout and Painting functions.
- virtual void ViewHierarchyChanged(bool is_add,
- views::View* parent,
- views::View* child);
-
- // Handles Ctrl-C and writes the message in the system clipboard.
- virtual bool AcceleratorPressed(const views::Accelerator& accelerator);
-
- private:
- // Sets up the layout manager and initializes the prompt field. This should
- // only be called once, from the constructor.
- void Init(int dialog_flags, const std::wstring& default_prompt);
-
- // Sets up the layout manager based on currently initialized views. Should be
- // called when a view is initialized or changed.
- void ResetLayoutManager();
-
- // Message for the message box.
- views::Label* message_label_;
-
- // Input text field for the message box.
- views::TextField* prompt_field_;
-
- // Icon displayed in the upper left corner of the message box.
- views::ImageView* icon_;
-
- // Checkbox for the message box.
- views::Checkbox* checkbox_;
-
- // Maximum width of the message label.
- int message_width_;
-
- ScopedRunnableMethodFactory<MessageBoxView> focus_grabber_factory_;
-
- DISALLOW_EVIL_CONSTRUCTORS(MessageBoxView);
-};
-
-#endif // CHROME_VIEWS_CONTROLS_MESSAGE_BOX_VIEW_VIEW_H_
diff --git a/chrome/views/controls/native_control.cc b/chrome/views/controls/native_control.cc
deleted file mode 100644
index bf40711..0000000
--- a/chrome/views/controls/native_control.cc
+++ /dev/null
@@ -1,385 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/controls/native_control.h"
-
-#include <atlbase.h>
-#include <atlapp.h>
-#include <atlcrack.h>
-#include <atlframe.h>
-
-#include "app/l10n_util_win.h"
-#include "base/logging.h"
-#include "base/win_util.h"
-#include "chrome/views/background.h"
-#include "chrome/views/border.h"
-#include "chrome/views/controls/hwnd_view.h"
-#include "chrome/views/focus/focus_manager.h"
-#include "chrome/views/widget/widget.h"
-#include "base/gfx/native_theme.h"
-
-namespace views {
-
-// Maps to the original WNDPROC for the controller window before we subclassed
-// it.
-static const wchar_t* const kHandlerKey =
- L"__CONTROL_ORIGINAL_MESSAGE_HANDLER__";
-
-// Maps to the NativeControl.
-static const wchar_t* const kNativeControlKey = L"__NATIVE_CONTROL__";
-
-class NativeControlContainer : public CWindowImpl<NativeControlContainer,
- CWindow,
- CWinTraits<WS_CHILD | WS_CLIPSIBLINGS |
- WS_CLIPCHILDREN>> {
- public:
-
- explicit NativeControlContainer(NativeControl* parent) : parent_(parent),
- control_(NULL) {
- Create(parent->GetWidget()->GetNativeView());
- ::ShowWindow(m_hWnd, SW_SHOW);
- }
-
- virtual ~NativeControlContainer() {
- }
-
- // NOTE: If you add a new message, be sure and verify parent_ is valid before
- // calling into parent_.
- DECLARE_FRAME_WND_CLASS(L"ChromeViewsNativeControlContainer", NULL);
- BEGIN_MSG_MAP(NativeControlContainer);
- MSG_WM_CREATE(OnCreate);
- MSG_WM_ERASEBKGND(OnEraseBkgnd);
- MSG_WM_PAINT(OnPaint);
- MSG_WM_SIZE(OnSize);
- MSG_WM_NOTIFY(OnNotify);
- MSG_WM_COMMAND(OnCommand);
- MSG_WM_DESTROY(OnDestroy);
- MSG_WM_CONTEXTMENU(OnContextMenu);
- MSG_WM_CTLCOLORBTN(OnCtlColorBtn);
- MSG_WM_CTLCOLORSTATIC(OnCtlColorStatic)
- END_MSG_MAP();
-
- HWND GetControl() {
- return control_;
- }
-
- // Called when the parent is getting deleted. This control stays around until
- // it gets the OnFinalMessage call.
- void ResetParent() {
- parent_ = NULL;
- }
-
- void OnFinalMessage(HWND hwnd) {
- if (parent_)
- parent_->NativeControlDestroyed();
- delete this;
- }
- private:
-
- LRESULT OnCreate(LPCREATESTRUCT create_struct) {
- TRACK_HWND_CREATION(m_hWnd);
-
- control_ = parent_->CreateNativeControl(m_hWnd);
- TRACK_HWND_CREATION(control_);
-
- FocusManager::InstallFocusSubclass(control_, parent_);
-
- // We subclass the control hwnd so we get the WM_KEYDOWN messages.
- WNDPROC original_handler =
- win_util::SetWindowProc(control_,
- &NativeControl::NativeControlWndProc);
- SetProp(control_, kHandlerKey, original_handler);
- SetProp(control_, kNativeControlKey , parent_);
-
- ::ShowWindow(control_, SW_SHOW);
- return 1;
- }
-
- LRESULT OnEraseBkgnd(HDC dc) {
- return 1;
- }
-
- void OnPaint(HDC ignore) {
- PAINTSTRUCT ps;
- HDC dc = ::BeginPaint(*this, &ps);
- ::EndPaint(*this, &ps);
- }
-
- void OnSize(int type, const CSize& sz) {
- ::MoveWindow(control_, 0, 0, sz.cx, sz.cy, TRUE);
- }
-
- LRESULT OnCommand(UINT code, int id, HWND source) {
- return parent_ ? parent_->OnCommand(code, id, source) : 0;
- }
-
- LRESULT OnNotify(int w_param, LPNMHDR l_param) {
- if (parent_)
- return parent_->OnNotify(w_param, l_param);
- else
- return 0;
- }
-
- void OnDestroy() {
- if (parent_)
- parent_->OnDestroy();
- TRACK_HWND_DESTRUCTION(m_hWnd);
- }
-
- void OnContextMenu(HWND window, const CPoint& location) {
- if (parent_)
- parent_->OnContextMenu(location);
- }
-
- // We need to find an ancestor with a non-null background, and
- // ask it for a (solid color) brush that approximates
- // the background. The caller will use this when drawing
- // the native control as a background color, particularly
- // for radiobuttons and XP style pushbuttons.
- LRESULT OnCtlColor(UINT msg, HDC dc, HWND control) {
- const View *ancestor = parent_;
- while (ancestor) {
- const Background *background = ancestor->background();
- if (background) {
- HBRUSH brush = background->GetNativeControlBrush();
- if (brush)
- return reinterpret_cast<LRESULT>(brush);
- }
- ancestor = ancestor->GetParent();
- }
-
- // COLOR_BTNFACE is the default for dialog box backgrounds.
- return reinterpret_cast<LRESULT>(GetSysColorBrush(COLOR_BTNFACE));
- }
-
- LRESULT OnCtlColorBtn(HDC dc, HWND control) {
- return OnCtlColor(WM_CTLCOLORBTN, dc, control);
- }
-
- LRESULT OnCtlColorStatic(HDC dc, HWND control) {
- return OnCtlColor(WM_CTLCOLORSTATIC, dc, control);
- }
-
- NativeControl* parent_;
- HWND control_;
- DISALLOW_EVIL_CONSTRUCTORS(NativeControlContainer);
-};
-
-NativeControl::NativeControl() : hwnd_view_(NULL),
- container_(NULL),
- fixed_width_(-1),
- horizontal_alignment_(CENTER),
- fixed_height_(-1),
- vertical_alignment_(CENTER) {
- enabled_ = true;
- focusable_ = true;
-}
-
-NativeControl::~NativeControl() {
- if (container_) {
- container_->ResetParent();
- ::DestroyWindow(*container_);
- }
-}
-
-void NativeControl::ValidateNativeControl() {
- if (hwnd_view_ == NULL) {
- hwnd_view_ = new HWNDView();
- AddChildView(hwnd_view_);
- }
-
- if (!container_ && IsVisible()) {
- container_ = new NativeControlContainer(this);
- hwnd_view_->Attach(*container_);
- if (!enabled_)
- EnableWindow(GetNativeControlHWND(), enabled_);
-
- // This message ensures that the focus border is shown.
- ::SendMessage(container_->GetControl(),
- WM_CHANGEUISTATE,
- MAKELPARAM(UIS_CLEAR, UISF_HIDEFOCUS),
- 0);
- }
-}
-
-void NativeControl::ViewHierarchyChanged(bool is_add, View *parent,
- View *child) {
- if (is_add && GetWidget()) {
- ValidateNativeControl();
- Layout();
- }
-}
-
-void NativeControl::Layout() {
- if (!container_ && GetWidget())
- ValidateNativeControl();
-
- if (hwnd_view_) {
- gfx::Rect lb = GetLocalBounds(false);
-
- int x = lb.x();
- int y = lb.y();
- int width = lb.width();
- int height = lb.height();
- if (fixed_width_ > 0) {
- width = std::min(fixed_width_, width);
- switch (horizontal_alignment_) {
- case LEADING:
- // Nothing to do.
- break;
- case CENTER:
- x += (lb.width() - width) / 2;
- break;
- case TRAILING:
- x = x + lb.width() - width;
- break;
- default:
- NOTREACHED();
- }
- }
-
- if (fixed_height_ > 0) {
- height = std::min(fixed_height_, height);
- switch (vertical_alignment_) {
- case LEADING:
- // Nothing to do.
- break;
- case CENTER:
- y += (lb.height() - height) / 2;
- break;
- case TRAILING:
- y = y + lb.height() - height;
- break;
- default:
- NOTREACHED();
- }
- }
-
- hwnd_view_->SetBounds(x, y, width, height);
- }
-}
-
-void NativeControl::OnContextMenu(const CPoint& location) {
- if (!GetContextMenuController())
- return;
-
- int x = location.x;
- int y = location.y;
- bool is_mouse = true;
- if (x == -1 && y == -1) {
- gfx::Point point = GetKeyboardContextMenuLocation();
- x = point.x();
- y = point.y();
- is_mouse = false;
- }
- ShowContextMenu(x, y, is_mouse);
-}
-
-void NativeControl::Focus() {
- if (container_) {
- DCHECK(container_->GetControl());
- ::SetFocus(container_->GetControl());
- }
-}
-
-HWND NativeControl::GetNativeControlHWND() {
- if (container_)
- return container_->GetControl();
- else
- return NULL;
-}
-
-void NativeControl::NativeControlDestroyed() {
- if (hwnd_view_)
- hwnd_view_->Detach();
- container_ = NULL;
-}
-
-void NativeControl::SetVisible(bool f) {
- if (f != IsVisible()) {
- View::SetVisible(f);
- if (!f && container_) {
- ::DestroyWindow(*container_);
- } else if (f && !container_) {
- ValidateNativeControl();
- }
- }
-}
-
-void NativeControl::SetEnabled(bool enabled) {
- if (enabled_ != enabled) {
- View::SetEnabled(enabled);
- if (GetNativeControlHWND()) {
- EnableWindow(GetNativeControlHWND(), enabled_);
- }
- }
-}
-
-void NativeControl::Paint(ChromeCanvas* canvas) {
-}
-
-void NativeControl::VisibilityChanged(View* starting_from, bool is_visible) {
- SetVisible(is_visible);
-}
-
-void NativeControl::SetFixedWidth(int width, Alignment alignment) {
- DCHECK(width > 0);
- fixed_width_ = width;
- horizontal_alignment_ = alignment;
-}
-
-void NativeControl::SetFixedHeight(int height, Alignment alignment) {
- DCHECK(height > 0);
- fixed_height_ = height;
- vertical_alignment_ = alignment;
-}
-
-DWORD NativeControl::GetAdditionalExStyle() const {
- // If the UI for the view is mirrored, we should make sure we add the
- // extended window style for a right-to-left layout so the subclass creates
- // a mirrored HWND for the underlying control.
- DWORD ex_style = 0;
- if (UILayoutIsRightToLeft())
- ex_style |= l10n_util::GetExtendedStyles();
-
- return ex_style;
-}
-
-DWORD NativeControl::GetAdditionalRTLStyle() const {
- // If the UI for the view is mirrored, we should make sure we add the
- // extended window style for a right-to-left layout so the subclass creates
- // a mirrored HWND for the underlying control.
- DWORD ex_style = 0;
- if (UILayoutIsRightToLeft())
- ex_style |= l10n_util::GetExtendedTooltipStyles();
-
- return ex_style;
-}
-
-// static
-LRESULT CALLBACK NativeControl::NativeControlWndProc(HWND window, UINT message,
- WPARAM w_param,
- LPARAM l_param) {
- HANDLE original_handler = GetProp(window, kHandlerKey);
- DCHECK(original_handler);
- NativeControl* native_control =
- static_cast<NativeControl*>(GetProp(window, kNativeControlKey));
- DCHECK(native_control);
-
- if (message == WM_KEYDOWN && native_control->NotifyOnKeyDown()) {
- if (native_control->OnKeyDown(static_cast<int>(w_param)))
- return 0;
- } else if (message == WM_DESTROY) {
- win_util::SetWindowProc(window,
- reinterpret_cast<WNDPROC>(original_handler));
- RemoveProp(window, kHandlerKey);
- RemoveProp(window, kNativeControlKey);
- TRACK_HWND_DESTRUCTION(window);
- }
-
- return CallWindowProc(reinterpret_cast<WNDPROC>(original_handler), window,
- message, w_param, l_param);
-}
-
-} // namespace views
diff --git a/chrome/views/controls/native_control.h b/chrome/views/controls/native_control.h
deleted file mode 100644
index f4dbc35..0000000
--- a/chrome/views/controls/native_control.h
+++ /dev/null
@@ -1,132 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_CONTROLS_NATIVE_CONTROL_H_
-#define CHROME_VIEWS_CONTROLS_NATIVE_CONTROL_H_
-
-#include <windows.h>
-
-#include "chrome/views/view.h"
-
-namespace views {
-
-class HWNDView;
-class NativeControlContainer;
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// NativeControl is an abstract view that is used to implement views wrapping
-// native controls. Subclasses can simply implement CreateNativeControl() to
-// wrap a new kind of control
-//
-////////////////////////////////////////////////////////////////////////////////
-class NativeControl : public View {
- public:
- enum Alignment {
- LEADING = 0,
- CENTER,
- TRAILING };
-
- NativeControl();
- virtual ~NativeControl();
-
- virtual void ViewHierarchyChanged(bool is_add, View *parent, View *child);
- virtual void Layout();
-
- // Overridden to properly set the native control state.
- virtual void SetVisible(bool f);
- virtual void SetEnabled(bool enabled);
-
- // Overridden to do nothing.
- virtual void Paint(ChromeCanvas* canvas);
- protected:
- friend class NativeControlContainer;
-
- // Overridden by sub-classes to create the windows control which is wrapped
- virtual HWND CreateNativeControl(HWND parent_container) = 0;
-
- // Invoked when the native control sends a WM_NOTIFY message to its parent
- virtual LRESULT OnNotify(int w_param, LPNMHDR l_param) = 0;
-
- // Invoked when the native control sends a WM_COMMAND message to its parent
- virtual LRESULT OnCommand(UINT code, int id, HWND source) { return 0; }
-
- // Invoked when the appropriate gesture for a context menu is issued.
- virtual void OnContextMenu(const CPoint& location);
-
- // Overridden so to set the native focus to the native control.
- virtual void Focus();
-
- // Invoked when the native control sends a WM_DESTORY message to its parent.
- virtual void OnDestroy() { }
-
- // Return the native control
- virtual HWND GetNativeControlHWND();
-
- // Invoked by the native windows control when it has been destroyed. This is
- // invoked AFTER WM_DESTORY has been sent. Any window commands send to the
- // HWND will most likely fail.
- void NativeControlDestroyed();
-
- // Overridden so that the control properly reflects parent's visibility.
- virtual void VisibilityChanged(View* starting_from, bool is_visible);
-
- // Controls that have fixed sizes should call these methods to specify the
- // actual size and how they should be aligned within their parent.
- void SetFixedWidth(int width, Alignment alignment);
- void SetFixedHeight(int height, Alignment alignment);
-
- // Derived classes interested in receiving key down notification should
- // override this method and return true. In which case OnKeyDown is called
- // when a key down message is sent to the control.
- // Note that this method is called at the time of the control creation: the
- // behavior will not change if the returned value changes after the control
- // has been created.
- virtual bool NotifyOnKeyDown() const { return false; }
-
- // Invoked when a key is pressed on the control (if NotifyOnKeyDown returns
- // true). Should return true if the key message was processed, false
- // otherwise.
- virtual bool OnKeyDown(int virtual_key_code) { return false; }
-
- // Returns additional extended style flags. When subclasses call
- // CreateWindowEx in order to create the underlying control, they must OR the
- // ExStyle parameter with the value returned by this function.
- //
- // We currently use this method in order to add flags such as WS_EX_LAYOUTRTL
- // to the HWND for views with right-to-left UI layout.
- DWORD GetAdditionalExStyle() const;
-
- // TODO(xji): we use the following temporary function as we transition the
- // various native controls to use the right set of RTL flags. This function
- // will go away (and be replaced by GetAdditionalExStyle()) once all the
- // controls are properly transitioned.
- DWORD GetAdditionalRTLStyle() const;
-
- // This variable is protected to provide subclassers direct access. However
- // subclassers should always check for NULL since this variable is only
- // initialized in ValidateNativeControl().
- HWNDView* hwnd_view_;
-
- // Fixed size information. -1 for a size means no fixed size.
- int fixed_width_;
- Alignment horizontal_alignment_;
- int fixed_height_;
- Alignment vertical_alignment_;
-
- private:
-
- void ValidateNativeControl();
-
- static LRESULT CALLBACK NativeControlWndProc(HWND window, UINT message,
- WPARAM w_param, LPARAM l_param);
-
- NativeControlContainer* container_;
-
- DISALLOW_COPY_AND_ASSIGN(NativeControl);
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_CONTROLS_NATIVE_CONTROL_H_
diff --git a/chrome/views/controls/native_control_win.cc b/chrome/views/controls/native_control_win.cc
deleted file mode 100644
index d493f66..0000000
--- a/chrome/views/controls/native_control_win.cc
+++ /dev/null
@@ -1,201 +0,0 @@
-// #ifndef CHROME_VIEWS_NATIVE_CONTROL_WIN_H_// Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this
-// source code is governed by a BSD-style license that can be found in the
-// LICENSE file.
-
-#include "chrome/views/controls/native_control_win.h"
-
-#include "app/l10n_util_win.h"
-#include "base/logging.h"
-#include "base/win_util.h"
-
-namespace views {
-
-// static
-const wchar_t* NativeControlWin::kNativeControlWinKey =
- L"__NATIVE_CONTROL_WIN__";
-
-static const wchar_t* kNativeControlOriginalWndProcKey =
- L"__NATIVE_CONTROL_ORIGINAL_WNDPROC__";
-
-// static
-WNDPROC NativeControlWin::original_wndproc_ = NULL;
-
-////////////////////////////////////////////////////////////////////////////////
-// NativeControlWin, public:
-
-NativeControlWin::NativeControlWin() : HWNDView() {
-}
-
-NativeControlWin::~NativeControlWin() {
- HWND hwnd = GetHWND();
- if (hwnd) {
- // Destroy the hwnd if it still exists. Otherwise we won't have shut things
- // down correctly, leading to leaking and crashing if another message
- // comes in for the hwnd.
- Detach();
- DestroyWindow(hwnd);
- }
-}
-
-bool NativeControlWin::ProcessMessage(UINT message, WPARAM w_param,
- LPARAM l_param, LRESULT* result) {
- switch (message) {
- case WM_CONTEXTMENU:
- ShowContextMenu(gfx::Point(LOWORD(l_param), HIWORD(l_param)));
- *result = 0;
- return true;
- case WM_CTLCOLORBTN:
- case WM_CTLCOLORSTATIC:
- *result = GetControlColor(message, reinterpret_cast<HDC>(w_param),
- GetHWND());
- return true;
- }
- return false;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// NativeControlWin, View overrides:
-
-void NativeControlWin::SetEnabled(bool enabled) {
- if (IsEnabled() != enabled) {
- View::SetEnabled(enabled);
- if (GetHWND())
- EnableWindow(GetHWND(), IsEnabled());
- }
-}
-
-void NativeControlWin::ViewHierarchyChanged(bool is_add, View* parent,
- View* child) {
- // Create the HWND when we're added to a valid Widget. Many controls need a
- // parent HWND to function properly.
- if (is_add && GetWidget() && !GetHWND())
- CreateNativeControl();
-
- // Call the base class to hide the view if we're being removed.
- HWNDView::ViewHierarchyChanged(is_add, parent, child);
-}
-
-void NativeControlWin::VisibilityChanged(View* starting_from, bool is_visible) {
- if (!is_visible) {
- // We destroy the child control HWND when we become invisible because of the
- // performance cost of maintaining many HWNDs.
- HWND hwnd = GetHWND();
- Detach();
- DestroyWindow(hwnd);
- } else if (!GetHWND()) {
- CreateNativeControl();
- }
-}
-
-void NativeControlWin::Focus() {
- DCHECK(GetHWND());
- SetFocus(GetHWND());
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// NativeControlWin, protected:
-
-void NativeControlWin::ShowContextMenu(const gfx::Point& location) {
- if (!GetContextMenuController())
- return;
-
- int x = location.x();
- int y = location.y();
- bool is_mouse = true;
- if (x == -1 && y == -1) {
- gfx::Point point = GetKeyboardContextMenuLocation();
- x = point.x();
- y = point.y();
- is_mouse = false;
- }
- View::ShowContextMenu(x, y, is_mouse);
-}
-
-void NativeControlWin::NativeControlCreated(HWND native_control) {
- TRACK_HWND_CREATION(native_control);
-
- // Associate this object with the control's HWND so that WidgetWin can find
- // this object when it receives messages from it.
- SetProp(native_control, kNativeControlWinKey, this);
-
- // Subclass the window so we can monitor for key presses.
- original_wndproc_ =
- win_util::SetWindowProc(native_control,
- &NativeControlWin::NativeControlWndProc);
- SetProp(native_control, kNativeControlOriginalWndProcKey, original_wndproc_);
-
- Attach(native_control);
- // GetHWND() is now valid.
-
- // Update the newly created HWND with any resident enabled state.
- EnableWindow(GetHWND(), IsEnabled());
-
- // This message ensures that the focus border is shown.
- SendMessage(GetHWND(), WM_CHANGEUISTATE,
- MAKEWPARAM(UIS_CLEAR, UISF_HIDEFOCUS), 0);
-}
-
-DWORD NativeControlWin::GetAdditionalExStyle() const {
- // If the UI for the view is mirrored, we should make sure we add the
- // extended window style for a right-to-left layout so the subclass creates
- // a mirrored HWND for the underlying control.
- DWORD ex_style = 0;
- if (UILayoutIsRightToLeft())
- ex_style |= l10n_util::GetExtendedStyles();
-
- return ex_style;
-}
-
-DWORD NativeControlWin::GetAdditionalRTLStyle() const {
- // If the UI for the view is mirrored, we should make sure we add the
- // extended window style for a right-to-left layout so the subclass creates
- // a mirrored HWND for the underlying control.
- DWORD ex_style = 0;
- if (UILayoutIsRightToLeft())
- ex_style |= l10n_util::GetExtendedTooltipStyles();
-
- return ex_style;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// NativeControlWin, private:
-
-LRESULT NativeControlWin::GetControlColor(UINT message, HDC dc, HWND sender) {
- View *ancestor = this;
- while (ancestor) {
- const Background* background = ancestor->background();
- if (background) {
- HBRUSH brush = background->GetNativeControlBrush();
- if (brush)
- return reinterpret_cast<LRESULT>(brush);
- }
- ancestor = ancestor->GetParent();
- }
-
- // COLOR_BTNFACE is the default for dialog box backgrounds.
- return reinterpret_cast<LRESULT>(GetSysColorBrush(COLOR_BTNFACE));
-}
-
-// static
-LRESULT NativeControlWin::NativeControlWndProc(HWND window,
- UINT message,
- WPARAM w_param,
- LPARAM l_param) {
- NativeControlWin* native_control =
- static_cast<NativeControlWin*>(GetProp(window, kNativeControlWinKey));
- DCHECK(native_control);
-
- if (message == WM_KEYDOWN && native_control->NotifyOnKeyDown()) {
- if (native_control->OnKeyDown(static_cast<int>(w_param)))
- return 0;
- } else if (message == WM_DESTROY) {
- win_util::SetWindowProc(window, native_control->original_wndproc_);
- RemoveProp(window, kNativeControlWinKey);
- TRACK_HWND_DESTRUCTION(window);
- }
-
- return CallWindowProc(native_control->original_wndproc_, window, message,
- w_param, l_param);
-}
-
-} // namespace views
diff --git a/chrome/views/controls/native_control_win.h b/chrome/views/controls/native_control_win.h
deleted file mode 100644
index 0ba80eb..0000000
--- a/chrome/views/controls/native_control_win.h
+++ /dev/null
@@ -1,100 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this
-// source code is governed by a BSD-style license that can be found in the
-// LICENSE file.
-
-#ifndef CHROME_VIEWS_CONTROLS_NATIVE_CONTROL_WIN_H_
-#define CHROME_VIEWS_CONTROLS_NATIVE_CONTROL_WIN_H_
-
-#include "chrome/views/controls/hwnd_view.h"
-
-namespace views {
-
-// A View that hosts a native Windows control.
-class NativeControlWin : public HWNDView {
- public:
- static const wchar_t* kNativeControlWinKey;
-
- NativeControlWin();
- virtual ~NativeControlWin();
-
- // Called by the containing WidgetWin when a message is received from the HWND
- // created by an object derived from NativeControlWin. Derived classes MUST
- // call _this_ version of the function if they override it and do not handle
- // all of the messages listed in widget_win.cc ProcessNativeControlWinMessage.
- // Returns true if the message was handled, with a valid result in |result|.
- // Returns false if the message was not handled.
- virtual bool ProcessMessage(UINT message,
- WPARAM w_param,
- LPARAM l_param,
- LRESULT* result);
-
- // Called by our subclassed window procedure when a WM_KEYDOWN message is
- // received by the HWND created by an object derived from NativeControlWin.
- // Returns true if the key was processed, false otherwise.
- virtual bool OnKeyDown(int vkey) { return false; }
-
- // Overridden from View:
- virtual void SetEnabled(bool enabled);
-
- protected:
- virtual void ViewHierarchyChanged(bool is_add, View *parent, View *child);
- virtual void VisibilityChanged(View* starting_from, bool is_visible);
- virtual void Focus();
-
- // Called by the containing WidgetWin when a WM_CONTEXTMENU message is
- // received from the HWND created by an object derived from NativeControlWin.
- virtual void ShowContextMenu(const gfx::Point& location);
-
- // Derived classes interested in receiving key down notification should
- // override this method and return true. In which case OnKeyDown is called
- // when a key down message is sent to the control.
- // Note that this method is called at the time of the control creation: the
- // behavior will not change if the returned value changes after the control
- // has been created.
- virtual bool NotifyOnKeyDown() const { return false; }
-
- // Called when the NativeControlWin is attached to a View hierarchy with a
- // valid Widget. The NativeControlWin should use this opportunity to create
- // its associated HWND.
- virtual void CreateNativeControl() = 0;
-
- // MUST be called by the subclass implementation of |CreateNativeControl|
- // immediately after creating the control HWND, otherwise it won't be attached
- // to the HWNDView and will be effectively orphaned.
- virtual void NativeControlCreated(HWND native_control);
-
- // Returns additional extended style flags. When subclasses call
- // CreateWindowEx in order to create the underlying control, they must OR the
- // ExStyle parameter with the value returned by this function.
- //
- // We currently use this method in order to add flags such as WS_EX_LAYOUTRTL
- // to the HWND for views with right-to-left UI layout.
- DWORD GetAdditionalExStyle() const;
-
- // TODO(xji): we use the following temporary function as we transition the
- // various native controls to use the right set of RTL flags. This function
- // will go away (and be replaced by GetAdditionalExStyle()) once all the
- // controls are properly transitioned.
- DWORD GetAdditionalRTLStyle() const;
-
- private:
- // Called by the containing WidgetWin when a message of type WM_CTLCOLORBTN or
- // WM_CTLCOLORSTATIC is sent from the HWND created by an object dreived from
- // NativeControlWin.
- LRESULT GetControlColor(UINT message, HDC dc, HWND sender);
-
- // Our subclass window procedure for the attached control.
- static LRESULT CALLBACK NativeControlWndProc(HWND window,
- UINT message,
- WPARAM w_param,
- LPARAM l_param);
-
- // The window procedure before we subclassed.
- static WNDPROC original_wndproc_;
-
- DISALLOW_COPY_AND_ASSIGN(NativeControlWin);
-};
-
-} // namespace views
-
-#endif // #ifndef CHROME_VIEWS_CONTROLS_NATIVE_CONTROL_WIN_H_
diff --git a/chrome/views/controls/native_view_host.cc b/chrome/views/controls/native_view_host.cc
deleted file mode 100644
index 525aa497..0000000
--- a/chrome/views/controls/native_view_host.cc
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/controls/native_view_host.h"
-
-#include "chrome/views/widget/widget.h"
-#include "base/logging.h"
-
-namespace views {
-
-NativeViewHost::NativeViewHost()
- : native_view_(NULL),
- installed_clip_(false),
- fast_resize_(false),
- focus_view_(NULL) {
- // The native widget is placed relative to the root. As such, we need to
- // know when the position of any ancestor changes, or our visibility relative
- // to other views changed as it'll effect our position relative to the root.
- SetNotifyWhenVisibleBoundsInRootChanges(true);
-}
-
-NativeViewHost::~NativeViewHost() {
-}
-
-gfx::Size NativeViewHost::GetPreferredSize() {
- return preferred_size_;
-}
-
-void NativeViewHost::Layout() {
- if (!native_view_)
- return;
-
- // Since widgets know nothing about the View hierarchy (they are direct
- // children of the Widget that hosts our View hierarchy) they need to be
- // positioned in the coordinate system of the Widget, not the current
- // view.
- gfx::Point top_left;
- ConvertPointToWidget(this, &top_left);
-
- gfx::Rect vis_bounds = GetVisibleBounds();
- bool visible = !vis_bounds.IsEmpty();
-
- if (visible && !fast_resize_) {
- if (vis_bounds.size() != size()) {
- // Only a portion of the Widget is really visible.
- int x = vis_bounds.x();
- int y = vis_bounds.y();
- InstallClip(x, y, vis_bounds.width(), vis_bounds.height());
- installed_clip_ = true;
- } else if (installed_clip_) {
- // The whole widget is visible but we installed a clip on the widget,
- // uninstall it.
- UninstallClip();
- installed_clip_ = false;
- }
- }
-
- if (visible) {
- ShowWidget(top_left.x(), top_left.y(), width(), height());
- } else {
- HideWidget();
- }
-}
-
-void NativeViewHost::VisibilityChanged(View* starting_from, bool is_visible) {
- Layout();
-}
-
-void NativeViewHost::VisibleBoundsInRootChanged() {
- Layout();
-}
-
-} // namespace views
diff --git a/chrome/views/controls/native_view_host.h b/chrome/views/controls/native_view_host.h
deleted file mode 100644
index e1e123f..0000000
--- a/chrome/views/controls/native_view_host.h
+++ /dev/null
@@ -1,103 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_CONTROLS_NATIVE_VIEW_HOST_H_
-#define CHROME_VIEWS_CONTROLS_NATIVE_VIEW_HOST_H_
-
-#include <string>
-
-#include "chrome/views/view.h"
-
-#include "base/gfx/native_widget_types.h"
-
-namespace views {
-
-// Base class for embedding native widgets in a view.
-class NativeViewHost : public View {
- public:
- NativeViewHost();
- virtual ~NativeViewHost();
-
- void set_preferred_size(const gfx::Size& size) { preferred_size_ = size; }
-
- // Returns the preferred size set via set_preferred_size.
- virtual gfx::Size GetPreferredSize();
-
- // Overriden to invoke Layout.
- virtual void VisibilityChanged(View* starting_from, bool is_visible);
-
- // Invokes any of InstallClip, UninstallClip, ShowWidget or HideWidget
- // depending upon what portion of the widget is view in the parent.
- virtual void Layout();
-
- // A NativeViewHost has an associated focus View so that the focus of the
- // native control and of the View are kept in sync. In simple cases where the
- // NativeViewHost directly wraps a native window as is, the associated view
- // is this View. In other cases where the NativeViewHost is part of another
- // view (such as TextField), the actual View is not the NativeViewHost and
- // this method must be called to set that.
- // This method must be called before Attach().
- void SetAssociatedFocusView(View* view) { focus_view_ = view; }
- View* associated_focus_view() { return focus_view_; }
-
- void set_fast_resize(bool fast_resize) { fast_resize_ = fast_resize; }
- bool fast_resize() const { return fast_resize_; }
-
- // The embedded native view.
- gfx::NativeView native_view() const { return native_view_; }
-
- protected:
- // Notification that our visible bounds relative to the root has changed.
- // Invokes Layout to make sure the widget is positioned correctly.
- virtual void VisibleBoundsInRootChanged();
-
- // Sets the native view. Subclasses will typically invoke Layout after setting
- // the widget.
- void set_native_view(gfx::NativeView widget) { native_view_ = widget; }
-
- // Installs a clip on the native widget.
- virtual void InstallClip(int x, int y, int w, int h) = 0;
-
- // Removes the clip installed on the native widget by way of InstallClip.
- virtual void UninstallClip() = 0;
-
- // Shows the widget at the specified position (relative to the parent widget).
- virtual void ShowWidget(int x, int y, int w, int h) = 0;
-
- // Hides the widget. NOTE: this may be invoked when the widget is already
- // hidden.
- virtual void HideWidget() = 0;
-
- void set_installed_clip(bool installed_clip) {
- installed_clip_ = installed_clip;
- }
- bool installed_clip() const { return installed_clip_; }
-
- private:
- gfx::NativeView native_view_;
-
- // The preferred size of this View
- gfx::Size preferred_size_;
-
- // Have we installed a region on the HWND used to clip to only the visible
- // portion of the HWND?
- bool installed_clip_;
-
- // Fast resizing will move the hwnd and clip its window region, this will
- // result in white areas and will not resize the content (so scrollbars
- // will be all wrong and content will flow offscreen). Only use this
- // when you're doing extremely quick, high-framerate vertical resizes
- // and don't care about accuracy. Make sure you do a real resize at the
- // end. USE WITH CAUTION.
- bool fast_resize_;
-
- // The view that should be given focus when this NativeViewHost is focused.
- View* focus_view_;
-
- DISALLOW_COPY_AND_ASSIGN(NativeViewHost);
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_CONTROLS_NATIVE_VIEW_HOST_H_
diff --git a/chrome/views/controls/scroll_view.cc b/chrome/views/controls/scroll_view.cc
deleted file mode 100644
index 753f6c5..0000000
--- a/chrome/views/controls/scroll_view.cc
+++ /dev/null
@@ -1,517 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/controls/scroll_view.h"
-
-#include "app/resource_bundle.h"
-#include "base/logging.h"
-#include "chrome/views/controls/scrollbar/native_scroll_bar.h"
-#include "chrome/views/widget/root_view.h"
-#include "grit/theme_resources.h"
-
-namespace views {
-
-const char* const ScrollView::kViewClassName = "chrome/views/ScrollView";
-
-// Viewport contains the contents View of the ScrollView.
-class Viewport : public View {
- public:
- Viewport() {}
- virtual ~Viewport() {}
-
- virtual void ScrollRectToVisible(int x, int y, int width, int height) {
- if (!GetChildViewCount() || !GetParent())
- return;
-
- View* contents = GetChildViewAt(0);
- x -= contents->x();
- y -= contents->y();
- static_cast<ScrollView*>(GetParent())->ScrollContentsRegionToBeVisible(
- x, y, width, height);
- }
-
- private:
- DISALLOW_EVIL_CONSTRUCTORS(Viewport);
-};
-
-
-ScrollView::ScrollView() {
- Init(new NativeScrollBar(true), new NativeScrollBar(false), NULL);
-}
-
-ScrollView::ScrollView(ScrollBar* horizontal_scrollbar,
- ScrollBar* vertical_scrollbar,
- View* resize_corner) {
- Init(horizontal_scrollbar, vertical_scrollbar, resize_corner);
-}
-
-ScrollView::~ScrollView() {
- // If scrollbars are currently not used, delete them
- if (!horiz_sb_->GetParent()) {
- delete horiz_sb_;
- }
-
- if (!vert_sb_->GetParent()) {
- delete vert_sb_;
- }
-
- if (resize_corner_ && !resize_corner_->GetParent()) {
- delete resize_corner_;
- }
-}
-
-void ScrollView::SetContents(View* a_view) {
- if (contents_ && contents_ != a_view) {
- viewport_->RemoveChildView(contents_);
- delete contents_;
- contents_ = NULL;
- }
-
- if (a_view) {
- contents_ = a_view;
- viewport_->AddChildView(contents_);
- }
-
- Layout();
-}
-
-View* ScrollView::GetContents() const {
- return contents_;
-}
-
-void ScrollView::Init(ScrollBar* horizontal_scrollbar,
- ScrollBar* vertical_scrollbar,
- View* resize_corner) {
- DCHECK(horizontal_scrollbar && vertical_scrollbar);
-
- contents_ = NULL;
- horiz_sb_ = horizontal_scrollbar;
- vert_sb_ = vertical_scrollbar;
- resize_corner_ = resize_corner;
-
- viewport_ = new Viewport();
- AddChildView(viewport_);
-
- // Don't add the scrollbars as children until we discover we need them
- // (ShowOrHideScrollBar).
- horiz_sb_->SetVisible(false);
- horiz_sb_->SetController(this);
- vert_sb_->SetVisible(false);
- vert_sb_->SetController(this);
- if (resize_corner_)
- resize_corner_->SetVisible(false);
-}
-
-// Make sure that a single scrollbar is created and visible as needed
-void ScrollView::SetControlVisibility(View* control, bool should_show) {
- if (!control)
- return;
- if (should_show) {
- if (!control->IsVisible()) {
- AddChildView(control);
- control->SetVisible(true);
- }
- } else {
- RemoveChildView(control);
- control->SetVisible(false);
- }
-}
-
-void ScrollView::ComputeScrollBarsVisibility(const gfx::Size& vp_size,
- const gfx::Size& content_size,
- bool* horiz_is_shown,
- bool* vert_is_shown) const {
- // Try to fit both ways first, then try vertical bar only, then horizontal
- // bar only, then defaults to both shown.
- if (content_size.width() <= vp_size.width() &&
- content_size.height() <= vp_size.height()) {
- *horiz_is_shown = false;
- *vert_is_shown = false;
- } else if (content_size.width() <= vp_size.width() - GetScrollBarWidth()) {
- *horiz_is_shown = false;
- *vert_is_shown = true;
- } else if (content_size.height() <= vp_size.height() - GetScrollBarHeight()) {
- *horiz_is_shown = true;
- *vert_is_shown = false;
- } else {
- *horiz_is_shown = true;
- *vert_is_shown = true;
- }
-}
-
-void ScrollView::Layout() {
- // Most views will want to auto-fit the available space. Most of them want to
- // use the all available width (without overflowing) and only overflow in
- // height. Examples are HistoryView, MostVisitedView, DownloadTabView, etc.
- // Other views want to fit in both ways. An example is PrintView. To make both
- // happy, assume a vertical scrollbar but no horizontal scrollbar. To
- // override this default behavior, the inner view has to calculate the
- // available space, used ComputeScrollBarsVisibility() to use the same
- // calculation that is done here and sets its bound to fit within.
- gfx::Rect viewport_bounds = GetLocalBounds(true);
- // Realign it to 0 so it can be used as-is for SetBounds().
- viewport_bounds.set_origin(gfx::Point(0, 0));
- // viewport_size is the total client space available.
- gfx::Size viewport_size = viewport_bounds.size();
- if (viewport_bounds.IsEmpty()) {
- // There's nothing to layout.
- return;
- }
-
- // Assumes a vertical scrollbar since most the current views are designed for
- // this.
- int horiz_sb_height = GetScrollBarHeight();
- int vert_sb_width = GetScrollBarWidth();
- viewport_bounds.set_width(viewport_bounds.width() - vert_sb_width);
- // Update the bounds right now so the inner views can fit in it.
- viewport_->SetBounds(viewport_bounds);
-
- // Give contents_ a chance to update its bounds if it depends on the
- // viewport.
- if (contents_)
- contents_->Layout();
-
- bool should_layout_contents = false;
- bool horiz_sb_required = false;
- bool vert_sb_required = false;
- if (contents_) {
- gfx::Size content_size = contents_->size();
- ComputeScrollBarsVisibility(viewport_size,
- content_size,
- &horiz_sb_required,
- &vert_sb_required);
- }
- bool resize_corner_required = resize_corner_ && horiz_sb_required &&
- vert_sb_required;
- // Take action.
- SetControlVisibility(horiz_sb_, horiz_sb_required);
- SetControlVisibility(vert_sb_, vert_sb_required);
- SetControlVisibility(resize_corner_, resize_corner_required);
-
- // Non-default.
- if (horiz_sb_required) {
- viewport_bounds.set_height(viewport_bounds.height() - horiz_sb_height);
- should_layout_contents = true;
- }
- // Default.
- if (!vert_sb_required) {
- viewport_bounds.set_width(viewport_bounds.width() + vert_sb_width);
- should_layout_contents = true;
- }
-
- if (horiz_sb_required) {
- horiz_sb_->SetBounds(0,
- viewport_bounds.bottom(),
- viewport_bounds.right(),
- horiz_sb_height);
- }
- if (vert_sb_required) {
- vert_sb_->SetBounds(viewport_bounds.right(),
- 0,
- vert_sb_width,
- viewport_bounds.bottom());
- }
- if (resize_corner_required) {
- // Show the resize corner.
- resize_corner_->SetBounds(viewport_bounds.right(),
- viewport_bounds.bottom(),
- vert_sb_width,
- horiz_sb_height);
- }
-
- // Update to the real client size with the visible scrollbars.
- viewport_->SetBounds(viewport_bounds);
- if (should_layout_contents && contents_)
- contents_->Layout();
-
- CheckScrollBounds();
- SchedulePaint();
- UpdateScrollBarPositions();
-}
-
-int ScrollView::CheckScrollBounds(int viewport_size,
- int content_size,
- int current_pos) {
- int max = std::max(content_size - viewport_size, 0);
- if (current_pos < 0)
- current_pos = 0;
- else if (current_pos > max)
- current_pos = max;
- return current_pos;
-}
-
-void ScrollView::CheckScrollBounds() {
- if (contents_) {
- int x, y;
-
- x = CheckScrollBounds(viewport_->width(),
- contents_->width(),
- -contents_->x());
- y = CheckScrollBounds(viewport_->height(),
- contents_->height(),
- -contents_->y());
-
- // This is no op if bounds are the same
- contents_->SetBounds(-x, -y, contents_->width(), contents_->height());
- }
-}
-
-gfx::Rect ScrollView::GetVisibleRect() const {
- if (!contents_)
- return gfx::Rect();
-
- const int x =
- (horiz_sb_ && horiz_sb_->IsVisible()) ? horiz_sb_->GetPosition() : 0;
- const int y =
- (vert_sb_ && vert_sb_->IsVisible()) ? vert_sb_->GetPosition() : 0;
- return gfx::Rect(x, y, viewport_->width(), viewport_->height());
-}
-
-void ScrollView::ScrollContentsRegionToBeVisible(int x,
- int y,
- int width,
- int height) {
- if (!contents_ || ((!horiz_sb_ || !horiz_sb_->IsVisible()) &&
- (!vert_sb_ || !vert_sb_->IsVisible()))) {
- return;
- }
-
- // Figure out the maximums for this scroll view.
- const int contents_max_x =
- std::max(viewport_->width(), contents_->width());
- const int contents_max_y =
- std::max(viewport_->height(), contents_->height());
-
- // Make sure x and y are within the bounds of [0,contents_max_*].
- x = std::max(0, std::min(contents_max_x, x));
- y = std::max(0, std::min(contents_max_y, y));
-
- // Figure out how far and down the rectangle will go taking width
- // and height into account. This will be "clipped" by the viewport.
- const int max_x = std::min(contents_max_x,
- x + std::min(width, viewport_->width()));
- const int max_y = std::min(contents_max_y,
- y + std::min(height,
- viewport_->height()));
-
- // See if the rect is already visible. Note the width is (max_x - x)
- // and the height is (max_y - y) to take into account the clipping of
- // either viewport or the content size.
- const gfx::Rect vis_rect = GetVisibleRect();
- if (vis_rect.Contains(gfx::Rect(x, y, max_x - x, max_y - y)))
- return;
-
- // Shift contents_'s X and Y so that the region is visible. If we
- // need to shift up or left from where we currently are then we need
- // to get it so that the content appears in the upper/left
- // corner. This is done by setting the offset to -X or -Y. For down
- // or right shifts we need to make sure it appears in the
- // lower/right corner. This is calculated by taking max_x or max_y
- // and scaling it back by the size of the viewport.
- const int new_x =
- (vis_rect.x() > x) ? x : std::max(0, max_x - viewport_->width());
- const int new_y =
- (vis_rect.y() > y) ? y : std::max(0, max_y - viewport_->height());
-
- contents_->SetX(-new_x);
- contents_->SetY(-new_y);
- UpdateScrollBarPositions();
-}
-
-void ScrollView::UpdateScrollBarPositions() {
- if (!contents_) {
- return;
- }
-
- if (horiz_sb_->IsVisible()) {
- int vw = viewport_->width();
- int cw = contents_->width();
- int origin = contents_->x();
- horiz_sb_->Update(vw, cw, -origin);
- }
- if (vert_sb_->IsVisible()) {
- int vh = viewport_->height();
- int ch = contents_->height();
- int origin = contents_->y();
- vert_sb_->Update(vh, ch, -origin);
- }
-}
-
-// TODO(ACW). We should really use ScrollWindowEx as needed
-void ScrollView::ScrollToPosition(ScrollBar* source, int position) {
- if (!contents_)
- return;
-
- if (source == horiz_sb_ && horiz_sb_->IsVisible()) {
- int vw = viewport_->width();
- int cw = contents_->width();
- int origin = contents_->x();
- if (-origin != position) {
- int max_pos = std::max(0, cw - vw);
- if (position < 0)
- position = 0;
- else if (position > max_pos)
- position = max_pos;
- contents_->SetX(-position);
- contents_->SchedulePaint(contents_->GetLocalBounds(true), true);
- }
- } else if (source == vert_sb_ && vert_sb_->IsVisible()) {
- int vh = viewport_->height();
- int ch = contents_->height();
- int origin = contents_->y();
- if (-origin != position) {
- int max_pos = std::max(0, ch - vh);
- if (position < 0)
- position = 0;
- else if (position > max_pos)
- position = max_pos;
- contents_->SetY(-position);
- contents_->SchedulePaint(contents_->GetLocalBounds(true), true);
- }
- }
-}
-
-int ScrollView::GetScrollIncrement(ScrollBar* source, bool is_page,
- bool is_positive) {
- bool is_horizontal = source->IsHorizontal();
- int amount = 0;
- View* view = GetContents();
- if (view) {
- if (is_page)
- amount = view->GetPageScrollIncrement(this, is_horizontal, is_positive);
- else
- amount = view->GetLineScrollIncrement(this, is_horizontal, is_positive);
- if (amount > 0)
- return amount;
- }
- // No view, or the view didn't return a valid amount.
- if (is_page)
- return is_horizontal ? viewport_->width() : viewport_->height();
- return is_horizontal ? viewport_->width() / 5 : viewport_->height() / 5;
-}
-
-void ScrollView::ViewHierarchyChanged(bool is_add, View *parent, View *child) {
- if (is_add) {
- RootView* rv = GetRootView();
- if (rv) {
- rv->SetDefaultKeyboardHandler(this);
- rv->SetFocusOnMousePressed(true);
- }
- }
-}
-
-bool ScrollView::OnKeyPressed(const KeyEvent& event) {
- bool processed = false;
-
- // Give vertical scrollbar priority
- if (vert_sb_->IsVisible()) {
- processed = vert_sb_->OnKeyPressed(event);
- }
-
- if (!processed && horiz_sb_->IsVisible()) {
- processed = horiz_sb_->OnKeyPressed(event);
- }
- return processed;
-}
-
-bool ScrollView::OnMouseWheel(const MouseWheelEvent& e) {
- bool processed = false;
-
- // Give vertical scrollbar priority
- if (vert_sb_->IsVisible()) {
- processed = vert_sb_->OnMouseWheel(e);
- }
-
- if (!processed && horiz_sb_->IsVisible()) {
- processed = horiz_sb_->OnMouseWheel(e);
- }
- return processed;
-}
-
-std::string ScrollView::GetClassName() const {
- return kViewClassName;
-}
-
-int ScrollView::GetScrollBarWidth() const {
- return vert_sb_->GetLayoutSize();
-}
-
-int ScrollView::GetScrollBarHeight() const {
- return horiz_sb_->GetLayoutSize();
-}
-
-// VariableRowHeightScrollHelper ----------------------------------------------
-
-VariableRowHeightScrollHelper::VariableRowHeightScrollHelper(
- Controller* controller) : controller_(controller) {
-}
-
-VariableRowHeightScrollHelper::~VariableRowHeightScrollHelper() {
-}
-
-int VariableRowHeightScrollHelper::GetPageScrollIncrement(
- ScrollView* scroll_view, bool is_horizontal, bool is_positive) {
- if (is_horizontal)
- return 0;
- // y coordinate is most likely negative.
- int y = abs(scroll_view->GetContents()->y());
- int vis_height = scroll_view->GetContents()->GetParent()->height();
- if (is_positive) {
- // Align the bottom most row to the top of the view.
- int bottom = std::min(scroll_view->GetContents()->height() - 1,
- y + vis_height);
- RowInfo bottom_row_info = GetRowInfo(bottom);
- // If 0, ScrollView will provide a default value.
- return std::max(0, bottom_row_info.origin - y);
- } else {
- // Align the row on the previous page to to the top of the view.
- int last_page_y = y - vis_height;
- RowInfo last_page_info = GetRowInfo(std::max(0, last_page_y));
- if (last_page_y != last_page_info.origin)
- return std::max(0, y - last_page_info.origin - last_page_info.height);
- return std::max(0, y - last_page_info.origin);
- }
-}
-
-int VariableRowHeightScrollHelper::GetLineScrollIncrement(
- ScrollView* scroll_view, bool is_horizontal, bool is_positive) {
- if (is_horizontal)
- return 0;
- // y coordinate is most likely negative.
- int y = abs(scroll_view->GetContents()->y());
- RowInfo row = GetRowInfo(y);
- if (is_positive) {
- return row.height - (y - row.origin);
- } else if (y == row.origin) {
- row = GetRowInfo(std::max(0, row.origin - 1));
- return y - row.origin;
- } else {
- return y - row.origin;
- }
-}
-
-VariableRowHeightScrollHelper::RowInfo
- VariableRowHeightScrollHelper::GetRowInfo(int y) {
- return controller_->GetRowInfo(y);
-}
-
-// FixedRowHeightScrollHelper -----------------------------------------------
-
-FixedRowHeightScrollHelper::FixedRowHeightScrollHelper(int top_margin,
- int row_height)
- : VariableRowHeightScrollHelper(NULL),
- top_margin_(top_margin),
- row_height_(row_height) {
- DCHECK(row_height > 0);
-}
-
-VariableRowHeightScrollHelper::RowInfo
- FixedRowHeightScrollHelper::GetRowInfo(int y) {
- if (y < top_margin_)
- return RowInfo(0, top_margin_);
- return RowInfo((y - top_margin_) / row_height_ * row_height_ + top_margin_,
- row_height_);
-}
-
-} // namespace views
diff --git a/chrome/views/controls/scroll_view.h b/chrome/views/controls/scroll_view.h
deleted file mode 100644
index fb77fdd..0000000
--- a/chrome/views/controls/scroll_view.h
+++ /dev/null
@@ -1,207 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_CONTROLS_SCROLL_VIEW_H_
-#define CHROME_VIEWS_CONTROLS_SCROLL_VIEW_H_
-
-#include "chrome/views/controls/scrollbar/scroll_bar.h"
-
-namespace views {
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// ScrollView class
-//
-// A ScrollView is used to make any View scrollable. The view is added to
-// a viewport which takes care of clipping.
-//
-// In this current implementation both horizontal and vertical scrollbars are
-// added as needed.
-//
-// The scrollview supports keyboard UI and mousewheel.
-//
-/////////////////////////////////////////////////////////////////////////////
-
-class ScrollView : public View,
- public ScrollBarController {
- public:
- static const char* const kViewClassName;
-
- ScrollView();
- // Initialize with specific views. resize_corner is optional.
- ScrollView(ScrollBar* horizontal_scrollbar,
- ScrollBar* vertical_scrollbar,
- View* resize_corner);
- virtual ~ScrollView();
-
- // Set the contents. Any previous contents will be deleted. The contents
- // is the view that needs to scroll.
- void SetContents(View* a_view);
- View* GetContents() const;
-
- // Overridden to layout the viewport and scrollbars.
- virtual void Layout();
-
- // Returns the visible region of the content View.
- gfx::Rect GetVisibleRect() const;
-
- // Scrolls the minimum amount necessary to make the specified rectangle
- // visible, in the coordinates of the contents view. The specified rectangle
- // is constrained by the bounds of the contents view. This has no effect if
- // the contents have not been set.
- //
- // Client code should use ScrollRectToVisible, which invokes this
- // appropriately.
- void ScrollContentsRegionToBeVisible(int x, int y, int width, int height);
-
- // ScrollBarController.
- // NOTE: this is intended to be invoked by the ScrollBar, and NOT general
- // client code.
- // See also ScrollRectToVisible.
- virtual void ScrollToPosition(ScrollBar* source, int position);
-
- // Returns the amount to scroll relative to the visible bounds. This invokes
- // either GetPageScrollIncrement or GetLineScrollIncrement to determine the
- // amount to scroll. If the view returns 0 (or a negative value) a default
- // value is used.
- virtual int GetScrollIncrement(ScrollBar* source,
- bool is_page,
- bool is_positive);
-
- // Overridden to setup keyboard ui when the view hierarchy changes
- virtual void ViewHierarchyChanged(bool is_add, View *parent, View *child);
-
- // Keyboard events
- virtual bool OnKeyPressed(const KeyEvent& event);
- virtual bool OnMouseWheel(const MouseWheelEvent& e);
-
- virtual std::string GetClassName() const;
-
- // Retrieves the vertical scrollbar width.
- int GetScrollBarWidth() const;
-
- // Retrieves the horizontal scrollbar height.
- int GetScrollBarHeight() const;
-
- // Computes the visibility of both scrollbars, taking in account the view port
- // and content sizes.
- void ComputeScrollBarsVisibility(const gfx::Size& viewport_size,
- const gfx::Size& content_size,
- bool* horiz_is_shown,
- bool* vert_is_shown) const;
-
- ScrollBar* horizontal_scroll_bar() const { return horiz_sb_; }
-
- ScrollBar* vertical_scroll_bar() const { return vert_sb_; }
-
- private:
- // Initialize the ScrollView. resize_corner is optional.
- void Init(ScrollBar* horizontal_scrollbar,
- ScrollBar* vertical_scrollbar,
- View* resize_corner);
-
- // Shows or hides the scrollbar/resize_corner based on the value of
- // |should_show|.
- void SetControlVisibility(View* control, bool should_show);
-
- // Update the scrollbars positions given viewport and content sizes.
- void UpdateScrollBarPositions();
-
- // Make sure the content is not scrolled out of bounds
- void CheckScrollBounds();
-
- // Make sure the content is not scrolled out of bounds in one dimension
- int CheckScrollBounds(int viewport_size, int content_size, int current_pos);
-
- // The clipping viewport. Content is added to that view.
- View* viewport_;
-
- // The current contents
- View* contents_;
-
- // Horizontal scrollbar.
- ScrollBar* horiz_sb_;
-
- // Vertical scrollbar.
- ScrollBar* vert_sb_;
-
- // Resize corner.
- View* resize_corner_;
-
- DISALLOW_EVIL_CONSTRUCTORS(ScrollView);
-};
-
-// VariableRowHeightScrollHelper is intended for views that contain rows of
-// varying height. To use a VariableRowHeightScrollHelper create one supplying
-// a Controller and delegate GetPageScrollIncrement and GetLineScrollIncrement
-// to the helper. VariableRowHeightScrollHelper calls back to the
-// Controller to determine row boundaries.
-class VariableRowHeightScrollHelper {
- public:
- // The origin and height of a row.
- struct RowInfo {
- RowInfo(int origin, int height) : origin(origin), height(height) {}
-
- // Origin of the row.
- int origin;
-
- // Height of the row.
- int height;
- };
-
- // Used to determine row boundaries.
- class Controller {
- public:
- // Returns the origin and size of the row at the specified location.
- virtual VariableRowHeightScrollHelper::RowInfo GetRowInfo(int y) = 0;
- };
-
- // Creates a new VariableRowHeightScrollHelper. Controller is
- // NOT deleted by this VariableRowHeightScrollHelper.
- explicit VariableRowHeightScrollHelper(Controller* controller);
- virtual ~VariableRowHeightScrollHelper();
-
- // Delegate the View methods of the same name to these. The scroll amount is
- // determined by querying the Controller for the appropriate row to scroll
- // to.
- int GetPageScrollIncrement(ScrollView* scroll_view,
- bool is_horizontal, bool is_positive);
- int GetLineScrollIncrement(ScrollView* scroll_view,
- bool is_horizontal, bool is_positive);
-
- protected:
- // Returns the row information for the row at the specified location. This
- // calls through to the method of the same name on the controller.
- virtual RowInfo GetRowInfo(int y);
-
- private:
- Controller* controller_;
-
- DISALLOW_EVIL_CONSTRUCTORS(VariableRowHeightScrollHelper);
-};
-
-// FixedRowHeightScrollHelper is intended for views that contain fixed height
-// height rows. To use a FixedRowHeightScrollHelper delegate
-// GetPageScrollIncrement and GetLineScrollIncrement to it.
-class FixedRowHeightScrollHelper : public VariableRowHeightScrollHelper {
- public:
- // Creates a FixedRowHeightScrollHelper. top_margin gives the distance from
- // the top of the view to the first row, and may be 0. row_height gives the
- // height of each row.
- FixedRowHeightScrollHelper(int top_margin, int row_height);
-
- protected:
- // Calculates the bounds of the row from the top margin and row height.
- virtual RowInfo GetRowInfo(int y);
-
- private:
- int top_margin_;
- int row_height_;
-
- DISALLOW_EVIL_CONSTRUCTORS(FixedRowHeightScrollHelper);
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_CONTROLS_SCROLL_VIEW_H_
diff --git a/chrome/views/controls/scrollbar/bitmap_scroll_bar.cc b/chrome/views/controls/scrollbar/bitmap_scroll_bar.cc
deleted file mode 100644
index fbb0e99..0000000
--- a/chrome/views/controls/scrollbar/bitmap_scroll_bar.cc
+++ /dev/null
@@ -1,703 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/controls/scrollbar/bitmap_scroll_bar.h"
-
-#include "app/gfx/chrome_canvas.h"
-#include "app/l10n_util.h"
-#include "base/message_loop.h"
-#include "chrome/views/controls/menu/menu.h"
-#include "chrome/views/controls/scroll_view.h"
-#include "chrome/views/widget/widget.h"
-#include "grit/generated_resources.h"
-#include "skia/include/SkBitmap.h"
-
-#undef min
-#undef max
-
-namespace views {
-
-namespace {
-
-// The distance the mouse can be dragged outside the bounds of the thumb during
-// dragging before the scrollbar will snap back to its regular position.
-static const int kScrollThumbDragOutSnap = 100;
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// AutorepeatButton
-//
-// A button that activates on mouse pressed rather than released, and that
-// continues to fire the clicked action as the mouse button remains pressed
-// down on the button.
-//
-///////////////////////////////////////////////////////////////////////////////
-class AutorepeatButton : public ImageButton {
- public:
- AutorepeatButton(ButtonListener* listener)
- : ImageButton(listener),
- repeater_(NewCallback<AutorepeatButton>(this,
- &AutorepeatButton::NotifyClick)) {
- }
- virtual ~AutorepeatButton() {}
-
- protected:
- virtual bool OnMousePressed(const MouseEvent& event) {
- Button::NotifyClick(event.GetFlags());
- repeater_.Start();
- return true;
- }
-
- virtual void OnMouseReleased(const MouseEvent& event, bool canceled) {
- repeater_.Stop();
- View::OnMouseReleased(event, canceled);
- }
-
- private:
- void NotifyClick() {
- Button::NotifyClick(0);
- }
-
- // The repeat controller that we use to repeatedly click the button when the
- // mouse button is down.
- RepeatController repeater_;
-
- DISALLOW_EVIL_CONSTRUCTORS(AutorepeatButton);
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// BitmapScrollBarThumb
-//
-// A view that acts as the thumb in the scroll bar track that the user can
-// drag to scroll the associated contents view within the viewport.
-//
-///////////////////////////////////////////////////////////////////////////////
-class BitmapScrollBarThumb : public View {
- public:
- explicit BitmapScrollBarThumb(BitmapScrollBar* scroll_bar)
- : scroll_bar_(scroll_bar),
- drag_start_position_(-1),
- mouse_offset_(-1),
- state_(CustomButton::BS_NORMAL) {
- }
- virtual ~BitmapScrollBarThumb() { }
-
- // Sets the size (width or height) of the thumb to the specified value.
- void SetSize(int size) {
- // Make sure the thumb is never sized smaller than its minimum possible
- // display size.
- gfx::Size prefsize = GetPreferredSize();
- size = std::max(size,
- static_cast<int>(scroll_bar_->IsHorizontal() ?
- prefsize.width() : prefsize.height()));
- gfx::Rect thumb_bounds = bounds();
- if (scroll_bar_->IsHorizontal()) {
- thumb_bounds.set_width(size);
- } else {
- thumb_bounds.set_height(size);
- }
- SetBounds(thumb_bounds);
- }
-
- // Retrieves the size (width or height) of the thumb.
- int GetSize() const {
- if (scroll_bar_->IsHorizontal())
- return width();
- return height();
- }
-
- // Sets the position of the thumb on the x or y axis.
- void SetPosition(int position) {
- gfx::Rect thumb_bounds = bounds();
- gfx::Rect track_bounds = scroll_bar_->GetTrackBounds();
- if (scroll_bar_->IsHorizontal()) {
- thumb_bounds.set_x(track_bounds.x() + position);
- } else {
- thumb_bounds.set_x(track_bounds.y() + position);
- }
- SetBounds(thumb_bounds);
- }
-
- // Gets the position of the thumb on the x or y axis.
- int GetPosition() const {
- gfx::Rect track_bounds = scroll_bar_->GetTrackBounds();
- if (scroll_bar_->IsHorizontal())
- return x() - track_bounds.x();
- return y() - track_bounds.y();
- }
-
- // View overrides:
- virtual gfx::Size GetPreferredSize() {
- return gfx::Size(background_bitmap()->width(),
- start_cap_bitmap()->height() +
- end_cap_bitmap()->height() +
- grippy_bitmap()->height());
- }
-
- protected:
- // View overrides:
- virtual void Paint(ChromeCanvas* canvas) {
- canvas->DrawBitmapInt(*start_cap_bitmap(), 0, 0);
- int top_cap_height = start_cap_bitmap()->height();
- int bottom_cap_height = end_cap_bitmap()->height();
- int thumb_body_height = height() - top_cap_height - bottom_cap_height;
- canvas->TileImageInt(*background_bitmap(), 0, top_cap_height,
- background_bitmap()->width(), thumb_body_height);
- canvas->DrawBitmapInt(*end_cap_bitmap(), 0,
- height() - bottom_cap_height);
-
- // Paint the grippy over the track.
- int grippy_x = (width() - grippy_bitmap()->width()) / 2;
- int grippy_y = (thumb_body_height - grippy_bitmap()->height()) / 2;
- canvas->DrawBitmapInt(*grippy_bitmap(), grippy_x, grippy_y);
- }
-
- virtual void OnMouseEntered(const MouseEvent& event) {
- SetState(CustomButton::BS_HOT);
- }
-
- virtual void OnMouseExited(const MouseEvent& event) {
- SetState(CustomButton::BS_NORMAL);
- }
-
- virtual bool OnMousePressed(const MouseEvent& event) {
- mouse_offset_ = scroll_bar_->IsHorizontal() ? event.x() : event.y();
- drag_start_position_ = GetPosition();
- SetState(CustomButton::BS_PUSHED);
- return true;
- }
-
- virtual bool OnMouseDragged(const MouseEvent& event) {
- // If the user moves the mouse more than |kScrollThumbDragOutSnap| outside
- // the bounds of the thumb, the scrollbar will snap the scroll back to the
- // point it was at before the drag began.
- if (scroll_bar_->IsHorizontal()) {
- if ((event.y() < y() - kScrollThumbDragOutSnap) ||
- (event.y() > (y() + height() + kScrollThumbDragOutSnap))) {
- scroll_bar_->ScrollToThumbPosition(drag_start_position_, false);
- return true;
- }
- } else {
- if ((event.x() < x() - kScrollThumbDragOutSnap) ||
- (event.x() > (x() + width() + kScrollThumbDragOutSnap))) {
- scroll_bar_->ScrollToThumbPosition(drag_start_position_, false);
- return true;
- }
- }
- if (scroll_bar_->IsHorizontal()) {
- int thumb_x = event.x() - mouse_offset_;
- scroll_bar_->ScrollToThumbPosition(x() + thumb_x, false);
- } else {
- int thumb_y = event.y() - mouse_offset_;
- scroll_bar_->ScrollToThumbPosition(y() + thumb_y, false);
- }
- return true;
- }
-
- virtual void OnMouseReleased(const MouseEvent& event,
- bool canceled) {
- SetState(CustomButton::BS_HOT);
- View::OnMouseReleased(event, canceled);
- }
-
- private:
- // Returns the bitmap rendered at the start of the thumb.
- SkBitmap* start_cap_bitmap() const {
- return scroll_bar_->images_[BitmapScrollBar::THUMB_START_CAP][state_];
- }
-
- // Returns the bitmap rendered at the end of the thumb.
- SkBitmap* end_cap_bitmap() const {
- return scroll_bar_->images_[BitmapScrollBar::THUMB_END_CAP][state_];
- }
-
- // Returns the bitmap that is tiled in the background of the thumb between
- // the start and the end caps.
- SkBitmap* background_bitmap() const {
- return scroll_bar_->images_[BitmapScrollBar::THUMB_MIDDLE][state_];
- }
-
- // Returns the bitmap that is rendered in the middle of the thumb
- // transparently over the background bitmap.
- SkBitmap* grippy_bitmap() const {
- return scroll_bar_->images_[BitmapScrollBar::THUMB_GRIPPY]
- [CustomButton::BS_NORMAL];
- }
-
- // Update our state and schedule a repaint when the mouse moves over us.
- void SetState(CustomButton::ButtonState state) {
- state_ = state;
- SchedulePaint();
- }
-
- // The BitmapScrollBar that owns us.
- BitmapScrollBar* scroll_bar_;
-
- int drag_start_position_;
-
- // The position of the mouse on the scroll axis relative to the top of this
- // View when the drag started.
- int mouse_offset_;
-
- // The current state of the thumb button.
- CustomButton::ButtonState state_;
-
- DISALLOW_EVIL_CONSTRUCTORS(BitmapScrollBarThumb);
-};
-
-} // anonymous namespace
-
-///////////////////////////////////////////////////////////////////////////////
-// BitmapScrollBar, public:
-
-BitmapScrollBar::BitmapScrollBar(bool horizontal, bool show_scroll_buttons)
- : contents_size_(0),
- contents_scroll_offset_(0),
- prev_button_(new AutorepeatButton(this)),
- next_button_(new AutorepeatButton(this)),
- thumb_(new BitmapScrollBarThumb(this)),
- thumb_track_state_(CustomButton::BS_NORMAL),
- last_scroll_amount_(SCROLL_NONE),
- repeater_(NewCallback<BitmapScrollBar>(this,
- &BitmapScrollBar::TrackClicked)),
- context_menu_mouse_position_(0),
- show_scroll_buttons_(show_scroll_buttons),
- ScrollBar(horizontal) {
- if (!show_scroll_buttons_) {
- prev_button_->SetVisible(false);
- next_button_->SetVisible(false);
- }
-
- AddChildView(prev_button_);
- AddChildView(next_button_);
- AddChildView(thumb_);
-
- SetContextMenuController(this);
- prev_button_->SetContextMenuController(this);
- next_button_->SetContextMenuController(this);
- thumb_->SetContextMenuController(this);
-}
-
-gfx::Rect BitmapScrollBar::GetTrackBounds() const {
- gfx::Size prefsize = prev_button_->GetPreferredSize();
- if (IsHorizontal()) {
- if (!show_scroll_buttons_)
- prefsize.set_width(0);
- int new_width =
- std::max(0, static_cast<int>(width() - (prefsize.width() * 2)));
- gfx::Rect track_bounds(prefsize.width(), 0, new_width, prefsize.height());
- return track_bounds;
- }
- if (!show_scroll_buttons_)
- prefsize.set_height(0);
- gfx::Rect track_bounds(0, prefsize.height(), prefsize.width(),
- std::max(0, height() - (prefsize.height() * 2)));
- return track_bounds;
-}
-
-void BitmapScrollBar::SetImage(ScrollBarPart part,
- CustomButton::ButtonState state,
- SkBitmap* bitmap) {
- DCHECK(part < PART_COUNT);
- DCHECK(state < CustomButton::BS_COUNT);
- switch (part) {
- case PREV_BUTTON:
- prev_button_->SetImage(state, bitmap);
- break;
- case NEXT_BUTTON:
- next_button_->SetImage(state, bitmap);
- break;
- case THUMB_START_CAP:
- case THUMB_MIDDLE:
- case THUMB_END_CAP:
- case THUMB_GRIPPY:
- case THUMB_TRACK:
- images_[part][state] = bitmap;
- break;
- }
-}
-
-void BitmapScrollBar::ScrollByAmount(ScrollAmount amount) {
- ScrollBarController* controller = GetController();
- int offset = contents_scroll_offset_;
- switch (amount) {
- case SCROLL_START:
- offset = GetMinPosition();
- break;
- case SCROLL_END:
- offset = GetMaxPosition();
- break;
- case SCROLL_PREV_LINE:
- offset -= controller->GetScrollIncrement(this, false, false);
- offset = std::max(GetMinPosition(), offset);
- break;
- case SCROLL_NEXT_LINE:
- offset += controller->GetScrollIncrement(this, false, true);
- offset = std::min(GetMaxPosition(), offset);
- break;
- case SCROLL_PREV_PAGE:
- offset -= controller->GetScrollIncrement(this, true, false);
- offset = std::max(GetMinPosition(), offset);
- break;
- case SCROLL_NEXT_PAGE:
- offset += controller->GetScrollIncrement(this, true, true);
- offset = std::min(GetMaxPosition(), offset);
- break;
- }
- contents_scroll_offset_ = offset;
- ScrollContentsToOffset();
-}
-
-void BitmapScrollBar::ScrollToThumbPosition(int thumb_position,
- bool scroll_to_middle) {
- contents_scroll_offset_ =
- CalculateContentsOffset(thumb_position, scroll_to_middle);
- if (contents_scroll_offset_ < GetMinPosition()) {
- contents_scroll_offset_ = GetMinPosition();
- } else if (contents_scroll_offset_ > GetMaxPosition()) {
- contents_scroll_offset_ = GetMaxPosition();
- }
- ScrollContentsToOffset();
- SchedulePaint();
-}
-
-void BitmapScrollBar::ScrollByContentsOffset(int contents_offset) {
- contents_scroll_offset_ -= contents_offset;
- if (contents_scroll_offset_ < GetMinPosition()) {
- contents_scroll_offset_ = GetMinPosition();
- } else if (contents_scroll_offset_ > GetMaxPosition()) {
- contents_scroll_offset_ = GetMaxPosition();
- }
- ScrollContentsToOffset();
-}
-
-void BitmapScrollBar::TrackClicked() {
- if (last_scroll_amount_ != SCROLL_NONE)
- ScrollByAmount(last_scroll_amount_);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// BitmapScrollBar, View implementation:
-
-gfx::Size BitmapScrollBar::GetPreferredSize() {
- // In this case, we're returning the desired width of the scrollbar and its
- // minimum allowable height.
- gfx::Size button_prefsize = prev_button_->GetPreferredSize();
- return gfx::Size(button_prefsize.width(), button_prefsize.height() * 2);
-}
-
-void BitmapScrollBar::Paint(ChromeCanvas* canvas) {
- // Paint the track.
- gfx::Rect track_bounds = GetTrackBounds();
- canvas->TileImageInt(*images_[THUMB_TRACK][thumb_track_state_],
- track_bounds.x(), track_bounds.y(),
- track_bounds.width(), track_bounds.height());
-}
-
-void BitmapScrollBar::Layout() {
- // Size and place the two scroll buttons.
- if (show_scroll_buttons_) {
- gfx::Size prefsize = prev_button_->GetPreferredSize();
- prev_button_->SetBounds(0, 0, prefsize.width(), prefsize.height());
- prefsize = next_button_->GetPreferredSize();
- if (IsHorizontal()) {
- next_button_->SetBounds(width() - prefsize.width(), 0, prefsize.width(),
- prefsize.height());
- } else {
- next_button_->SetBounds(0, height() - prefsize.height(), prefsize.width(),
- prefsize.height());
- }
- } else {
- prev_button_->SetBounds(0, 0, 0, 0);
- next_button_->SetBounds(0, 0, 0, 0);
- }
-
- // Size and place the thumb
- gfx::Size thumb_prefsize = thumb_->GetPreferredSize();
- gfx::Rect track_bounds = GetTrackBounds();
-
- // Preserve the height/width of the thumb (depending on orientation) as set
- // by the last call to |Update|, but coerce the width/height to be the
- // appropriate value for the bitmaps provided.
- if (IsHorizontal()) {
- thumb_->SetBounds(thumb_->x(), thumb_->y(), thumb_->width(),
- thumb_prefsize.height());
- } else {
- thumb_->SetBounds(thumb_->x(), thumb_->y(), thumb_prefsize.width(),
- thumb_->height());
- }
-
- // Hide the thumb if the track isn't tall enough to display even a tiny
- // thumb. The user can only use the mousewheel, scroll buttons or keyboard
- // in this scenario.
- if ((IsHorizontal() && (track_bounds.width() < thumb_prefsize.width()) ||
- (!IsHorizontal() && (track_bounds.height() < thumb_prefsize.height())))) {
- thumb_->SetVisible(false);
- } else if (!thumb_->IsVisible()) {
- thumb_->SetVisible(true);
- }
-}
-
-bool BitmapScrollBar::OnMousePressed(const MouseEvent& event) {
- if (event.IsOnlyLeftMouseButton()) {
- SetThumbTrackState(CustomButton::BS_PUSHED);
- gfx::Rect thumb_bounds = thumb_->bounds();
- if (IsHorizontal()) {
- if (event.x() < thumb_bounds.x()) {
- last_scroll_amount_ = SCROLL_PREV_PAGE;
- } else if (event.x() > thumb_bounds.right()) {
- last_scroll_amount_ = SCROLL_NEXT_PAGE;
- }
- } else {
- if (event.y() < thumb_bounds.y()) {
- last_scroll_amount_ = SCROLL_PREV_PAGE;
- } else if (event.y() > thumb_bounds.bottom()) {
- last_scroll_amount_ = SCROLL_NEXT_PAGE;
- }
- }
- TrackClicked();
- repeater_.Start();
- }
- return true;
-}
-
-void BitmapScrollBar::OnMouseReleased(const MouseEvent& event, bool canceled) {
- SetThumbTrackState(CustomButton::BS_NORMAL);
- repeater_.Stop();
- View::OnMouseReleased(event, canceled);
-}
-
-bool BitmapScrollBar::OnMouseWheel(const MouseWheelEvent& event) {
- ScrollByContentsOffset(event.GetOffset());
- return true;
-}
-
-bool BitmapScrollBar::OnKeyPressed(const KeyEvent& event) {
- ScrollAmount amount = SCROLL_NONE;
- switch(event.GetCharacter()) {
- case VK_UP:
- if (!IsHorizontal())
- amount = SCROLL_PREV_LINE;
- break;
- case VK_DOWN:
- if (!IsHorizontal())
- amount = SCROLL_NEXT_LINE;
- break;
- case VK_LEFT:
- if (IsHorizontal())
- amount = SCROLL_PREV_LINE;
- break;
- case VK_RIGHT:
- if (IsHorizontal())
- amount = SCROLL_NEXT_LINE;
- break;
- case VK_PRIOR:
- amount = SCROLL_PREV_PAGE;
- break;
- case VK_NEXT:
- amount = SCROLL_NEXT_PAGE;
- break;
- case VK_HOME:
- amount = SCROLL_START;
- break;
- case VK_END:
- amount = SCROLL_END;
- break;
- }
- if (amount != SCROLL_NONE) {
- ScrollByAmount(amount);
- return true;
- }
- return false;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// BitmapScrollBar, ContextMenuController implementation:
-
-enum ScrollBarContextMenuCommands {
- ScrollBarContextMenuCommand_ScrollHere = 1,
- ScrollBarContextMenuCommand_ScrollStart,
- ScrollBarContextMenuCommand_ScrollEnd,
- ScrollBarContextMenuCommand_ScrollPageUp,
- ScrollBarContextMenuCommand_ScrollPageDown,
- ScrollBarContextMenuCommand_ScrollPrev,
- ScrollBarContextMenuCommand_ScrollNext
-};
-
-void BitmapScrollBar::ShowContextMenu(View* source,
- int x,
- int y,
- bool is_mouse_gesture) {
- Widget* widget = GetWidget();
- gfx::Rect widget_bounds;
- widget->GetBounds(&widget_bounds, true);
- gfx::Point temp_pt(x - widget_bounds.x(), y - widget_bounds.y());
- View::ConvertPointFromWidget(this, &temp_pt);
- context_menu_mouse_position_ = IsHorizontal() ? temp_pt.x() : temp_pt.y();
-
- Menu menu(this, Menu::TOPLEFT, GetWidget()->GetNativeView());
- menu.AppendDelegateMenuItem(ScrollBarContextMenuCommand_ScrollHere);
- menu.AppendSeparator();
- menu.AppendDelegateMenuItem(ScrollBarContextMenuCommand_ScrollStart);
- menu.AppendDelegateMenuItem(ScrollBarContextMenuCommand_ScrollEnd);
- menu.AppendSeparator();
- menu.AppendDelegateMenuItem(ScrollBarContextMenuCommand_ScrollPageUp);
- menu.AppendDelegateMenuItem(ScrollBarContextMenuCommand_ScrollPageDown);
- menu.AppendSeparator();
- menu.AppendDelegateMenuItem(ScrollBarContextMenuCommand_ScrollPrev);
- menu.AppendDelegateMenuItem(ScrollBarContextMenuCommand_ScrollNext);
- menu.RunMenuAt(x, y);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// BitmapScrollBar, Menu::Delegate implementation:
-
-std::wstring BitmapScrollBar::GetLabel(int id) const {
- switch (id) {
- case ScrollBarContextMenuCommand_ScrollHere:
- return l10n_util::GetString(IDS_SCROLLBAR_CXMENU_SCROLLHERE);
- case ScrollBarContextMenuCommand_ScrollStart:
- if (IsHorizontal())
- return l10n_util::GetString(IDS_SCROLLBAR_CXMENU_SCROLLLEFTEDGE);
- return l10n_util::GetString(IDS_SCROLLBAR_CXMENU_SCROLLHOME);
- case ScrollBarContextMenuCommand_ScrollEnd:
- if (IsHorizontal())
- return l10n_util::GetString(IDS_SCROLLBAR_CXMENU_SCROLLRIGHTEDGE);
- return l10n_util::GetString(IDS_SCROLLBAR_CXMENU_SCROLLEND);
- case ScrollBarContextMenuCommand_ScrollPageUp:
- if (IsHorizontal())
- return l10n_util::GetString(IDS_SCROLLBAR_CXMENU_SCROLLPAGEUP);
- return l10n_util::GetString(IDS_SCROLLBAR_CXMENU_SCROLLPAGEUP);
- case ScrollBarContextMenuCommand_ScrollPageDown:
- if (IsHorizontal())
- return l10n_util::GetString(IDS_SCROLLBAR_CXMENU_SCROLLPAGEDOWN);
- return l10n_util::GetString(IDS_SCROLLBAR_CXMENU_SCROLLPAGEDOWN);
- case ScrollBarContextMenuCommand_ScrollPrev:
- if (IsHorizontal())
- return l10n_util::GetString(IDS_SCROLLBAR_CXMENU_SCROLLLEFT);
- return l10n_util::GetString(IDS_SCROLLBAR_CXMENU_SCROLLUP);
- case ScrollBarContextMenuCommand_ScrollNext:
- if (IsHorizontal())
- return l10n_util::GetString(IDS_SCROLLBAR_CXMENU_SCROLLRIGHT);
- return l10n_util::GetString(IDS_SCROLLBAR_CXMENU_SCROLLDOWN);
- }
- NOTREACHED() << "Invalid BitmapScrollBar Context Menu command!";
- return L"";
-}
-
-bool BitmapScrollBar::IsCommandEnabled(int id) const {
- switch (id) {
- case ScrollBarContextMenuCommand_ScrollPageUp:
- case ScrollBarContextMenuCommand_ScrollPageDown:
- return !IsHorizontal();
- }
- return true;
-}
-
-void BitmapScrollBar::ExecuteCommand(int id) {
- switch (id) {
- case ScrollBarContextMenuCommand_ScrollHere:
- ScrollToThumbPosition(context_menu_mouse_position_, true);
- break;
- case ScrollBarContextMenuCommand_ScrollStart:
- ScrollByAmount(SCROLL_START);
- break;
- case ScrollBarContextMenuCommand_ScrollEnd:
- ScrollByAmount(SCROLL_END);
- break;
- case ScrollBarContextMenuCommand_ScrollPageUp:
- ScrollByAmount(SCROLL_PREV_PAGE);
- break;
- case ScrollBarContextMenuCommand_ScrollPageDown:
- ScrollByAmount(SCROLL_NEXT_PAGE);
- break;
- case ScrollBarContextMenuCommand_ScrollPrev:
- ScrollByAmount(SCROLL_PREV_LINE);
- break;
- case ScrollBarContextMenuCommand_ScrollNext:
- ScrollByAmount(SCROLL_NEXT_LINE);
- break;
- }
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// BitmapScrollBar, ButtonListener implementation:
-
-void BitmapScrollBar::ButtonPressed(Button* sender) {
- if (sender == prev_button_) {
- ScrollByAmount(SCROLL_PREV_LINE);
- } else if (sender == next_button_) {
- ScrollByAmount(SCROLL_NEXT_LINE);
- }
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// BitmapScrollBar, ScrollBar implementation:
-
-void BitmapScrollBar::Update(int viewport_size, int content_size,
- int contents_scroll_offset) {
- ScrollBar::Update(viewport_size, content_size, contents_scroll_offset);
-
- // Make sure contents_size is always > 0 to avoid divide by zero errors in
- // calculations throughout this code.
- contents_size_ = std::max(1, content_size);
-
- if (content_size < 0)
- content_size = 0;
- if (contents_scroll_offset < 0)
- contents_scroll_offset = 0;
- if (contents_scroll_offset > content_size)
- contents_scroll_offset = content_size;
-
- // Thumb Height and Thumb Pos.
- // The height of the thumb is the ratio of the Viewport height to the
- // content size multiplied by the height of the thumb track.
- double ratio = static_cast<double>(viewport_size) / contents_size_;
- int thumb_size = static_cast<int>(ratio * GetTrackSize());
- thumb_->SetSize(thumb_size);
-
- int thumb_position = CalculateThumbPosition(contents_scroll_offset);
- thumb_->SetPosition(thumb_position);
-}
-
-int BitmapScrollBar::GetLayoutSize() const {
- gfx::Size prefsize = prev_button_->GetPreferredSize();
- return IsHorizontal() ? prefsize.height() : prefsize.width();
-}
-
-int BitmapScrollBar::GetPosition() const {
- return thumb_->GetPosition();
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// BitmapScrollBar, private:
-
-void BitmapScrollBar::ScrollContentsToOffset() {
- GetController()->ScrollToPosition(this, contents_scroll_offset_);
- thumb_->SetPosition(CalculateThumbPosition(contents_scroll_offset_));
-}
-
-int BitmapScrollBar::GetTrackSize() const {
- gfx::Rect track_bounds = GetTrackBounds();
- return IsHorizontal() ? track_bounds.width() : track_bounds.height();
-}
-
-int BitmapScrollBar::CalculateThumbPosition(int contents_scroll_offset) const {
- return (contents_scroll_offset * GetTrackSize()) / contents_size_;
-}
-
-int BitmapScrollBar::CalculateContentsOffset(int thumb_position,
- bool scroll_to_middle) const {
- if (scroll_to_middle)
- thumb_position = thumb_position - (thumb_->GetSize() / 2);
- return (thumb_position * contents_size_) / GetTrackSize();
-}
-
-void BitmapScrollBar::SetThumbTrackState(CustomButton::ButtonState state) {
- thumb_track_state_ = state;
- SchedulePaint();
-}
-
-} // namespace views
diff --git a/chrome/views/controls/scrollbar/bitmap_scroll_bar.h b/chrome/views/controls/scrollbar/bitmap_scroll_bar.h
deleted file mode 100644
index 8bb717c..0000000
--- a/chrome/views/controls/scrollbar/bitmap_scroll_bar.h
+++ /dev/null
@@ -1,192 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_CONTROLS_SCROLLBAR_BITMAP_SCROLL_BAR_H_
-#define CHROME_VIEWS_CONTROLS_SCROLLBAR_BITMAP_SCROLL_BAR_H_
-
-#include "chrome/views/controls/button/image_button.h"
-#include "chrome/views/controls/menu/menu.h"
-#include "chrome/views/controls/scrollbar/scroll_bar.h"
-#include "chrome/views/repeat_controller.h"
-
-namespace views {
-
-namespace {
-class BitmapScrollBarThumb;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// BitmapScrollBar
-//
-// A ScrollBar subclass that implements a scroll bar rendered using bitmaps
-// that the user provides. There are bitmaps for the up and down buttons, as
-// well as for the thumb and track. This is intended for creating UIs that
-// have customized, non-native appearances, like floating HUDs etc.
-//
-// Maybe TODO(beng): (Cleanup) If we need to, we may want to factor rendering
-// out of this altogether and have the user supply
-// Background impls for each component, and just use those
-// to render, so that for example we get native theme
-// rendering.
-//
-///////////////////////////////////////////////////////////////////////////////
-class BitmapScrollBar : public ScrollBar,
- public ButtonListener,
- public ContextMenuController,
- public Menu::Delegate {
- public:
- BitmapScrollBar(bool horizontal, bool show_scroll_buttons);
- virtual ~BitmapScrollBar() { }
-
- // Get the bounds of the "track" area that the thumb is free to slide within.
- gfx::Rect GetTrackBounds() const;
-
- // A list of parts that the user may supply bitmaps for.
- enum ScrollBarPart {
- // The button used to represent scrolling up/left by 1 line.
- PREV_BUTTON = 0,
- // The button used to represent scrolling down/right by 1 line.
- // IMPORTANT: The code assumes the prev and next
- // buttons have equal width and equal height.
- NEXT_BUTTON,
- // The top/left segment of the thumb on the scrollbar.
- THUMB_START_CAP,
- // The tiled background image of the thumb.
- THUMB_MIDDLE,
- // The bottom/right segment of the thumb on the scrollbar.
- THUMB_END_CAP,
- // The grippy that is rendered in the center of the thumb.
- THUMB_GRIPPY,
- // The tiled background image of the thumb track.
- THUMB_TRACK,
- PART_COUNT
- };
-
- // Sets the bitmap to be rendered for the specified part and state.
- void SetImage(ScrollBarPart part,
- CustomButton::ButtonState state,
- SkBitmap* bitmap);
-
- // An enumeration of different amounts of incremental scroll, representing
- // events sent from different parts of the UI/keyboard.
- enum ScrollAmount {
- SCROLL_NONE = 0,
- SCROLL_START,
- SCROLL_END,
- SCROLL_PREV_LINE,
- SCROLL_NEXT_LINE,
- SCROLL_PREV_PAGE,
- SCROLL_NEXT_PAGE,
- };
-
- // Scroll the contents by the specified type (see ScrollAmount above).
- void ScrollByAmount(ScrollAmount amount);
-
- // Scroll the contents to the appropriate position given the supplied
- // position of the thumb (thumb track coordinates). If |scroll_to_middle| is
- // true, then the conversion assumes |thumb_position| is in the middle of the
- // thumb rather than the top.
- void ScrollToThumbPosition(int thumb_position, bool scroll_to_middle);
-
- // Scroll the contents by the specified offset (contents coordinates).
- void ScrollByContentsOffset(int contents_offset);
-
- // View overrides:
- virtual gfx::Size GetPreferredSize();
- virtual void Paint(ChromeCanvas* canvas);
- virtual void Layout();
- virtual bool OnMousePressed(const MouseEvent& event);
- virtual void OnMouseReleased(const MouseEvent& event, bool canceled);
- virtual bool OnMouseWheel(const MouseWheelEvent& event);
- virtual bool OnKeyPressed(const KeyEvent& event);
-
- // BaseButton::ButtonListener overrides:
- virtual void ButtonPressed(Button* sender);
-
- // ScrollBar overrides:
- virtual void Update(int viewport_size,
- int content_size,
- int contents_scroll_offset);
- virtual int GetLayoutSize() const;
- virtual int GetPosition() const;
-
- // ContextMenuController overrides.
- virtual void ShowContextMenu(View* source,
- int x,
- int y,
- bool is_mouse_gesture);
-
- // Menu::Delegate overrides:
- virtual std::wstring GetLabel(int id) const;
- virtual bool IsCommandEnabled(int id) const;
- virtual void ExecuteCommand(int id);
-
- private:
- // Called when the mouse is pressed down in the track area.
- void TrackClicked();
-
- // Responsible for scrolling the contents and also updating the UI to the
- // current value of the Scroll Offset.
- void ScrollContentsToOffset();
-
- // Returns the size (width or height) of the track area of the ScrollBar.
- int GetTrackSize() const;
-
- // Calculate the position of the thumb within the track based on the
- // specified scroll offset of the contents.
- int CalculateThumbPosition(int contents_scroll_offset) const;
-
- // Calculates the current value of the contents offset (contents coordinates)
- // based on the current thumb position (thumb track coordinates). See
- // |ScrollToThumbPosition| for an explanation of |scroll_to_middle|.
- int CalculateContentsOffset(int thumb_position,
- bool scroll_to_middle) const;
-
- // Called when the state of the thumb track changes (e.g. by the user
- // pressing the mouse button down in it).
- void SetThumbTrackState(CustomButton::ButtonState state);
-
- // The thumb needs to be able to access the part images.
- friend BitmapScrollBarThumb;
- SkBitmap* images_[PART_COUNT][CustomButton::BS_COUNT];
-
- // The size of the scrolled contents, in pixels.
- int contents_size_;
-
- // The current amount the contents is offset by in the viewport.
- int contents_scroll_offset_;
-
- // Up/Down/Left/Right buttons and the Thumb.
- ImageButton* prev_button_;
- ImageButton* next_button_;
- BitmapScrollBarThumb* thumb_;
-
- // The state of the scrollbar track. Typically, the track will highlight when
- // the user presses the mouse on them (during page scrolling).
- CustomButton::ButtonState thumb_track_state_;
-
- // The last amount of incremental scroll that this scrollbar performed. This
- // is accessed by the callbacks for the auto-repeat up/down buttons to know
- // what direction to repeatedly scroll in.
- ScrollAmount last_scroll_amount_;
-
- // An instance of a RepeatController which scrolls the scrollbar continuously
- // as the user presses the mouse button down on the up/down buttons or the
- // track.
- RepeatController repeater_;
-
- // The position of the mouse within the scroll bar when the context menu
- // was invoked.
- int context_menu_mouse_position_;
-
- // True if the scroll buttons at each end of the scroll bar should be shown.
- bool show_scroll_buttons_;
-
- DISALLOW_EVIL_CONSTRUCTORS(BitmapScrollBar);
-};
-
-} // namespace views
-
-#endif // #ifndef CHROME_VIEWS_CONTROLS_SCROLLBAR_BITMAP_SCROLL_BAR_H_
diff --git a/chrome/views/controls/scrollbar/native_scroll_bar.cc b/chrome/views/controls/scrollbar/native_scroll_bar.cc
deleted file mode 100644
index 9e0d0eb..0000000
--- a/chrome/views/controls/scrollbar/native_scroll_bar.cc
+++ /dev/null
@@ -1,357 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/controls/scrollbar/native_scroll_bar.h"
-
-#include <atlbase.h>
-#include <atlapp.h>
-#include <atlwin.h>
-#include <atlcrack.h>
-#include <atlframe.h>
-#include <atlmisc.h>
-#include <string>
-
-#include "base/message_loop.h"
-#include "chrome/views/controls/hwnd_view.h"
-#include "chrome/views/widget/widget.h"
-
-namespace views {
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// ScrollBarContainer
-//
-// Since windows scrollbar only send notifications to their parent hwnd, we
-// use instance of this class to wrap native scrollbars.
-//
-/////////////////////////////////////////////////////////////////////////////
-class ScrollBarContainer : public CWindowImpl<ScrollBarContainer,
- CWindow,
- CWinTraits<WS_CHILD>> {
- public:
- ScrollBarContainer(ScrollBar* parent) : parent_(parent),
- scrollbar_(NULL) {
- Create(parent->GetWidget()->GetNativeView());
- ::ShowWindow(m_hWnd, SW_SHOW);
- }
-
- virtual ~ScrollBarContainer() {
- }
-
- DECLARE_FRAME_WND_CLASS(L"ChromeViewsScrollBarContainer", NULL);
- BEGIN_MSG_MAP(ScrollBarContainer);
- MSG_WM_CREATE(OnCreate);
- MSG_WM_ERASEBKGND(OnEraseBkgnd);
- MSG_WM_PAINT(OnPaint);
- MSG_WM_SIZE(OnSize);
- MSG_WM_HSCROLL(OnHorizScroll);
- MSG_WM_VSCROLL(OnVertScroll);
- END_MSG_MAP();
-
- HWND GetScrollBarHWND() {
- return scrollbar_;
- }
-
- // Invoked when the scrollwheel is used
- void ScrollWithOffset(int o) {
- SCROLLINFO si;
- si.cbSize = sizeof(si);
- si.fMask = SIF_POS;
- ::GetScrollInfo(scrollbar_, SB_CTL, &si);
- int pos = si.nPos - o;
-
- if (pos < parent_->GetMinPosition())
- pos = parent_->GetMinPosition();
- else if (pos > parent_->GetMaxPosition())
- pos = parent_->GetMaxPosition();
-
- ScrollBarController* sbc = parent_->GetController();
- sbc->ScrollToPosition(parent_, pos);
-
- si.nPos = pos;
- si.fMask = SIF_POS;
- ::SetScrollInfo(scrollbar_, SB_CTL, &si, TRUE);
- }
-
- private:
-
- LRESULT OnCreate(LPCREATESTRUCT create_struct) {
- scrollbar_ = CreateWindow(L"SCROLLBAR",
- L"",
- WS_CHILD | (parent_->IsHorizontal() ?
- SBS_HORZ : SBS_VERT),
- 0,
- 0,
- parent_->width(),
- parent_->height(),
- m_hWnd,
- NULL,
- NULL,
- NULL);
- ::ShowWindow(scrollbar_, SW_SHOW);
- return 1;
- }
-
- LRESULT OnEraseBkgnd(HDC dc) {
- return 1;
- }
-
- void OnPaint(HDC ignore) {
- PAINTSTRUCT ps;
- HDC dc = ::BeginPaint(*this, &ps);
- ::EndPaint(*this, &ps);
- }
-
- void OnSize(int type, const CSize& sz) {
- ::SetWindowPos(scrollbar_,
- 0,
- 0,
- 0,
- sz.cx,
- sz.cy,
- SWP_DEFERERASE |
- SWP_NOACTIVATE |
- SWP_NOCOPYBITS |
- SWP_NOOWNERZORDER |
- SWP_NOSENDCHANGING |
- SWP_NOZORDER);
- }
-
- void OnScroll(int code, HWND source, bool is_horizontal) {
- int pos;
-
- if (code == SB_ENDSCROLL) {
- return;
- }
-
- // If we receive an event from the scrollbar, make the view
- // component focused so we actually get mousewheel events.
- if (source != NULL) {
- Widget* widget = parent_->GetWidget();
- if (widget && widget->GetNativeView() != GetFocus()) {
- parent_->RequestFocus();
- }
- }
-
- SCROLLINFO si;
- si.cbSize = sizeof(si);
- si.fMask = SIF_POS | SIF_TRACKPOS;
- ::GetScrollInfo(scrollbar_, SB_CTL, &si);
- pos = si.nPos;
-
- ScrollBarController* sbc = parent_->GetController();
-
- switch (code) {
- case SB_BOTTOM: // case SB_RIGHT:
- pos = parent_->GetMaxPosition();
- break;
- case SB_TOP: // case SB_LEFT:
- pos = parent_->GetMinPosition();
- break;
- case SB_LINEDOWN: // case SB_LINERIGHT:
- pos += sbc->GetScrollIncrement(parent_, false, true);
- pos = std::min(parent_->GetMaxPosition(), pos);
- break;
- case SB_LINEUP: // case SB_LINELEFT:
- pos -= sbc->GetScrollIncrement(parent_, false, false);
- pos = std::max(parent_->GetMinPosition(), pos);
- break;
- case SB_PAGEDOWN: // case SB_PAGERIGHT:
- pos += sbc->GetScrollIncrement(parent_, true, true);
- pos = std::min(parent_->GetMaxPosition(), pos);
- break;
- case SB_PAGEUP: // case SB_PAGELEFT:
- pos -= sbc->GetScrollIncrement(parent_, true, false);
- pos = std::max(parent_->GetMinPosition(), pos);
- break;
- case SB_THUMBPOSITION:
- case SB_THUMBTRACK:
- pos = si.nTrackPos;
- if (pos < parent_->GetMinPosition())
- pos = parent_->GetMinPosition();
- else if (pos > parent_->GetMaxPosition())
- pos = parent_->GetMaxPosition();
- break;
- default:
- break;
- }
-
- sbc->ScrollToPosition(parent_, pos);
-
- si.nPos = pos;
- si.fMask = SIF_POS;
- ::SetScrollInfo(scrollbar_, SB_CTL, &si, TRUE);
-
- // Note: the system scrollbar modal loop doesn't give a chance
- // to our message_loop so we need to call DidProcessMessage()
- // manually.
- //
- // Sadly, we don't know what message has been processed. We may
- // want to remove the message from DidProcessMessage()
- MSG dummy;
- dummy.hwnd = NULL;
- dummy.message = 0;
- MessageLoopForUI::current()->DidProcessMessage(dummy);
- }
-
- // note: always ignore 2nd param as it is 16 bits
- void OnHorizScroll(int n_sb_code, int ignore, HWND source) {
- OnScroll(n_sb_code, source, true);
- }
-
- // note: always ignore 2nd param as it is 16 bits
- void OnVertScroll(int n_sb_code, int ignore, HWND source) {
- OnScroll(n_sb_code, source, false);
- }
-
-
-
- ScrollBar* parent_;
- HWND scrollbar_;
-};
-
-NativeScrollBar::NativeScrollBar(bool is_horiz)
- : sb_view_(NULL),
- sb_container_(NULL),
- ScrollBar(is_horiz) {
-}
-
-NativeScrollBar::~NativeScrollBar() {
- if (sb_container_) {
- // We always destroy the scrollbar container explicitly to cover all
- // cases including when the container is no longer connected to a
- // widget tree.
- ::DestroyWindow(*sb_container_);
- delete sb_container_;
- }
-}
-
-void NativeScrollBar::ViewHierarchyChanged(bool is_add, View *parent,
- View *child) {
- Widget* widget;
- if (is_add && (widget = GetWidget()) && !sb_view_) {
- sb_view_ = new HWNDView();
- AddChildView(sb_view_);
- sb_container_ = new ScrollBarContainer(this);
- sb_view_->Attach(*sb_container_);
- Layout();
- }
-}
-
-void NativeScrollBar::Layout() {
- if (sb_view_)
- sb_view_->SetBounds(GetLocalBounds(true));
-}
-
-gfx::Size NativeScrollBar::GetPreferredSize() {
- if (IsHorizontal())
- return gfx::Size(0, GetLayoutSize());
- return gfx::Size(GetLayoutSize(), 0);
-}
-
-void NativeScrollBar::Update(int viewport_size,
- int content_size,
- int current_pos) {
- ScrollBar::Update(viewport_size, content_size, current_pos);
- if (!sb_container_)
- return;
-
- if (content_size < 0)
- content_size = 0;
-
- if (current_pos < 0)
- current_pos = 0;
-
- if (current_pos > content_size)
- current_pos = content_size;
-
- SCROLLINFO si;
- si.cbSize = sizeof(si);
- si.fMask = SIF_DISABLENOSCROLL | SIF_POS | SIF_RANGE | SIF_PAGE;
- si.nMin = 0;
- si.nMax = content_size;
- si.nPos = current_pos;
- si.nPage = viewport_size;
- ::SetScrollInfo(sb_container_->GetScrollBarHWND(),
- SB_CTL,
- &si,
- TRUE);
-}
-
-int NativeScrollBar::GetLayoutSize() const {
- return ::GetSystemMetrics(IsHorizontal() ? SM_CYHSCROLL : SM_CYVSCROLL);
-}
-
-int NativeScrollBar::GetPosition() const {
- SCROLLINFO si;
- si.cbSize = sizeof(si);
- si.fMask = SIF_POS;
- GetScrollInfo(sb_container_->GetScrollBarHWND(), SB_CTL, &si);
- return si.nPos;
-}
-
-bool NativeScrollBar::OnMouseWheel(const MouseWheelEvent& e) {
- if (!sb_container_) {
- return false;
- }
-
- sb_container_->ScrollWithOffset(e.GetOffset());
- return true;
-}
-
-bool NativeScrollBar::OnKeyPressed(const KeyEvent& event) {
- if (!sb_container_) {
- return false;
- }
- int code = -1;
- switch(event.GetCharacter()) {
- case VK_UP:
- if (!IsHorizontal())
- code = SB_LINEUP;
- break;
- case VK_PRIOR:
- code = SB_PAGEUP;
- break;
- case VK_NEXT:
- code = SB_PAGEDOWN;
- break;
- case VK_DOWN:
- if (!IsHorizontal())
- code = SB_LINEDOWN;
- break;
- case VK_HOME:
- code = SB_TOP;
- break;
- case VK_END:
- code = SB_BOTTOM;
- break;
- case VK_LEFT:
- if (IsHorizontal())
- code = SB_LINELEFT;
- break;
- case VK_RIGHT:
- if (IsHorizontal())
- code = SB_LINERIGHT;
- break;
- }
- if (code != -1) {
- ::SendMessage(*sb_container_,
- IsHorizontal() ? WM_HSCROLL : WM_VSCROLL,
- MAKELONG(static_cast<WORD>(code), 0), 0L);
- return true;
- }
- return false;
-}
-
-//static
-int NativeScrollBar::GetHorizontalScrollBarHeight() {
- return ::GetSystemMetrics(SM_CYHSCROLL);
-}
-
-//static
-int NativeScrollBar::GetVerticalScrollBarWidth() {
- return ::GetSystemMetrics(SM_CXVSCROLL);
-}
-
-} // namespace views
diff --git a/chrome/views/controls/scrollbar/native_scroll_bar.h b/chrome/views/controls/scrollbar/native_scroll_bar.h
deleted file mode 100644
index 12bab22..0000000
--- a/chrome/views/controls/scrollbar/native_scroll_bar.h
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_CONTROLS_SCROLLBAR_NATIVE_SCROLLBAR_H_
-#define CHROME_VIEWS_CONTROLS_SCROLLBAR_NATIVE_SCROLLBAR_H_
-
-#include "build/build_config.h"
-
-#include "chrome/views/controls/scrollbar/scroll_bar.h"
-
-namespace views {
-
-class HWNDView;
-class ScrollBarContainer;
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// NativeScrollBar
-//
-// A View subclass that wraps a Native Windows scrollbar control.
-//
-// A scrollbar is either horizontal or vertical.
-//
-/////////////////////////////////////////////////////////////////////////////
-class NativeScrollBar : public ScrollBar {
- public:
-
- // Create new scrollbar, either horizontal or vertical
- explicit NativeScrollBar(bool is_horiz);
- virtual ~NativeScrollBar();
-
- // Overridden for layout purpose
- virtual void Layout();
- virtual gfx::Size GetPreferredSize();
-
- // Overridden for keyboard UI purpose
- virtual bool OnKeyPressed(const KeyEvent& event);
- virtual bool OnMouseWheel(const MouseWheelEvent& e);
-
- virtual void ViewHierarchyChanged(bool is_add, View *parent, View *child);
-
- // Overridden from ScrollBar
- virtual void Update(int viewport_size, int content_size, int current_pos);
- virtual int GetLayoutSize() const;
- virtual int GetPosition() const;
-
- // Return the system sizes
- static int GetHorizontalScrollBarHeight();
- static int GetVerticalScrollBarWidth();
-
- private:
-#if defined(OS_WIN)
- // The sb_view_ takes care of keeping sb_container in sync with the
- // view hierarchy
- HWNDView* sb_view_;
-#endif // defined(OS_WIN)
-
- // sb_container_ is a custom hwnd that we use to wrap the real
- // windows scrollbar. We need to do this to get the scroll events
- // without having to do anything special in the high level hwnd.
- ScrollBarContainer* sb_container_;
-};
-
-} // namespace views
-
-#endif // #ifndef CHROME_VIEWS_CONTROLS_SCROLLBAR_NATIVE_SCROLLBAR_H_
diff --git a/chrome/views/controls/scrollbar/scroll_bar.cc b/chrome/views/controls/scrollbar/scroll_bar.cc
deleted file mode 100644
index 36f37ab9..0000000
--- a/chrome/views/controls/scrollbar/scroll_bar.cc
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/controls/scrollbar/scroll_bar.h"
-
-namespace views {
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// ScrollBar implementation
-//
-/////////////////////////////////////////////////////////////////////////////
-
-ScrollBar::ScrollBar(bool is_horiz) : is_horiz_(is_horiz),
- controller_(NULL),
- max_pos_(0) {
-}
-
-ScrollBar::~ScrollBar() {
-}
-
-bool ScrollBar::IsHorizontal() const {
- return is_horiz_;
-}
-
-void ScrollBar::SetController(ScrollBarController* controller) {
- controller_ = controller;
-}
-
-ScrollBarController* ScrollBar::GetController() const {
- return controller_;
-}
-
-void ScrollBar::Update(int viewport_size, int content_size, int current_pos) {
- max_pos_ = std::max(0, content_size - viewport_size);
-}
-
-int ScrollBar::GetMaxPosition() const {
- return max_pos_;
-}
-
-int ScrollBar::GetMinPosition() const {
- return 0;
-}
-
-} // namespace views
diff --git a/chrome/views/controls/scrollbar/scroll_bar.h b/chrome/views/controls/scrollbar/scroll_bar.h
deleted file mode 100644
index b6509f2..0000000
--- a/chrome/views/controls/scrollbar/scroll_bar.h
+++ /dev/null
@@ -1,102 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_CONTROLS_SCROLLBAR_SCROLLBAR_H_
-#define CHROME_VIEWS_CONTROLS_SCROLLBAR_SCROLLBAR_H_
-
-#include "chrome/views/view.h"
-#include "chrome/views/event.h"
-
-namespace views {
-
-class ScrollBar;
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// ScrollBarController
-//
-// ScrollBarController defines the method that should be implemented to
-// receive notification from a scrollbar
-//
-/////////////////////////////////////////////////////////////////////////////
-class ScrollBarController {
- public:
-
- // Invoked by the scrollbar when the scrolling position changes
- // This method typically implements the actual scrolling.
- //
- // The provided position is expressed in pixels. It is the new X or Y
- // position which is in the GetMinPosition() / GetMaxPosition range.
- virtual void ScrollToPosition(ScrollBar* source, int position) = 0;
-
- // Returns the amount to scroll. The amount to scroll may be requested in
- // two different amounts. If is_page is true the 'page scroll' amount is
- // requested. The page scroll amount typically corresponds to the
- // visual size of the view. If is_page is false, the 'line scroll' amount
- // is being requested. The line scroll amount typically corresponds to the
- // size of one row/column.
- //
- // The return value should always be positive. A value <= 0 results in
- // scrolling by a fixed amount.
- virtual int GetScrollIncrement(ScrollBar* source,
- bool is_page,
- bool is_positive) = 0;
-};
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// ScrollBar
-//
-// A View subclass to wrap to implement a ScrollBar. Our current windows
-// version simply wraps a native windows scrollbar.
-//
-// A scrollbar is either horizontal or vertical
-//
-/////////////////////////////////////////////////////////////////////////////
-class ScrollBar : public View {
- public:
- virtual ~ScrollBar();
-
- // Return whether this scrollbar is horizontal
- bool IsHorizontal() const;
-
- // Set / Get the controller
- void SetController(ScrollBarController* controller);
- ScrollBarController* GetController() const;
-
- // Update the scrollbar appearance given a viewport size, content size and
- // current position
- virtual void Update(int viewport_size, int content_size, int current_pos);
-
- // Return the max and min positions
- int GetMaxPosition() const;
- int GetMinPosition() const;
-
- // Returns the position of the scrollbar.
- virtual int GetPosition() const = 0;
-
- // Get the width or height of this scrollbar, for use in layout calculations.
- // For a vertical scrollbar, this is the width of the scrollbar, likewise it
- // is the height for a horizontal scrollbar.
- virtual int GetLayoutSize() const = 0;
-
- protected:
- // Create new scrollbar, either horizontal or vertical. These are protected
- // since you need to be creating either a NativeScrollBar or a
- // BitmapScrollBar.
- ScrollBar(bool is_horiz);
-
- private:
- const bool is_horiz_;
-
- // Current controller
- ScrollBarController* controller_;
-
- // properties
- int max_pos_;
-};
-
-} // namespace views
-
-#endif // #ifndef CHROME_VIEWS_CONTROLS_SCROLLBAR_SCROLLBAR_H_
diff --git a/chrome/views/controls/separator.cc b/chrome/views/controls/separator.cc
deleted file mode 100644
index 0ffc061..0000000
--- a/chrome/views/controls/separator.cc
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/controls/separator.h"
-
-#include "chrome/views/controls/hwnd_view.h"
-
-namespace views {
-
-static const int kSeparatorSize = 2;
-
-Separator::Separator() {
- SetFocusable(false);
-}
-
-Separator::~Separator() {
-}
-
-HWND Separator::CreateNativeControl(HWND parent_container) {
- SetFixedHeight(kSeparatorSize, CENTER);
-
- return ::CreateWindowEx(GetAdditionalExStyle(), L"STATIC", L"",
- WS_CHILD | SS_ETCHEDHORZ | SS_SUNKEN,
- 0, 0, width(), height(),
- parent_container, NULL, NULL, NULL);
-}
-
-LRESULT Separator::OnNotify(int w_param, LPNMHDR l_param) {
- return 0;
-}
-
-gfx::Size Separator::GetPreferredSize() {
- return gfx::Size(width(), fixed_height_);
-}
-
-} // namespace views
diff --git a/chrome/views/controls/separator.h b/chrome/views/controls/separator.h
deleted file mode 100644
index 0455044..0000000
--- a/chrome/views/controls/separator.h
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_CONTROLS_SEPARATOR_H_
-#define CHROME_VIEWS_CONTROLS_SEPARATOR_H_
-
-#include "chrome/views/controls/native_control.h"
-
-namespace views {
-
-// The Separator class is a view that shows a line used to visually separate
-// other views. The current implementation is only horizontal.
-
-class Separator : public NativeControl {
- public:
- Separator();
- virtual ~Separator();
-
- // NativeControl overrides:
- virtual HWND CreateNativeControl(HWND parent_container);
- virtual LRESULT OnNotify(int w_param, LPNMHDR l_param);
-
- // View overrides:
- virtual gfx::Size GetPreferredSize();
-
- private:
-
- DISALLOW_EVIL_CONSTRUCTORS(Separator);
-};
-
-} // namespace views
-
-#endif // #define CHROME_VIEWS_CONTROLS_SEPARATOR_H_
diff --git a/chrome/views/controls/single_split_view.cc b/chrome/views/controls/single_split_view.cc
deleted file mode 100644
index a16a767..0000000
--- a/chrome/views/controls/single_split_view.cc
+++ /dev/null
@@ -1,116 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/controls/single_split_view.h"
-
-#include "app/gfx/chrome_canvas.h"
-#include "chrome/views/background.h"
-#include "skia/ext/skia_utils_win.h"
-
-namespace views {
-
-// Size of the divider in pixels.
-static const int kDividerSize = 4;
-
-SingleSplitView::SingleSplitView(View* leading, View* trailing)
- : divider_x_(-1) {
- AddChildView(leading);
- AddChildView(trailing);
- set_background(
- views::Background::CreateSolidBackground(
- skia::COLORREFToSkColor(GetSysColor(COLOR_3DFACE))));
-}
-
-void SingleSplitView::Layout() {
- if (GetChildViewCount() != 2)
- return;
-
- View* leading = GetChildViewAt(0);
- View* trailing = GetChildViewAt(1);
- if (divider_x_ < 0)
- divider_x_ = (width() - kDividerSize) / 2;
- else
- divider_x_ = std::min(divider_x_, width() - kDividerSize);
- leading->SetBounds(0, 0, divider_x_, height());
- trailing->SetBounds(divider_x_ + kDividerSize, 0,
- width() - divider_x_ - kDividerSize, height());
-
- SchedulePaint();
-
- // Invoke super's implementation so that the children are layed out.
- View::Layout();
-}
-
-gfx::Size SingleSplitView::GetPreferredSize() {
- int width = 0;
- int height = 0;
- for (int i = 0; i < 2 && i < GetChildViewCount(); ++i) {
- View* view = GetChildViewAt(i);
- gfx::Size pref = view->GetPreferredSize();
- width += pref.width();
- height = std::max(height, pref.height());
- }
- width += kDividerSize;
- return gfx::Size(width, height);
-}
-
-HCURSOR SingleSplitView::GetCursorForPoint(Event::EventType event_type,
- int x,
- int y) {
- if (IsPointInDivider(x)) {
- static HCURSOR resize_cursor = LoadCursor(NULL, IDC_SIZEWE);
- return resize_cursor;
- }
- return NULL;
-}
-
-bool SingleSplitView::OnMousePressed(const MouseEvent& event) {
- if (!IsPointInDivider(event.x()))
- return false;
- drag_info_.initial_mouse_x = event.x();
- drag_info_.initial_divider_x = divider_x_;
- return true;
-}
-
-bool SingleSplitView::OnMouseDragged(const MouseEvent& event) {
- if (GetChildViewCount() < 2)
- return false;
-
- int delta_x = event.x() - drag_info_.initial_mouse_x;
- if (UILayoutIsRightToLeft())
- delta_x *= -1;
- // Honor the minimum size when resizing.
- int new_width = std::max(GetChildViewAt(0)->GetMinimumSize().width(),
- drag_info_.initial_divider_x + delta_x);
-
- // And don't let the view get bigger than our width.
- new_width = std::min(width() - kDividerSize, new_width);
-
- if (new_width != divider_x_) {
- set_divider_x(new_width);
- Layout();
- }
- return true;
-}
-
-void SingleSplitView::OnMouseReleased(const MouseEvent& event, bool canceled) {
- if (GetChildViewCount() < 2)
- return;
-
- if (canceled && drag_info_.initial_divider_x != divider_x_) {
- set_divider_x(drag_info_.initial_divider_x);
- Layout();
- }
-}
-
-bool SingleSplitView::IsPointInDivider(int x) {
- if (GetChildViewCount() < 2)
- return false;
-
- int divider_relative_x =
- x - GetChildViewAt(UILayoutIsRightToLeft() ? 1 : 0)->width();
- return (divider_relative_x >= 0 && divider_relative_x < kDividerSize);
-}
-
-} // namespace views
diff --git a/chrome/views/controls/single_split_view.h b/chrome/views/controls/single_split_view.h
deleted file mode 100644
index 3826769..0000000
--- a/chrome/views/controls/single_split_view.h
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_CONTROLS_SINGLE_SPLIT_VIEW_H_
-#define CHROME_VIEWS_CONTROLS_SINGLE_SPLIT_VIEW_H_
-
-#include "chrome/views/view.h"
-
-namespace views {
-
-// SingleSplitView lays out two views horizontally. A splitter exists between
-// the two views that the user can drag around to resize the views.
-class SingleSplitView : public views::View {
- public:
- SingleSplitView(View* leading, View* trailing);
-
- virtual void Layout();
-
- // SingleSplitView's preferred size is the sum of the preferred widths
- // and the max of the heights.
- virtual gfx::Size GetPreferredSize();
-
- // Overriden to return a resize cursor when over the divider.
- virtual HCURSOR GetCursorForPoint(Event::EventType event_type, int x, int y);
-
- void set_divider_x(int divider_x) { divider_x_ = divider_x; }
- int divider_x() { return divider_x_; }
-
- protected:
- virtual bool OnMousePressed(const MouseEvent& event);
- virtual bool OnMouseDragged(const MouseEvent& event);
- virtual void OnMouseReleased(const MouseEvent& event, bool canceled);
-
- private:
- // Returns true if |x| is over the divider.
- bool IsPointInDivider(int x);
-
- // Used to track drag info.
- struct DragInfo {
- // The initial coordinate of the mouse when the user started the drag.
- int initial_mouse_x;
- // The initial position of the divider when the user started the drag.
- int initial_divider_x;
- };
-
- DragInfo drag_info_;
-
- // Position of the divider.
- int divider_x_;
-
- DISALLOW_COPY_AND_ASSIGN(SingleSplitView);
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_CONTROLS_SINGLE_SPLIT_VIEW_H_
diff --git a/chrome/views/controls/tabbed_pane.cc b/chrome/views/controls/tabbed_pane.cc
deleted file mode 100644
index 487c0b5..0000000
--- a/chrome/views/controls/tabbed_pane.cc
+++ /dev/null
@@ -1,264 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/controls/tabbed_pane.h"
-
-#include <vssym32.h>
-
-#include "app/gfx/chrome_canvas.h"
-#include "app/gfx/chrome_font.h"
-#include "app/l10n_util_win.h"
-#include "app/resource_bundle.h"
-#include "base/gfx/native_theme.h"
-#include "base/logging.h"
-#include "base/stl_util-inl.h"
-#include "chrome/views/background.h"
-#include "chrome/views/fill_layout.h"
-#include "chrome/views/widget/root_view.h"
-#include "chrome/views/widget/widget_win.h"
-#include "skia/ext/skia_utils_win.h"
-#include "skia/include/SkColor.h"
-
-namespace views {
-
-// A background object that paints the tab panel background which may be
-// rendered by the system visual styles system.
-class TabBackground : public Background {
- public:
- explicit TabBackground() {
- // TMT_FILLCOLORHINT returns a color value that supposedly
- // approximates the texture drawn by PaintTabPanelBackground.
- SkColor tab_page_color =
- gfx::NativeTheme::instance()->GetThemeColorWithDefault(
- gfx::NativeTheme::TAB, TABP_BODY, 0, TMT_FILLCOLORHINT,
- COLOR_3DFACE);
- SetNativeControlColor(tab_page_color);
- }
- virtual ~TabBackground() {}
-
- virtual void Paint(ChromeCanvas* canvas, View* view) const {
- HDC dc = canvas->beginPlatformPaint();
- RECT r = {0, 0, view->width(), view->height()};
- gfx::NativeTheme::instance()->PaintTabPanelBackground(dc, &r);
- canvas->endPlatformPaint();
- }
-
- private:
- DISALLOW_EVIL_CONSTRUCTORS(TabBackground);
-};
-
-TabbedPane::TabbedPane() : content_window_(NULL), listener_(NULL) {
-}
-
-TabbedPane::~TabbedPane() {
- // We own the tab views, let's delete them.
- STLDeleteContainerPointers(tab_views_.begin(), tab_views_.end());
-}
-
-void TabbedPane::SetListener(Listener* listener) {
- listener_ = listener;
-}
-
-void TabbedPane::AddTab(const std::wstring& title, View* contents) {
- AddTabAtIndex(static_cast<int>(tab_views_.size()), title, contents, true);
-}
-
-void TabbedPane::AddTabAtIndex(int index,
- const std::wstring& title,
- View* contents,
- bool select_if_first_tab) {
- DCHECK(index <= static_cast<int>(tab_views_.size()));
- contents->SetParentOwned(false);
- tab_views_.insert(tab_views_.begin() + index, contents);
-
- TCITEM tcitem;
- tcitem.mask = TCIF_TEXT;
-
- // If the locale is RTL, we set the TCIF_RTLREADING so that BiDi text is
- // rendered properly on the tabs.
- if (UILayoutIsRightToLeft()) {
- tcitem.mask |= TCIF_RTLREADING;
- }
-
- tcitem.pszText = const_cast<wchar_t*>(title.c_str());
- int result = TabCtrl_InsertItem(tab_control_, index, &tcitem);
- DCHECK(result != -1);
-
- if (!contents->background()) {
- contents->set_background(new TabBackground);
- }
-
- if (tab_views_.size() == 1 && select_if_first_tab) {
- // If this is the only tab displayed, make sure the contents is set.
- content_window_->GetRootView()->AddChildView(contents);
- }
-
- // The newly added tab may have made the contents window smaller.
- ResizeContents(tab_control_);
-}
-
-View* TabbedPane::RemoveTabAtIndex(int index) {
- int tab_count = static_cast<int>(tab_views_.size());
- DCHECK(index >= 0 && index < tab_count);
-
- if (index < (tab_count - 1)) {
- // Select the next tab.
- SelectTabAt(index + 1);
- } else {
- // We are the last tab, select the previous one.
- if (index > 0) {
- SelectTabAt(index - 1);
- } else {
- // That was the last tab. Remove the contents.
- content_window_->GetRootView()->RemoveAllChildViews(false);
- }
- }
- TabCtrl_DeleteItem(tab_control_, index);
-
- // The removed tab may have made the contents window bigger.
- ResizeContents(tab_control_);
-
- std::vector<View*>::iterator iter = tab_views_.begin() + index;
- View* removed_tab = *iter;
- tab_views_.erase(iter);
-
- return removed_tab;
-}
-
-void TabbedPane::SelectTabAt(int index) {
- DCHECK((index >= 0) && (index < static_cast<int>(tab_views_.size())));
- TabCtrl_SetCurSel(tab_control_, index);
- DoSelectTabAt(index);
-}
-
-void TabbedPane::SelectTabForContents(const View* contents) {
- SelectTabAt(GetIndexForContents(contents));
-}
-
-int TabbedPane::GetTabCount() {
- return TabCtrl_GetItemCount(tab_control_);
-}
-
-HWND TabbedPane::CreateNativeControl(HWND parent_container) {
- // Create the tab control.
- //
- // Note that we don't follow the common convention for NativeControl
- // subclasses and we don't pass the value returned from
- // NativeControl::GetAdditionalExStyle() as the dwExStyle parameter. Here is
- // why: on RTL locales, if we pass NativeControl::GetAdditionalExStyle() when
- // we basically tell Windows to create our HWND with the WS_EX_LAYOUTRTL. If
- // we do that, then the HWND we create for |content_window_| below will
- // inherit the WS_EX_LAYOUTRTL property and this will result in the contents
- // being flipped, which is not what we want (because we handle mirroring in
- // views without the use of Windows' support for mirroring). Therefore,
- // we initially create our HWND without the aforementioned property and we
- // explicitly set this property our child is created. This way, on RTL
- // locales, our tabs will be nicely rendered from right to left (by virtue of
- // Windows doing the right thing with the TabbedPane HWND) and each tab
- // contents will use an RTL layout correctly (by virtue of the mirroring
- // infrastructure in views doing the right thing with each View we put
- // in the tab).
- tab_control_ = ::CreateWindowEx(0,
- WC_TABCONTROL,
- L"",
- WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE,
- 0, 0, width(), height(),
- parent_container, NULL, NULL, NULL);
-
- HFONT font = ResourceBundle::GetSharedInstance().
- GetFont(ResourceBundle::BaseFont).hfont();
- SendMessage(tab_control_, WM_SETFONT, reinterpret_cast<WPARAM>(font), FALSE);
-
- // Create the view container which is a child of the TabControl.
- content_window_ = new WidgetWin();
- content_window_->Init(tab_control_, gfx::Rect(), false);
-
- // Explicitly setting the WS_EX_LAYOUTRTL property for the HWND (see above
- // for a thorough explanation regarding why we waited until |content_window_|
- // if created before we set this property for the tabbed pane's HWND).
- if (UILayoutIsRightToLeft()) {
- l10n_util::HWNDSetRTLLayout(tab_control_);
- }
-
- RootView* root_view = content_window_->GetRootView();
- root_view->SetLayoutManager(new FillLayout());
- DWORD sys_color = ::GetSysColor(COLOR_3DHILIGHT);
- SkColor color = SkColorSetRGB(GetRValue(sys_color), GetGValue(sys_color),
- GetBValue(sys_color));
- root_view->set_background(Background::CreateSolidBackground(color));
-
- content_window_->SetFocusTraversableParentView(this);
- ResizeContents(tab_control_);
- return tab_control_;
-}
-
-LRESULT TabbedPane::OnNotify(int w_param, LPNMHDR l_param) {
- if (static_cast<LPNMHDR>(l_param)->code == TCN_SELCHANGE) {
- int selected_tab = TabCtrl_GetCurSel(tab_control_);
- DCHECK(selected_tab != -1);
- DoSelectTabAt(selected_tab);
- return TRUE;
- }
- return FALSE;
-}
-
-void TabbedPane::DoSelectTabAt(int index) {
- RootView* content_root = content_window_->GetRootView();
-
- // Clear the focus if the focused view was on the tab.
- FocusManager* focus_manager = GetFocusManager();
- DCHECK(focus_manager);
- View* focused_view = focus_manager->GetFocusedView();
- if (focused_view && content_root->IsParentOf(focused_view))
- focus_manager->ClearFocus();
-
- content_root->RemoveAllChildViews(false);
- content_root->AddChildView(tab_views_[index]);
- content_root->Layout();
- if (listener_)
- listener_->TabSelectedAt(index);
-}
-
-int TabbedPane::GetIndexForContents(const View* contents) const {
- std::vector<View*>::const_iterator i =
- std::find(tab_views_.begin(), tab_views_.end(), contents);
- DCHECK(i != tab_views_.end());
- return static_cast<int>(i - tab_views_.begin());
-}
-
-void TabbedPane::Layout() {
- NativeControl::Layout();
- ResizeContents(GetNativeControlHWND());
-}
-
-RootView* TabbedPane::GetContentsRootView() {
- return content_window_->GetRootView();
-}
-
-FocusTraversable* TabbedPane::GetFocusTraversable() {
- return content_window_;
-}
-
-void TabbedPane::ViewHierarchyChanged(bool is_add, View *parent, View *child) {
- NativeControl::ViewHierarchyChanged(is_add, parent, child);
-
- if (is_add && (child == this) && content_window_) {
- // We have been added to a view hierarchy, update the FocusTraversable
- // parent.
- content_window_->SetFocusTraversableParent(GetRootView());
- }
-}
-
-void TabbedPane::ResizeContents(HWND tab_control) {
- DCHECK(tab_control);
- CRect content_bounds;
- if (!GetClientRect(tab_control, &content_bounds))
- return;
- TabCtrl_AdjustRect(tab_control, FALSE, &content_bounds);
- content_window_->MoveWindow(content_bounds.left, content_bounds.top,
- content_bounds.Width(), content_bounds.Height(),
- TRUE);
-}
-
-} // namespace views
diff --git a/chrome/views/controls/tabbed_pane.h b/chrome/views/controls/tabbed_pane.h
deleted file mode 100644
index 8b51ba6..0000000
--- a/chrome/views/controls/tabbed_pane.h
+++ /dev/null
@@ -1,94 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_CONTROLS_TABBED_PANE_H_
-#define CHROME_VIEWS_CONTROLS_TABBED_PANE_H_
-
-#include "chrome/views/controls/native_control.h"
-
-namespace views {
-
-// The TabbedPane class is a view that shows tabs. When the user clicks on a
-// tab, the associated view is displayed.
-// TODO (jcampan): implement GetPreferredSize().
-class WidgetWin;
-
-class TabbedPane : public NativeControl {
- public:
- TabbedPane();
- virtual ~TabbedPane();
-
- // An interface an object can implement to be notified about events within
- // the TabbedPane.
- class Listener {
- public:
- // Called when the tab at the specified |index| is selected by the user.
- virtual void TabSelectedAt(int index) = 0;
- };
- void SetListener(Listener* listener);
-
- // Adds a new tab at the end of this TabbedPane with the specified |title|.
- // |contents| is the view displayed when the tab is selected and is owned by
- // the TabbedPane.
- void AddTab(const std::wstring& title, View* contents);
-
- // Adds a new tab at the specified |index| with the specified |title|.
- // |contents| is the view displayed when the tab is selected and is owned by
- // the TabbedPane. If |select_if_first_tab| is true and the tabbed pane is
- // currently empty, the new tab is selected. If you pass in false for
- // |select_if_first_tab| you need to explicitly invoke SelectTabAt, otherwise
- // the tabbed pane will not have a valid selection.
- void AddTabAtIndex(int index,
- const std::wstring& title,
- View* contents,
- bool select_if_first_tab);
-
- // Removes the tab at the specified |index| and returns the associated content
- // view. The caller becomes the owner of the returned view.
- View* RemoveTabAtIndex(int index);
-
- // Selects the tab at the specified |index|, which must be valid.
- void SelectTabAt(int index);
-
- // Selects the tab containing the specified |contents|, which must be valid.
- void SelectTabForContents(const View* contents);
-
- // Returns the number of tabs.
- int GetTabCount();
-
- virtual HWND CreateNativeControl(HWND parent_container);
- virtual LRESULT OnNotify(int w_param, LPNMHDR l_param);
-
- virtual void Layout();
-
- virtual RootView* GetContentsRootView();
- virtual FocusTraversable* GetFocusTraversable();
- virtual void ViewHierarchyChanged(bool is_add, View *parent, View *child);
-
- private:
- // Changes the contents view to the view associated with the tab at |index|.
- void DoSelectTabAt(int index);
-
- // Returns the index of the tab containing the specified |contents|.
- int GetIndexForContents(const View* contents) const;
-
- void ResizeContents(HWND tab_control);
-
- HWND tab_control_;
-
- // The views associated with the different tabs.
- std::vector<View*> tab_views_;
-
- // The window displayed in the tab.
- WidgetWin* content_window_;
-
- // The listener we notify about tab selection changes.
- Listener* listener_;
-
- DISALLOW_EVIL_CONSTRUCTORS(TabbedPane);
-};
-
-} // namespace views
-
-#endif // #define CHROME_VIEWS_CONTROLS_TABBED_PANE_H_
diff --git a/chrome/views/controls/table/group_table_view.cc b/chrome/views/controls/table/group_table_view.cc
deleted file mode 100644
index 5c87736..0000000
--- a/chrome/views/controls/table/group_table_view.cc
+++ /dev/null
@@ -1,193 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/controls/table/group_table_view.h"
-
-#include "app/gfx/chrome_canvas.h"
-#include "base/message_loop.h"
-#include "base/task.h"
-
-namespace views {
-
-static const COLORREF kSeparatorLineColor = RGB(208, 208, 208);
-static const int kSeparatorLineThickness = 1;
-
-const char GroupTableView::kViewClassName[] = "chrome/views/GroupTableView";
-
-GroupTableView::GroupTableView(GroupTableModel* model,
- const std::vector<TableColumn>& columns,
- TableTypes table_type,
- bool single_selection,
- bool resizable_columns,
- bool autosize_columns)
- : TableView(model, columns, table_type, false, resizable_columns,
- autosize_columns),
- model_(model),
- sync_selection_factory_(this) {
-}
-
-GroupTableView::~GroupTableView() {
-}
-
-void GroupTableView::SyncSelection() {
- int index = 0;
- int row_count = model_->RowCount();
- GroupRange group_range;
- while (index < row_count) {
- model_->GetGroupRangeForItem(index, &group_range);
- if (group_range.length == 1) {
- // No synching required for single items.
- index++;
- } else {
- // We need to select the group if at least one item is selected.
- bool should_select = false;
- for (int i = group_range.start;
- i < group_range.start + group_range.length; ++i) {
- if (IsItemSelected(i)) {
- should_select = true;
- break;
- }
- }
- if (should_select) {
- for (int i = group_range.start;
- i < group_range.start + group_range.length; ++i) {
- SetSelectedState(i, true);
- }
- }
- index += group_range.length;
- }
- }
-}
-
-void GroupTableView::OnKeyDown(unsigned short virtual_keycode) {
- // In a list view, multiple items can be selected but only one item has the
- // focus. This creates a problem when the arrow keys are used for navigating
- // between items in the list view. An example will make this more clear:
- //
- // Suppose we have 5 items in the list view, and three of these items are
- // part of one group:
- //
- // Index0: ItemA (No Group)
- // Index1: ItemB (GroupX)
- // Index2: ItemC (GroupX)
- // Index3: ItemD (GroupX)
- // Index4: ItemE (No Group)
- //
- // When GroupX is selected (say, by clicking on ItemD with the mouse),
- // GroupTableView::SyncSelection() will make sure ItemB, ItemC and ItemD are
- // selected. Also, the item with the focus will be ItemD (simply because
- // this is the item the user happened to click on). If then the UP arrow is
- // pressed once, the focus will be switched to ItemC and not to ItemA and the
- // end result is that we are stuck in GroupX even though the intention was to
- // switch to ItemA.
- //
- // For that exact reason, we need to set the focus appropriately when we
- // detect that one of the arrow keys is pressed. Thus, when it comes time
- // for the list view control to actually switch the focus, the right item
- // will be selected.
- if ((virtual_keycode != VK_UP) && (virtual_keycode != VK_DOWN)) {
- TableView::OnKeyDown(virtual_keycode);
- return;
- }
-
- // We start by finding the index of the item with the focus. If no item
- // currently has the focus, then this routine doesn't do anything.
- int focused_index;
- int row_count = model_->RowCount();
- for (focused_index = 0; focused_index < row_count; focused_index++) {
- if (ItemHasTheFocus(focused_index)) {
- break;
- }
- }
-
- if (focused_index == row_count) {
- return;
- }
- DCHECK_LT(focused_index, row_count);
-
- // Nothing to do if the item which has the focus is not part of a group.
- GroupRange group_range;
- model_->GetGroupRangeForItem(focused_index, &group_range);
- if (group_range.length == 1) {
- return;
- }
-
- // If the user pressed the UP key, then the focus should be set to the
- // topmost element in the group. If the user pressed the DOWN key, the focus
- // should be set to the bottommost element.
- if (virtual_keycode == VK_UP) {
- SetFocusOnItem(group_range.start);
- } else {
- DCHECK_EQ(virtual_keycode, VK_DOWN);
- SetFocusOnItem(group_range.start + group_range.length - 1);
- }
-}
-
-void GroupTableView::PrepareForSort() {
- GroupRange range;
- int row_count = RowCount();
- model_index_to_range_start_map_.clear();
- for (int model_row = 0; model_row < row_count;) {
- model_->GetGroupRangeForItem(model_row, &range);
- for (int range_counter = 0; range_counter < range.length; range_counter++)
- model_index_to_range_start_map_[range_counter + model_row] = model_row;
- model_row += range.length;
- }
-}
-
-int GroupTableView::CompareRows(int model_row1, int model_row2) {
- int range1 = model_index_to_range_start_map_[model_row1];
- int range2 = model_index_to_range_start_map_[model_row2];
- if (range1 == range2) {
- // The two rows are in the same group, sort so that items in the same group
- // always appear in the same order.
- return model_row1 - model_row2;
- }
- // Sort by the first entry of each of the groups.
- return TableView::CompareRows(range1, range2);
-}
-
-void GroupTableView::OnSelectedStateChanged() {
- // The goal is to make sure all items for a same group are in a consistent
- // state in term of selection. When a user clicks an item, several selection
- // messages are sent, possibly including unselecting all currently selected
- // items. For that reason, we post a task to be performed later, after all
- // selection messages have been processed. In the meantime we just ignore all
- // selection notifications.
- if (sync_selection_factory_.empty()) {
- MessageLoop::current()->PostTask(FROM_HERE,
- sync_selection_factory_.NewRunnableMethod(
- &GroupTableView::SyncSelection));
- }
- TableView::OnSelectedStateChanged();
-}
-
-// Draws the line separator betweens the groups.
-void GroupTableView::PostPaint(int model_row, int column, bool selected,
- const CRect& bounds, HDC hdc) {
- GroupRange group_range;
- model_->GetGroupRangeForItem(model_row, &group_range);
-
- // We always paint a vertical line at the end of the last cell.
- HPEN hPen = CreatePen(PS_SOLID, kSeparatorLineThickness, kSeparatorLineColor);
- HPEN hPenOld = (HPEN) SelectObject(hdc, hPen);
- int x = static_cast<int>(bounds.right - kSeparatorLineThickness);
- MoveToEx(hdc, x, bounds.top, NULL);
- LineTo(hdc, x, bounds.bottom);
-
- // We paint a separator line after the last item of a group.
- if (model_row == (group_range.start + group_range.length - 1)) {
- int y = static_cast<int>(bounds.bottom - kSeparatorLineThickness);
- MoveToEx(hdc, 0, y, NULL);
- LineTo(hdc, bounds.Width(), y);
- }
- SelectObject(hdc, hPenOld);
- DeleteObject(hPen);
-}
-
-std::string GroupTableView::GetClassName() const {
- return kViewClassName;
-}
-
-} // namespace views
diff --git a/chrome/views/controls/table/group_table_view.h b/chrome/views/controls/table/group_table_view.h
deleted file mode 100644
index 0edd01a..0000000
--- a/chrome/views/controls/table/group_table_view.h
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_CONTROLS_TABLE_GROUP_TABLE_VIEW_H_
-#define CHROME_VIEWS_CONTROLS_TABLE_GROUP_TABLE_VIEW_H_
-
-#include "base/task.h"
-#include "chrome/views/controls/table/table_view.h"
-
-// The GroupTableView adds grouping to the TableView class.
-// It allows to have groups of rows that act as a single row from the selection
-// perspective. Groups are visually separated by a horizontal line.
-
-namespace views {
-
-struct GroupRange {
- int start;
- int length;
-};
-
-// The model driving the GroupTableView.
-class GroupTableModel : public TableModel {
- public:
- // Populates the passed range with the first row/last row (included)
- // that this item belongs to.
- virtual void GetGroupRangeForItem(int item, GroupRange* range) = 0;
-};
-
-class GroupTableView : public TableView {
- public:
- // The view class name.
- static const char kViewClassName[];
-
- GroupTableView(GroupTableModel* model,
- const std::vector<TableColumn>& columns,
- TableTypes table_type, bool single_selection,
- bool resizable_columns, bool autosize_columns);
- virtual ~GroupTableView();
-
- virtual std::string GetClassName() const;
-
- protected:
- // Notification from the ListView that the selected state of an item has
- // changed.
- void OnSelectedStateChanged();
-
- // Extra-painting required to draw the separator line between groups.
- virtual bool ImplementPostPaint() { return true; }
- virtual void PostPaint(int model_row, int column, bool selected,
- const CRect& bounds, HDC device_context);
-
- // In order to make keyboard navigation possible (using the Up and Down
- // keys), we must take action when an arrow key is pressed. The reason we
- // need to process this message has to do with the manner in which the focus
- // needs to be set on a group item when a group is selected.
- virtual void OnKeyDown(unsigned short virtual_keycode);
-
- // Overriden to make sure rows in the same group stay grouped together.
- virtual int CompareRows(int model_row1, int model_row2);
-
- // Updates model_index_to_range_start_map_ from the model.
- virtual void PrepareForSort();
-
- private:
- // Make the selection of group consistent.
- void SyncSelection();
-
- GroupTableModel* model_;
-
- // A factory to make the selection consistent among groups.
- ScopedRunnableMethodFactory<GroupTableView> sync_selection_factory_;
-
- // Maps from model row to start of group.
- std::map<int,int> model_index_to_range_start_map_;
-
- DISALLOW_COPY_AND_ASSIGN(GroupTableView);
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_CONTROLS_TABLE_GROUP_TABLE_VIEW_H_
diff --git a/chrome/views/controls/table/table_view.cc b/chrome/views/controls/table/table_view.cc
deleted file mode 100644
index 827af95..0000000
--- a/chrome/views/controls/table/table_view.cc
+++ /dev/null
@@ -1,1570 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/controls/table/table_view.h"
-
-#include <algorithm>
-#include <windowsx.h>
-
-#include "app/gfx/chrome_canvas.h"
-#include "app/gfx/favicon_size.h"
-#include "app/gfx/icon_util.h"
-#include "app/l10n_util_win.h"
-#include "app/resource_bundle.h"
-#include "base/string_util.h"
-#include "base/win_util.h"
-#include "chrome/views/controls/hwnd_view.h"
-#include "SkBitmap.h"
-#include "SkColorFilter.h"
-#include "skia/ext/skia_utils_win.h"
-
-namespace views {
-
-// Added to column width to prevent truncation.
-const int kListViewTextPadding = 15;
-// Additional column width necessary if column has icons.
-const int kListViewIconWidthAndPadding = 18;
-
-// TableModel -----------------------------------------------------------------
-
-// static
-const int TableView::kImageSize = 18;
-
-// Used for sorting.
-static Collator* collator = NULL;
-
-SkBitmap TableModel::GetIcon(int row) {
- return SkBitmap();
-}
-
-int TableModel::CompareValues(int row1, int row2, int column_id) {
- DCHECK(row1 >= 0 && row1 < RowCount() &&
- row2 >= 0 && row2 < RowCount());
- std::wstring value1 = GetText(row1, column_id);
- std::wstring value2 = GetText(row2, column_id);
- Collator* collator = GetCollator();
-
- if (collator) {
- UErrorCode compare_status = U_ZERO_ERROR;
- UCollationResult compare_result = collator->compare(
- static_cast<const UChar*>(value1.c_str()),
- static_cast<int>(value1.length()),
- static_cast<const UChar*>(value2.c_str()),
- static_cast<int>(value2.length()),
- compare_status);
- DCHECK(U_SUCCESS(compare_status));
- return compare_result;
- }
- NOTREACHED();
- return 0;
-}
-
-Collator* TableModel::GetCollator() {
- if (!collator) {
- UErrorCode create_status = U_ZERO_ERROR;
- collator = Collator::createInstance(create_status);
- if (!U_SUCCESS(create_status)) {
- collator = NULL;
- NOTREACHED();
- }
- }
- return collator;
-}
-
-// TableView ------------------------------------------------------------------
-
-TableView::TableView(TableModel* model,
- const std::vector<TableColumn>& columns,
- TableTypes table_type,
- bool single_selection,
- bool resizable_columns,
- bool autosize_columns)
- : model_(model),
- table_view_observer_(NULL),
- visible_columns_(),
- all_columns_(),
- column_count_(static_cast<int>(columns.size())),
- table_type_(table_type),
- single_selection_(single_selection),
- ignore_listview_change_(false),
- custom_colors_enabled_(false),
- sized_columns_(false),
- autosize_columns_(autosize_columns),
- resizable_columns_(resizable_columns),
- list_view_(NULL),
- header_original_handler_(NULL),
- original_handler_(NULL),
- table_view_wrapper_(this),
- custom_cell_font_(NULL),
- content_offset_(0) {
- for (std::vector<TableColumn>::const_iterator i = columns.begin();
- i != columns.end(); ++i) {
- AddColumn(*i);
- visible_columns_.push_back(i->id);
- }
-}
-
-TableView::~TableView() {
- if (list_view_) {
- if (model_)
- model_->SetObserver(NULL);
- }
- if (custom_cell_font_)
- DeleteObject(custom_cell_font_);
-}
-
-void TableView::SetModel(TableModel* model) {
- if (model == model_)
- return;
-
- if (list_view_ && model_)
- model_->SetObserver(NULL);
- model_ = model;
- if (list_view_ && model_)
- model_->SetObserver(this);
- if (list_view_)
- OnModelChanged();
-}
-
-void TableView::SetSortDescriptors(const SortDescriptors& sort_descriptors) {
- if (!sort_descriptors_.empty()) {
- ResetColumnSortImage(sort_descriptors_[0].column_id,
- NO_SORT);
- }
- sort_descriptors_ = sort_descriptors;
- if (!sort_descriptors_.empty()) {
- ResetColumnSortImage(
- sort_descriptors_[0].column_id,
- sort_descriptors_[0].ascending ? ASCENDING_SORT : DESCENDING_SORT);
- }
- if (!list_view_)
- return;
-
- // For some reason we have to turn off/on redraw, otherwise the display
- // isn't updated when done.
- SendMessage(list_view_, WM_SETREDRAW, static_cast<WPARAM>(FALSE), 0);
-
- UpdateItemsLParams(0, 0);
-
- SortItemsAndUpdateMapping();
-
- SendMessage(list_view_, WM_SETREDRAW, static_cast<WPARAM>(TRUE), 0);
-}
-
-void TableView::DidChangeBounds(const gfx::Rect& previous,
- const gfx::Rect& current) {
- if (!list_view_)
- return;
- SendMessage(list_view_, WM_SETREDRAW, static_cast<WPARAM>(FALSE), 0);
- Layout();
- if ((!sized_columns_ || autosize_columns_) && width() > 0) {
- sized_columns_ = true;
- ResetColumnSizes();
- }
- UpdateContentOffset();
- SendMessage(list_view_, WM_SETREDRAW, static_cast<WPARAM>(TRUE), 0);
-}
-
-int TableView::RowCount() {
- if (!list_view_)
- return 0;
- return ListView_GetItemCount(list_view_);
-}
-
-int TableView::SelectedRowCount() {
- if (!list_view_)
- return 0;
- return ListView_GetSelectedCount(list_view_);
-}
-
-void TableView::Select(int model_row) {
- if (!list_view_)
- return;
-
- DCHECK(model_row >= 0 && model_row < RowCount());
- SendMessage(list_view_, WM_SETREDRAW, static_cast<WPARAM>(FALSE), 0);
- ignore_listview_change_ = true;
-
- // Unselect everything.
- ListView_SetItemState(list_view_, -1, 0, LVIS_SELECTED);
-
- // Select the specified item.
- int view_row = model_to_view(model_row);
- ListView_SetItemState(list_view_, view_row, LVIS_SELECTED | LVIS_FOCUSED,
- LVIS_SELECTED | LVIS_FOCUSED);
-
- // Make it visible.
- ListView_EnsureVisible(list_view_, view_row, FALSE);
- ignore_listview_change_ = false;
- SendMessage(list_view_, WM_SETREDRAW, static_cast<WPARAM>(TRUE), 0);
- if (table_view_observer_)
- table_view_observer_->OnSelectionChanged();
-}
-
-void TableView::SetSelectedState(int model_row, bool state) {
- if (!list_view_)
- return;
-
- DCHECK(model_row >= 0 && model_row < RowCount());
-
- ignore_listview_change_ = true;
-
- // Select the specified item.
- ListView_SetItemState(list_view_, model_to_view(model_row),
- state ? LVIS_SELECTED : 0, LVIS_SELECTED);
-
- ignore_listview_change_ = false;
-}
-
-void TableView::SetFocusOnItem(int model_row) {
- if (!list_view_)
- return;
-
- DCHECK(model_row >= 0 && model_row < RowCount());
-
- ignore_listview_change_ = true;
-
- // Set the focus to the given item.
- ListView_SetItemState(list_view_, model_to_view(model_row), LVIS_FOCUSED,
- LVIS_FOCUSED);
-
- ignore_listview_change_ = false;
-}
-
-int TableView::FirstSelectedRow() {
- if (!list_view_)
- return -1;
-
- int view_row = ListView_GetNextItem(list_view_, -1, LVNI_ALL | LVIS_SELECTED);
- return view_row == -1 ? -1 : view_to_model(view_row);
-}
-
-bool TableView::IsItemSelected(int model_row) {
- if (!list_view_)
- return false;
-
- DCHECK(model_row >= 0 && model_row < RowCount());
- return (ListView_GetItemState(list_view_, model_to_view(model_row),
- LVIS_SELECTED) == LVIS_SELECTED);
-}
-
-bool TableView::ItemHasTheFocus(int model_row) {
- if (!list_view_)
- return false;
-
- DCHECK(model_row >= 0 && model_row < RowCount());
- return (ListView_GetItemState(list_view_, model_to_view(model_row),
- LVIS_FOCUSED) == LVIS_FOCUSED);
-}
-
-TableView::iterator TableView::SelectionBegin() {
- return TableView::iterator(this, LastSelectedViewIndex());
-}
-
-TableView::iterator TableView::SelectionEnd() {
- return TableView::iterator(this, -1);
-}
-
-void TableView::OnItemsChanged(int start, int length) {
- if (!list_view_)
- return;
-
- if (length == -1) {
- DCHECK(start >= 0);
- length = model_->RowCount() - start;
- }
- int row_count = RowCount();
- DCHECK(start >= 0 && length > 0 && start + length <= row_count);
- SendMessage(list_view_, WM_SETREDRAW, static_cast<WPARAM>(FALSE), 0);
- if (table_type_ == ICON_AND_TEXT) {
- // The redraw event does not include the icon in the clip rect, preventing
- // our icon from being repainted. So far the only way I could find around
- // this is to change the image for the item. Even if the image does not
- // exist, it causes the clip rect to include the icon's bounds so we can
- // paint it in the post paint event.
- LVITEM lv_item;
- memset(&lv_item, 0, sizeof(LVITEM));
- lv_item.mask = LVIF_IMAGE;
- for (int i = start; i < start + length; ++i) {
- // Retrieve the current icon index.
- lv_item.iItem = model_to_view(i);
- BOOL r = ListView_GetItem(list_view_, &lv_item);
- DCHECK(r);
- // Set the current icon index to the other image.
- lv_item.iImage = (lv_item.iImage + 1) % 2;
- DCHECK((lv_item.iImage == 0) || (lv_item.iImage == 1));
- r = ListView_SetItem(list_view_, &lv_item);
- DCHECK(r);
- }
- }
- UpdateListViewCache(start, length, false);
- SendMessage(list_view_, WM_SETREDRAW, static_cast<WPARAM>(TRUE), 0);
-}
-
-void TableView::OnModelChanged() {
- if (!list_view_)
- return;
-
- int current_row_count = ListView_GetItemCount(list_view_);
- if (current_row_count > 0)
- OnItemsRemoved(0, current_row_count);
- if (model_ && model_->RowCount())
- OnItemsAdded(0, model_->RowCount());
-}
-
-void TableView::OnItemsAdded(int start, int length) {
- if (!list_view_)
- return;
-
- DCHECK(start >= 0 && length > 0 && start <= RowCount());
- SendMessage(list_view_, WM_SETREDRAW, static_cast<WPARAM>(FALSE), 0);
- UpdateListViewCache(start, length, true);
- SendMessage(list_view_, WM_SETREDRAW, static_cast<WPARAM>(TRUE), 0);
-}
-
-void TableView::OnItemsRemoved(int start, int length) {
- if (!list_view_)
- return;
-
- if (start < 0 || length < 0 || start + length > RowCount()) {
- NOTREACHED();
- return;
- }
-
- SendMessage(list_view_, WM_SETREDRAW, static_cast<WPARAM>(FALSE), 0);
-
- bool had_selection = (SelectedRowCount() > 0);
- int old_row_count = RowCount();
- if (start == 0 && length == RowCount()) {
- // Everything was removed.
- ListView_DeleteAllItems(list_view_);
- view_to_model_.reset(NULL);
- model_to_view_.reset(NULL);
- } else {
- // Only a portion of the data was removed.
- if (is_sorted()) {
- int new_row_count = model_->RowCount();
- std::vector<int> view_items_to_remove;
- view_items_to_remove.reserve(length);
- // Iterate through the elements, updating the view_to_model_ mapping
- // as well as collecting the rows that need to be deleted.
- for (int i = 0, removed_count = 0; i < old_row_count; ++i) {
- int model_index = view_to_model(i);
- if (model_index >= start) {
- if (model_index < start + length) {
- // This item was removed.
- view_items_to_remove.push_back(i);
- model_index = -1;
- } else {
- model_index -= length;
- }
- }
- if (model_index >= 0) {
- view_to_model_[i - static_cast<int>(view_items_to_remove.size())] =
- model_index;
- }
- }
-
- // Update the model_to_view mapping from the updated view_to_model
- // mapping.
- for (int i = 0; i < new_row_count; ++i)
- model_to_view_[view_to_model_[i]] = i;
-
- // And finally delete the items. We do this backwards as the items were
- // added ordered smallest to largest.
- for (int i = length - 1; i >= 0; --i)
- ListView_DeleteItem(list_view_, view_items_to_remove[i]);
- } else {
- for (int i = 0; i < length; ++i)
- ListView_DeleteItem(list_view_, start);
- }
- }
-
- SendMessage(list_view_, WM_SETREDRAW, static_cast<WPARAM>(TRUE), 0);
-
- // If the row count goes to zero and we had a selection LVN_ITEMCHANGED isn't
- // invoked, so we handle it here.
- //
- // When the model is set to NULL all the rows are removed. We don't notify
- // the delegate in this case as setting the model to NULL is usually done as
- // the last step before being deleted and callers shouldn't have to deal with
- // getting a selection change when the model is being reset.
- if (model_ && table_view_observer_ && had_selection && RowCount() == 0)
- table_view_observer_->OnSelectionChanged();
-}
-
-void TableView::AddColumn(const TableColumn& col) {
- DCHECK(all_columns_.count(col.id) == 0);
- all_columns_[col.id] = col;
-}
-
-void TableView::SetColumns(const std::vector<TableColumn>& columns) {
- // Remove the currently visible columns.
- while (!visible_columns_.empty())
- SetColumnVisibility(visible_columns_.front(), false);
-
- all_columns_.clear();
- for (std::vector<TableColumn>::const_iterator i = columns.begin();
- i != columns.end(); ++i) {
- AddColumn(*i);
- }
-
- // Remove any sort descriptors that are no longer valid.
- SortDescriptors sort = sort_descriptors();
- for (SortDescriptors::iterator i = sort.begin(); i != sort.end();) {
- if (all_columns_.count(i->column_id) == 0)
- i = sort.erase(i);
- else
- ++i;
- }
- sort_descriptors_ = sort;
-}
-
-void TableView::OnColumnsChanged() {
- column_count_ = static_cast<int>(visible_columns_.size());
- ResetColumnSizes();
-}
-
-void TableView::SetColumnVisibility(int id, bool is_visible) {
- bool changed = false;
- for (std::vector<int>::iterator i = visible_columns_.begin();
- i != visible_columns_.end(); ++i) {
- if (*i == id) {
- if (is_visible) {
- // It's already visible, bail out early.
- return;
- } else {
- int index = static_cast<int>(i - visible_columns_.begin());
- // This could be called before the native list view has been created
- // (in CreateNativeControl, called when the view is added to a
- // Widget). In that case since the column is not in
- // visible_columns_ it will not be added later on when it is created.
- if (list_view_)
- SendMessage(list_view_, LVM_DELETECOLUMN, index, 0);
- visible_columns_.erase(i);
- changed = true;
- break;
- }
- }
- }
- if (is_visible) {
- visible_columns_.push_back(id);
- TableColumn& column = all_columns_[id];
- InsertColumn(column, column_count_);
- if (column.min_visible_width == 0) {
- // ListView_GetStringWidth must be padded or else truncation will occur.
- column.min_visible_width = ListView_GetStringWidth(list_view_,
- column.title.c_str()) +
- kListViewTextPadding;
- }
- changed = true;
- }
- if (changed)
- OnColumnsChanged();
-}
-
-void TableView::SetVisibleColumns(const std::vector<int>& columns) {
- size_t old_count = visible_columns_.size();
- size_t new_count = columns.size();
- // remove the old columns
- if (list_view_) {
- for (std::vector<int>::reverse_iterator i = visible_columns_.rbegin();
- i != visible_columns_.rend(); ++i) {
- int index = static_cast<int>(i - visible_columns_.rend());
- SendMessage(list_view_, LVM_DELETECOLUMN, index, 0);
- }
- }
- visible_columns_ = columns;
- // Insert the new columns.
- if (list_view_) {
- for (std::vector<int>::iterator i = visible_columns_.begin();
- i != visible_columns_.end(); ++i) {
- int index = static_cast<int>(i - visible_columns_.end());
- InsertColumn(all_columns_[*i], index);
- }
- }
- OnColumnsChanged();
-}
-
-bool TableView::IsColumnVisible(int id) const {
- for (std::vector<int>::const_iterator i = visible_columns_.begin();
- i != visible_columns_.end(); ++i)
- if (*i == id) {
- return true;
- }
- return false;
-}
-
-const TableColumn& TableView::GetColumnAtPosition(int pos) {
- return all_columns_[visible_columns_[pos]];
-}
-
-bool TableView::HasColumn(int id) {
- return all_columns_.count(id) > 0;
-}
-
-gfx::Point TableView::GetKeyboardContextMenuLocation() {
- int first_selected = FirstSelectedRow();
- int y = height() / 2;
- if (first_selected != -1) {
- RECT cell_bounds;
- RECT client_rect;
- if (ListView_GetItemRect(GetNativeControlHWND(), first_selected,
- &cell_bounds, LVIR_BOUNDS) &&
- GetClientRect(GetNativeControlHWND(), &client_rect) &&
- cell_bounds.bottom >= 0 && cell_bounds.bottom < client_rect.bottom) {
- y = cell_bounds.bottom;
- }
- }
- gfx::Point screen_loc(0, y);
- if (UILayoutIsRightToLeft())
- screen_loc.set_x(width());
- ConvertPointToScreen(this, &screen_loc);
- return screen_loc;
-}
-
-void TableView::SetCustomColorsEnabled(bool custom_colors_enabled) {
- custom_colors_enabled_ = custom_colors_enabled;
-}
-
-bool TableView::GetCellColors(int model_row,
- int column,
- ItemColor* foreground,
- ItemColor* background,
- LOGFONT* logfont) {
- return false;
-}
-
-static int GetViewIndexFromMouseEvent(HWND window, LPARAM l_param) {
- int x = GET_X_LPARAM(l_param);
- int y = GET_Y_LPARAM(l_param);
- LVHITTESTINFO hit_info = {0};
- hit_info.pt.x = x;
- hit_info.pt.y = y;
- return ListView_HitTest(window, &hit_info);
-}
-
-// static
-LRESULT CALLBACK TableView::TableWndProc(HWND window,
- UINT message,
- WPARAM w_param,
- LPARAM l_param) {
- TableView* table_view = reinterpret_cast<TableViewWrapper*>(
- GetWindowLongPtr(window, GWLP_USERDATA))->table_view;
-
- // Is the mouse down on the table?
- static bool in_mouse_down = false;
- // Should we select on mouse up?
- static bool select_on_mouse_up = false;
-
- // If the mouse is down, this is the location of the mouse down message.
- static int mouse_down_x, mouse_down_y;
-
- switch (message) {
- case WM_CONTEXTMENU: {
- // This addresses two problems seen with context menus in right to left
- // locales:
- // 1. The mouse coordinates in the l_param were occasionally wrong in
- // weird ways. This is most often seen when right clicking on the
- // list-view twice in a row.
- // 2. Right clicking on the icon would show the scrollbar menu.
- //
- // As a work around this uses the position of the cursor and ignores
- // the position supplied in the l_param.
- if (table_view->UILayoutIsRightToLeft() &&
- (GET_X_LPARAM(l_param) != -1 || GET_Y_LPARAM(l_param) != -1)) {
- CPoint screen_point;
- GetCursorPos(&screen_point);
- CPoint table_point = screen_point;
- CRect client_rect;
- if (ScreenToClient(window, &table_point) &&
- GetClientRect(window, &client_rect) &&
- client_rect.PtInRect(table_point)) {
- // The point is over the client area of the table, handle it ourself.
- // But first select the row if it isn't already selected.
- LVHITTESTINFO hit_info = {0};
- hit_info.pt.x = table_point.x;
- hit_info.pt.y = table_point.y;
- int view_index = ListView_HitTest(window, &hit_info);
- if (view_index != -1) {
- int model_index = table_view->view_to_model(view_index);
- if (!table_view->IsItemSelected(model_index))
- table_view->Select(model_index);
- }
- table_view->OnContextMenu(screen_point);
- return 0; // So that default processing doesn't occur.
- }
- }
- // else case: default handling is fine, so break and let the default
- // handler service the request (which will likely calls us back with
- // OnContextMenu).
- break;
- }
-
- case WM_CANCELMODE: {
- if (in_mouse_down) {
- in_mouse_down = false;
- return 0;
- }
- break;
- }
-
- case WM_ERASEBKGND:
- // We make WM_ERASEBKGND do nothing (returning 1 indicates we handled
- // the request). We do this so that the table view doesn't flicker during
- // resizing.
- return 1;
-
- case WM_PAINT: {
- LRESULT result = CallWindowProc(table_view->original_handler_, window,
- message, w_param, l_param);
- table_view->PostPaint();
- return result;
- }
-
- case WM_KEYDOWN: {
- if (!table_view->single_selection_ && w_param == 'A' &&
- GetKeyState(VK_CONTROL) < 0 && table_view->RowCount() > 0) {
- // Select everything.
- ListView_SetItemState(window, -1, LVIS_SELECTED, LVIS_SELECTED);
- // And make the first row focused.
- ListView_SetItemState(window, 0, LVIS_FOCUSED, LVIS_FOCUSED);
- return 0;
- } else if (w_param == VK_DELETE && table_view->table_view_observer_) {
- table_view->table_view_observer_->OnTableViewDelete(table_view);
- return 0;
- }
- // else case: fall through to default processing.
- break;
- }
-
- case WM_LBUTTONDBLCLK: {
- if (w_param == MK_LBUTTON)
- table_view->OnDoubleClick();
- return 0;
- }
-
- case WM_LBUTTONUP: {
- if (in_mouse_down) {
- in_mouse_down = false;
- ReleaseCapture();
- SetFocus(window);
- if (select_on_mouse_up) {
- int view_index = GetViewIndexFromMouseEvent(window, l_param);
- if (view_index != -1)
- table_view->Select(table_view->view_to_model(view_index));
- }
- return 0;
- }
- break;
- }
-
- case WM_LBUTTONDOWN: {
- // ListView treats clicking on an area outside the text of a column as
- // drag to select. This is confusing when the selection is shown across
- // the whole row. For this reason we override the default handling for
- // mouse down/move/up and treat the whole row as draggable. That is, no
- // matter where you click in the row we'll attempt to start dragging.
- //
- // Only do custom mouse handling if no other mouse buttons are down.
- if ((w_param | (MK_LBUTTON | MK_CONTROL | MK_SHIFT)) ==
- (MK_LBUTTON | MK_CONTROL | MK_SHIFT)) {
- if (in_mouse_down)
- return 0;
-
- int view_index = GetViewIndexFromMouseEvent(window, l_param);
- if (view_index != -1) {
- table_view->ignore_listview_change_ = true;
- in_mouse_down = true;
- select_on_mouse_up = false;
- mouse_down_x = GET_X_LPARAM(l_param);
- mouse_down_y = GET_Y_LPARAM(l_param);
- int model_index = table_view->view_to_model(view_index);
- bool select = true;
- if (w_param & MK_CONTROL) {
- select = false;
- if (!table_view->IsItemSelected(model_index)) {
- if (table_view->single_selection_) {
- // Single selection mode and the row isn't selected, select
- // only it.
- table_view->Select(model_index);
- } else {
- // Not single selection, add this row to the selection.
- table_view->SetSelectedState(model_index, true);
- }
- } else {
- // Remove this row from the selection.
- table_view->SetSelectedState(model_index, false);
- }
- ListView_SetSelectionMark(window, view_index);
- } else if (!table_view->single_selection_ && w_param & MK_SHIFT) {
- int mark_view_index = ListView_GetSelectionMark(window);
- if (mark_view_index != -1) {
- // Unselect everything.
- ListView_SetItemState(window, -1, 0, LVIS_SELECTED);
- select = false;
-
- // Select from mark to mouse down location.
- for (int i = std::min(view_index, mark_view_index),
- max_i = std::max(view_index, mark_view_index); i <= max_i;
- ++i) {
- table_view->SetSelectedState(table_view->view_to_model(i),
- true);
- }
- }
- }
- // Make the row the user clicked on the focused row.
- ListView_SetItemState(window, view_index, LVIS_FOCUSED,
- LVIS_FOCUSED);
- if (select) {
- if (!table_view->IsItemSelected(model_index)) {
- // Clear all.
- ListView_SetItemState(window, -1, 0, LVIS_SELECTED);
- // And select the row the user clicked on.
- table_view->SetSelectedState(model_index, true);
- } else {
- // The item is already selected, don't clear the state right away
- // in case the user drags. Instead wait for mouse up, then only
- // select the row the user clicked on.
- select_on_mouse_up = true;
- }
- ListView_SetSelectionMark(window, view_index);
- }
- table_view->ignore_listview_change_ = false;
- table_view->OnSelectedStateChanged();
- SetCapture(window);
- return 0;
- }
- // else case, continue on to default handler
- }
- break;
- }
-
- case WM_MOUSEMOVE: {
- if (in_mouse_down) {
- int x = GET_X_LPARAM(l_param);
- int y = GET_Y_LPARAM(l_param);
- if (View::ExceededDragThreshold(x - mouse_down_x, y - mouse_down_y)) {
- // We're about to start drag and drop, which results in no mouse up.
- // Release capture and reset state.
- ReleaseCapture();
- in_mouse_down = false;
-
- NMLISTVIEW details;
- memset(&details, 0, sizeof(details));
- details.hdr.code = LVN_BEGINDRAG;
- SendMessage(::GetParent(window), WM_NOTIFY, 0,
- reinterpret_cast<LPARAM>(&details));
- }
- return 0;
- }
- break;
- }
-
- default:
- break;
- }
- DCHECK(table_view->original_handler_);
- return CallWindowProc(table_view->original_handler_, window, message, w_param,
- l_param);
-}
-
-LRESULT CALLBACK TableView::TableHeaderWndProc(HWND window, UINT message,
- WPARAM w_param, LPARAM l_param) {
- TableView* table_view = reinterpret_cast<TableViewWrapper*>(
- GetWindowLongPtr(window, GWLP_USERDATA))->table_view;
-
- switch (message) {
- case WM_SETCURSOR:
- if (!table_view->resizable_columns_)
- // Prevents the cursor from changing to the resize cursor.
- return TRUE;
- break;
- case WM_LBUTTONDBLCLK:
- if (!table_view->resizable_columns_)
- // Prevents the double-click on the column separator from auto-resizing
- // the column.
- return TRUE;
- break;
- default:
- break;
- }
- DCHECK(table_view->header_original_handler_);
- return CallWindowProc(table_view->header_original_handler_,
- window, message, w_param, l_param);
-}
-
-HWND TableView::CreateNativeControl(HWND parent_container) {
- int style = WS_CHILD | LVS_REPORT | LVS_SHOWSELALWAYS;
- if (single_selection_)
- style |= LVS_SINGLESEL;
- // If there's only one column and the title string is empty, don't show a
- // header.
- if (all_columns_.size() == 1) {
- std::map<int, TableColumn>::const_iterator first =
- all_columns_.begin();
- if (first->second.title.empty())
- style |= LVS_NOCOLUMNHEADER;
- }
- list_view_ = ::CreateWindowEx(WS_EX_CLIENTEDGE | GetAdditionalRTLStyle(),
- WC_LISTVIEW,
- L"",
- style,
- 0, 0, width(), height(),
- parent_container, NULL, NULL, NULL);
-
- // Make the selection extend across the row.
- // Reduce overdraw/flicker artifacts by double buffering.
- DWORD list_view_style = LVS_EX_FULLROWSELECT;
- if (win_util::GetWinVersion() > win_util::WINVERSION_2000) {
- list_view_style |= LVS_EX_DOUBLEBUFFER;
- }
- if (table_type_ == CHECK_BOX_AND_TEXT)
- list_view_style |= LVS_EX_CHECKBOXES;
- ListView_SetExtendedListViewStyleEx(list_view_, 0, list_view_style);
- l10n_util::AdjustUIFontForWindow(list_view_);
-
- // Add the columns.
- for (std::vector<int>::iterator i = visible_columns_.begin();
- i != visible_columns_.end(); ++i) {
- InsertColumn(all_columns_[*i],
- static_cast<int>(i - visible_columns_.begin()));
- }
-
- if (model_)
- model_->SetObserver(this);
-
- // Add the groups.
- if (model_ && model_->HasGroups() &&
- win_util::GetWinVersion() > win_util::WINVERSION_2000) {
- ListView_EnableGroupView(list_view_, true);
-
- TableModel::Groups groups = model_->GetGroups();
- LVGROUP group = { 0 };
- group.cbSize = sizeof(LVGROUP);
- group.mask = LVGF_HEADER | LVGF_ALIGN | LVGF_GROUPID;
- group.uAlign = LVGA_HEADER_LEFT;
- for (size_t i = 0; i < groups.size(); ++i) {
- group.pszHeader = const_cast<wchar_t*>(groups[i].title.c_str());
- group.iGroupId = groups[i].id;
- ListView_InsertGroup(list_view_, static_cast<int>(i), &group);
- }
- }
-
- // Set the # of rows.
- if (model_)
- UpdateListViewCache(0, model_->RowCount(), true);
-
- if (table_type_ == ICON_AND_TEXT) {
- HIMAGELIST image_list =
- ImageList_Create(kImageSize, kImageSize, ILC_COLOR32, 2, 2);
- // We create 2 phony images because we are going to switch images at every
- // refresh in order to force a refresh of the icon area (somehow the clip
- // rect does not include the icon).
- ChromeCanvas canvas(kImageSize, kImageSize, false);
- // Make the background completely transparent.
- canvas.drawColor(SK_ColorBLACK, SkPorterDuff::kClear_Mode);
- HICON empty_icon =
- IconUtil::CreateHICONFromSkBitmap(canvas.ExtractBitmap());
- ImageList_AddIcon(image_list, empty_icon);
- ImageList_AddIcon(image_list, empty_icon);
- DeleteObject(empty_icon);
- ListView_SetImageList(list_view_, image_list, LVSIL_SMALL);
- }
-
- if (!resizable_columns_) {
- // To disable the resizing of columns we'll filter the events happening on
- // the header. We also need to intercept the HDM_LAYOUT to size the header
- // for the Chrome headers.
- HWND header = ListView_GetHeader(list_view_);
- DCHECK(header);
- SetWindowLongPtr(header, GWLP_USERDATA,
- reinterpret_cast<LONG_PTR>(&table_view_wrapper_));
- header_original_handler_ = win_util::SetWindowProc(header,
- &TableView::TableHeaderWndProc);
- }
-
- SetWindowLongPtr(list_view_, GWLP_USERDATA,
- reinterpret_cast<LONG_PTR>(&table_view_wrapper_));
- original_handler_ =
- win_util::SetWindowProc(list_view_, &TableView::TableWndProc);
-
- // Bug 964884: detach the IME attached to this window.
- // We should attach IMEs only when we need to input CJK strings.
- ::ImmAssociateContextEx(list_view_, NULL, 0);
-
- UpdateContentOffset();
-
- return list_view_;
-}
-
-void TableView::ToggleSortOrder(int column_id) {
- SortDescriptors sort = sort_descriptors();
- if (!sort.empty() && sort[0].column_id == column_id) {
- sort[0].ascending = !sort[0].ascending;
- } else {
- SortDescriptor descriptor(column_id, true);
- sort.insert(sort.begin(), descriptor);
- if (sort.size() > 2) {
- // Only persist two sort descriptors.
- sort.resize(2);
- }
- }
- SetSortDescriptors(sort);
-}
-
-void TableView::UpdateItemsLParams(int start, int length) {
- LVITEM item;
- memset(&item, 0, sizeof(LVITEM));
- item.mask = LVIF_PARAM;
- int row_count = RowCount();
- for (int i = 0; i < row_count; ++i) {
- item.iItem = i;
- int model_index = view_to_model(i);
- if (length > 0 && model_index >= start)
- model_index += length;
- item.lParam = static_cast<LPARAM>(model_index);
- ListView_SetItem(list_view_, &item);
- }
-}
-
-void TableView::SortItemsAndUpdateMapping() {
- if (!is_sorted()) {
- ListView_SortItems(list_view_, &TableView::NaturalSortFunc, this);
- view_to_model_.reset(NULL);
- model_to_view_.reset(NULL);
- return;
- }
-
- PrepareForSort();
-
- // Sort the items.
- ListView_SortItems(list_view_, &TableView::SortFunc, this);
-
- // Cleanup the collator.
- if (collator) {
- delete collator;
- collator = NULL;
- }
-
- // Update internal mapping to match how items were actually sorted.
- int row_count = RowCount();
- model_to_view_.reset(new int[row_count]);
- view_to_model_.reset(new int[row_count]);
- LVITEM item;
- memset(&item, 0, sizeof(LVITEM));
- item.mask = LVIF_PARAM;
- for (int i = 0; i < row_count; ++i) {
- item.iItem = i;
- ListView_GetItem(list_view_, &item);
- int model_index = static_cast<int>(item.lParam);
- view_to_model_[i] = model_index;
- model_to_view_[model_index] = i;
- }
-}
-
-// static
-int CALLBACK TableView::SortFunc(LPARAM model_index_1_p,
- LPARAM model_index_2_p,
- LPARAM table_view_param) {
- int model_index_1 = static_cast<int>(model_index_1_p);
- int model_index_2 = static_cast<int>(model_index_2_p);
- TableView* table_view = reinterpret_cast<TableView*>(table_view_param);
- return table_view->CompareRows(model_index_1, model_index_2);
-}
-
-// static
-int CALLBACK TableView::NaturalSortFunc(LPARAM model_index_1_p,
- LPARAM model_index_2_p,
- LPARAM table_view_param) {
- return model_index_1_p - model_index_2_p;
-}
-
-void TableView::ResetColumnSortImage(int column_id, SortDirection direction) {
- if (!list_view_ || column_id == -1)
- return;
-
- std::vector<int>::const_iterator i =
- std::find(visible_columns_.begin(), visible_columns_.end(), column_id);
- if (i == visible_columns_.end())
- return;
-
- HWND header = ListView_GetHeader(list_view_);
- if (!header)
- return;
-
- int column_index = static_cast<int>(i - visible_columns_.begin());
- HDITEM header_item;
- memset(&header_item, 0, sizeof(header_item));
- header_item.mask = HDI_FORMAT;
- Header_GetItem(header, column_index, &header_item);
- header_item.fmt &= ~(HDF_SORTUP | HDF_SORTDOWN);
- if (direction == ASCENDING_SORT)
- header_item.fmt |= HDF_SORTUP;
- else if (direction == DESCENDING_SORT)
- header_item.fmt |= HDF_SORTDOWN;
- Header_SetItem(header, column_index, &header_item);
-}
-
-void TableView::InsertColumn(const TableColumn& tc, int index) {
- if (!list_view_)
- return;
-
- LVCOLUMN column = { 0 };
- column.mask = LVCF_TEXT|LVCF_FMT;
- column.pszText = const_cast<LPWSTR>(tc.title.c_str());
- switch (tc.alignment) {
- case TableColumn::LEFT:
- column.fmt = LVCFMT_LEFT;
- break;
- case TableColumn::RIGHT:
- column.fmt = LVCFMT_RIGHT;
- break;
- case TableColumn::CENTER:
- column.fmt = LVCFMT_CENTER;
- break;
- default:
- NOTREACHED();
- }
- if (tc.width != -1) {
- column.mask |= LVCF_WIDTH;
- column.cx = tc.width;
- }
- column.mask |= LVCF_SUBITEM;
- // Sub-items are 1s indexed.
- column.iSubItem = index + 1;
- SendMessage(list_view_, LVM_INSERTCOLUMN, index,
- reinterpret_cast<LPARAM>(&column));
- if (is_sorted() && sort_descriptors_[0].column_id == tc.id) {
- ResetColumnSortImage(
- tc.id,
- sort_descriptors_[0].ascending ? ASCENDING_SORT : DESCENDING_SORT);
- }
-}
-
-LRESULT TableView::OnNotify(int w_param, LPNMHDR hdr) {
- if (!model_)
- return 0;
-
- switch (hdr->code) {
- case NM_CUSTOMDRAW: {
- // Draw notification. dwDragState indicates the current stage of drawing.
- return OnCustomDraw(reinterpret_cast<NMLVCUSTOMDRAW*>(hdr));
- }
-
- case LVN_ITEMCHANGED: {
- // Notification that the state of an item has changed. The state
- // includes such things as whether the item is selected or checked.
- NMLISTVIEW* state_change = reinterpret_cast<NMLISTVIEW*>(hdr);
- if ((state_change->uChanged & LVIF_STATE) != 0) {
- if ((state_change->uOldState & LVIS_SELECTED) !=
- (state_change->uNewState & LVIS_SELECTED)) {
- // Selected state of the item changed.
- OnSelectedStateChanged();
- }
- if ((state_change->uOldState & LVIS_STATEIMAGEMASK) !=
- (state_change->uNewState & LVIS_STATEIMAGEMASK)) {
- // Checked state of the item changed.
- bool is_checked =
- ((state_change->uNewState & LVIS_STATEIMAGEMASK) ==
- INDEXTOSTATEIMAGEMASK(2));
- OnCheckedStateChanged(view_to_model(state_change->iItem),
- is_checked);
- }
- }
- break;
- }
-
- case HDN_BEGINTRACKW:
- case HDN_BEGINTRACKA:
- // Prevent clicks so columns cannot be resized.
- if (!resizable_columns_)
- return TRUE;
- break;
-
- case NM_DBLCLK:
- OnDoubleClick();
- break;
-
- // If we see a key down message, we need to invoke the OnKeyDown handler
- // in order to give our class (or any subclass) and opportunity to perform
- // a key down triggered action, if such action is necessary.
- case LVN_KEYDOWN: {
- NMLVKEYDOWN* key_down_message = reinterpret_cast<NMLVKEYDOWN*>(hdr);
- OnKeyDown(key_down_message->wVKey);
- break;
- }
-
- case LVN_COLUMNCLICK: {
- const TableColumn& column = GetColumnAtPosition(
- reinterpret_cast<NMLISTVIEW*>(hdr)->iSubItem);
- if (column.sortable)
- ToggleSortOrder(column.id);
- break;
- }
-
- case LVN_MARQUEEBEGIN: // We don't want the marque selection.
- return 1;
-
- default:
- break;
- }
- return 0;
-}
-
-void TableView::OnDestroy() {
- if (table_type_ == ICON_AND_TEXT) {
- HIMAGELIST image_list =
- ListView_GetImageList(GetNativeControlHWND(), LVSIL_SMALL);
- DCHECK(image_list);
- if (image_list)
- ImageList_Destroy(image_list);
- }
-}
-
-// Returns result, unless ascending is false in which case -result is returned.
-static int SwapCompareResult(int result, bool ascending) {
- return ascending ? result : -result;
-}
-
-int TableView::CompareRows(int model_row1, int model_row2) {
- if (model_->HasGroups()) {
- // By default ListView sorts the elements regardless of groups. In such
- // a situation the groups display only the items they contain. This results
- // in the visual order differing from the item indices. I could not find
- // a way to iterate over the visual order in this situation. As a workaround
- // this forces the items to be sorted by groups as well, which means the
- // visual order matches the item indices.
- int g1 = model_->GetGroupID(model_row1);
- int g2 = model_->GetGroupID(model_row2);
- if (g1 != g2)
- return g1 - g2;
- }
- int sort_result = model_->CompareValues(
- model_row1, model_row2, sort_descriptors_[0].column_id);
- if (sort_result == 0 && sort_descriptors_.size() > 1 &&
- sort_descriptors_[1].column_id != -1) {
- // Try the secondary sort.
- return SwapCompareResult(
- model_->CompareValues(model_row1, model_row2,
- sort_descriptors_[1].column_id),
- sort_descriptors_[1].ascending);
- }
- return SwapCompareResult(sort_result, sort_descriptors_[0].ascending);
-}
-
-int TableView::GetColumnWidth(int column_id) {
- if (!list_view_)
- return -1;
-
- std::vector<int>::const_iterator i =
- std::find(visible_columns_.begin(), visible_columns_.end(), column_id);
- if (i == visible_columns_.end())
- return -1;
-
- return ListView_GetColumnWidth(
- list_view_, static_cast<int>(i - visible_columns_.begin()));
-}
-
-LRESULT TableView::OnCustomDraw(NMLVCUSTOMDRAW* draw_info) {
- switch (draw_info->nmcd.dwDrawStage) {
- case CDDS_PREPAINT: {
- return CDRF_NOTIFYITEMDRAW;
- }
- case CDDS_ITEMPREPAINT: {
- // The list-view is about to paint an item, tell it we want to
- // notified when it paints every subitem.
- LRESULT r = CDRF_NOTIFYSUBITEMDRAW;
- if (table_type_ == ICON_AND_TEXT)
- r |= CDRF_NOTIFYPOSTPAINT;
- return r;
- }
- case (CDDS_ITEMPREPAINT | CDDS_SUBITEM): {
- // The list-view is painting a subitem. See if the colors should be
- // changed from the default.
- if (custom_colors_enabled_) {
- // At this time, draw_info->clrText and draw_info->clrTextBk are not
- // set. So we pass in an ItemColor to GetCellColors. If
- // ItemColor.color_is_set is true, then we use the provided color.
- ItemColor foreground = {0};
- ItemColor background = {0};
-
- LOGFONT logfont;
- GetObject(GetWindowFont(list_view_), sizeof(logfont), &logfont);
-
- if (GetCellColors(view_to_model(
- static_cast<int>(draw_info->nmcd.dwItemSpec)),
- draw_info->iSubItem,
- &foreground,
- &background,
- &logfont)) {
- // TODO(tc): Creating/deleting a font for every cell seems like a
- // waste if the font hasn't changed. Maybe we should use a struct
- // with a bool like we do with colors?
- if (custom_cell_font_)
- DeleteObject(custom_cell_font_);
- l10n_util::AdjustUIFont(&logfont);
- custom_cell_font_ = CreateFontIndirect(&logfont);
- SelectObject(draw_info->nmcd.hdc, custom_cell_font_);
- draw_info->clrText = foreground.color_is_set
- ? skia::SkColorToCOLORREF(foreground.color)
- : CLR_DEFAULT;
- draw_info->clrTextBk = background.color_is_set
- ? skia::SkColorToCOLORREF(background.color)
- : CLR_DEFAULT;
- return CDRF_NEWFONT;
- }
- }
- return CDRF_DODEFAULT;
- }
- case CDDS_ITEMPOSTPAINT: {
- DCHECK((table_type_ == ICON_AND_TEXT) || (ImplementPostPaint()));
- int view_index = static_cast<int>(draw_info->nmcd.dwItemSpec);
- // We get notifications for empty items, just ignore them.
- if (view_index >= model_->RowCount())
- return CDRF_DODEFAULT;
- int model_index = view_to_model(view_index);
- LRESULT r = CDRF_DODEFAULT;
- // First let's take care of painting the right icon.
- if (table_type_ == ICON_AND_TEXT) {
- SkBitmap image = model_->GetIcon(model_index);
- if (!image.isNull()) {
- // Get the rect that holds the icon.
- CRect icon_rect, client_rect;
- if (ListView_GetItemRect(list_view_, view_index, &icon_rect,
- LVIR_ICON) &&
- GetClientRect(list_view_, &client_rect)) {
- CRect intersection;
- // Client rect includes the header but we need to make sure we don't
- // paint into it.
- client_rect.top += content_offset_;
- // Make sure the region need to paint is visible.
- if (intersection.IntersectRect(&icon_rect, &client_rect)) {
- ChromeCanvas canvas(icon_rect.Width(), icon_rect.Height(), false);
-
- // It seems the state in nmcd.uItemState is not correct.
- // We'll retrieve it explicitly.
- int selected = ListView_GetItemState(
- list_view_, view_index, LVIS_SELECTED | LVIS_DROPHILITED);
- bool drop_highlight = ((selected & LVIS_DROPHILITED) != 0);
- int bg_color_index;
- if (!IsEnabled())
- bg_color_index = COLOR_3DFACE;
- else if (drop_highlight)
- bg_color_index = COLOR_HIGHLIGHT;
- else if (selected)
- bg_color_index = HasFocus() ? COLOR_HIGHLIGHT : COLOR_3DFACE;
- else
- bg_color_index = COLOR_WINDOW;
- // NOTE: This may be invoked without the ListView filling in the
- // background (or rather windows paints background, then invokes
- // this twice). As such, we always fill in the background.
- canvas.drawColor(
- skia::COLORREFToSkColor(GetSysColor(bg_color_index)),
- SkPorterDuff::kSrc_Mode);
- // + 1 for padding (we declared the image as 18x18 in the list-
- // view when they are 16x16 so we get an extra pixel of padding).
- canvas.DrawBitmapInt(image, 0, 0,
- image.width(), image.height(),
- 1, 1, kFavIconSize, kFavIconSize, true);
-
- // Only paint the visible region of the icon.
- RECT to_draw = { intersection.left - icon_rect.left,
- intersection.top - icon_rect.top,
- 0, 0 };
- to_draw.right = to_draw.left +
- (intersection.right - intersection.left);
- to_draw.bottom = to_draw.top +
- (intersection.bottom - intersection.top);
- canvas.getTopPlatformDevice().drawToHDC(draw_info->nmcd.hdc,
- intersection.left,
- intersection.top,
- &to_draw);
- r = CDRF_SKIPDEFAULT;
- }
- }
- }
- }
- if (ImplementPostPaint()) {
- CRect cell_rect;
- if (ListView_GetItemRect(list_view_, view_index, &cell_rect,
- LVIR_BOUNDS)) {
- PostPaint(model_index, 0, false, cell_rect, draw_info->nmcd.hdc);
- r = CDRF_SKIPDEFAULT;
- }
- }
- return r;
- }
- default:
- return CDRF_DODEFAULT;
- }
-}
-
-void TableView::UpdateListViewCache(int start, int length, bool add) {
- ignore_listview_change_ = true;
- UpdateListViewCache0(start, length, add);
- ignore_listview_change_ = false;
-}
-
-void TableView::ResetColumnSizes() {
- if (!list_view_)
- return;
-
- // See comment in TableColumn for what this does.
- int width = this->width();
- CRect native_bounds;
- if (GetClientRect(GetNativeControlHWND(), &native_bounds) &&
- native_bounds.Width() > 0) {
- // Prefer the bounds of the window over our bounds, which may be different.
- width = native_bounds.Width();
- }
-
- float percent = 0;
- int fixed_width = 0;
- int autosize_width = 0;
-
- for (std::vector<int>::const_iterator i = visible_columns_.begin();
- i != visible_columns_.end(); ++i) {
- TableColumn& col = all_columns_[*i];
- int col_index = static_cast<int>(i - visible_columns_.begin());
- if (col.width == -1) {
- if (col.percent > 0) {
- percent += col.percent;
- } else {
- autosize_width += col.min_visible_width;
- }
- } else {
- fixed_width += ListView_GetColumnWidth(list_view_, col_index);
- }
- }
-
- // Now do a pass to set the actual sizes of auto-sized and
- // percent-sized columns.
- int available_width = width - fixed_width - autosize_width;
- for (std::vector<int>::const_iterator i = visible_columns_.begin();
- i != visible_columns_.end(); ++i) {
- TableColumn& col = all_columns_[*i];
- if (col.width == -1) {
- int col_index = static_cast<int>(i - visible_columns_.begin());
- if (col.percent > 0) {
- if (available_width > 0) {
- int col_width =
- static_cast<int>(available_width * (col.percent / percent));
- available_width -= col_width;
- percent -= col.percent;
- ListView_SetColumnWidth(list_view_, col_index, col_width);
- }
- } else {
- int col_width = col.min_visible_width;
- // If no "percent" columns, the last column acts as one, if auto-sized.
- if (percent == 0.f && available_width > 0 &&
- col_index == column_count_ - 1) {
- col_width += available_width;
- }
- ListView_SetColumnWidth(list_view_, col_index, col_width);
- }
- }
- }
-}
-
-gfx::Size TableView::GetPreferredSize() {
- return preferred_size_;
-}
-
-void TableView::UpdateListViewCache0(int start, int length, bool add) {
- if (is_sorted()) {
- if (add)
- UpdateItemsLParams(start, length);
- else
- UpdateItemsLParams(0, 0);
- }
-
- LVITEM item = {0};
- int start_column = 0;
- int max_row = start + length;
- const bool has_groups =
- (win_util::GetWinVersion() > win_util::WINVERSION_2000 &&
- model_->HasGroups());
- if (add) {
- if (has_groups)
- item.mask = LVIF_GROUPID;
- item.mask |= LVIF_PARAM;
- for (int i = start; i < max_row; ++i) {
- item.iItem = i;
- if (has_groups)
- item.iGroupId = model_->GetGroupID(i);
- item.lParam = i;
- ListView_InsertItem(list_view_, &item);
- }
- }
-
- memset(&item, 0, sizeof(LVITEM));
-
- // NOTE: I don't quite get why the iSubItem in the following is not offset
- // by 1. According to the docs it should be offset by one, but that doesn't
- // work.
- if (table_type_ == CHECK_BOX_AND_TEXT) {
- start_column = 1;
- item.iSubItem = 0;
- item.mask = LVIF_TEXT | LVIF_STATE;
- item.stateMask = LVIS_STATEIMAGEMASK;
- for (int i = start; i < max_row; ++i) {
- std::wstring text = model_->GetText(i, visible_columns_[0]);
- item.iItem = add ? i : model_to_view(i);
- item.pszText = const_cast<LPWSTR>(text.c_str());
- item.state = INDEXTOSTATEIMAGEMASK(model_->IsChecked(i) ? 2 : 1);
- ListView_SetItem(list_view_, &item);
- }
- }
-
- item.stateMask = 0;
- item.mask = LVIF_TEXT;
- if (table_type_ == ICON_AND_TEXT) {
- item.mask |= LVIF_IMAGE;
- }
- for (int j = start_column; j < column_count_; ++j) {
- TableColumn& col = all_columns_[visible_columns_[j]];
- int max_text_width = ListView_GetStringWidth(list_view_, col.title.c_str());
- for (int i = start; i < max_row; ++i) {
- item.iItem = add ? i : model_to_view(i);
- item.iSubItem = j;
- std::wstring text = model_->GetText(i, visible_columns_[j]);
- item.pszText = const_cast<LPWSTR>(text.c_str());
- item.iImage = 0;
- ListView_SetItem(list_view_, &item);
-
- // Compute width in px, using current font.
- int string_width = ListView_GetStringWidth(list_view_, item.pszText);
- // The width of an icon belongs to the first column.
- if (j == 0 && table_type_ == ICON_AND_TEXT)
- string_width += kListViewIconWidthAndPadding;
- max_text_width = std::max(string_width, max_text_width);
- }
-
- // ListView_GetStringWidth must be padded or else truncation will occur
- // (MSDN). 15px matches the Win32/LVSCW_AUTOSIZE_USEHEADER behavior.
- max_text_width += kListViewTextPadding;
-
- // Protect against partial update.
- if (max_text_width > col.min_visible_width ||
- (start == 0 && length == model_->RowCount())) {
- col.min_visible_width = max_text_width;
- }
- }
-
- if (is_sorted()) {
- // NOTE: As most of our tables are smallish I'm not going to optimize this.
- // If our tables become large and frequently update, then it'll make sense
- // to optimize this.
-
- SortItemsAndUpdateMapping();
- }
-}
-
-void TableView::OnDoubleClick() {
- if (!ignore_listview_change_ && table_view_observer_) {
- table_view_observer_->OnDoubleClick();
- }
-}
-
-void TableView::OnSelectedStateChanged() {
- if (!ignore_listview_change_ && table_view_observer_) {
- table_view_observer_->OnSelectionChanged();
- }
-}
-
-void TableView::OnKeyDown(unsigned short virtual_keycode) {
- if (!ignore_listview_change_ && table_view_observer_) {
- table_view_observer_->OnKeyDown(virtual_keycode);
- }
-}
-
-void TableView::OnCheckedStateChanged(int model_row, bool is_checked) {
- if (!ignore_listview_change_)
- model_->SetChecked(model_row, is_checked);
-}
-
-int TableView::PreviousSelectedViewIndex(int view_index) {
- DCHECK(view_index >= 0);
- if (!list_view_ || view_index <= 0)
- return -1;
-
- int row_count = RowCount();
- if (row_count == 0)
- return -1; // Empty table, nothing can be selected.
-
- // For some reason
- // ListView_GetNextItem(list_view_,item, LVNI_SELECTED | LVNI_ABOVE)
- // fails on Vista (always returns -1), so we iterate through the indices.
- view_index = std::min(view_index, row_count);
- while (--view_index >= 0 && !IsItemSelected(view_to_model(view_index)));
- return view_index;
-}
-
-int TableView::LastSelectedViewIndex() {
- return PreviousSelectedViewIndex(RowCount());
-}
-
-void TableView::UpdateContentOffset() {
- content_offset_ = 0;
-
- if (!list_view_)
- return;
-
- HWND header = ListView_GetHeader(list_view_);
- if (!header)
- return;
-
- POINT origin = {0, 0};
- MapWindowPoints(header, list_view_, &origin, 1);
-
- CRect header_bounds;
- GetWindowRect(header, &header_bounds);
-
- content_offset_ = origin.y + header_bounds.Height();
-}
-
-//
-// TableSelectionIterator
-//
-TableSelectionIterator::TableSelectionIterator(TableView* view,
- int view_index)
- : table_view_(view),
- view_index_(view_index) {
- UpdateModelIndexFromViewIndex();
-}
-
-TableSelectionIterator& TableSelectionIterator::operator=(
- const TableSelectionIterator& other) {
- view_index_ = other.view_index_;
- model_index_ = other.model_index_;
- return *this;
-}
-
-bool TableSelectionIterator::operator==(const TableSelectionIterator& other) {
- return (other.view_index_ == view_index_);
-}
-
-bool TableSelectionIterator::operator!=(const TableSelectionIterator& other) {
- return (other.view_index_ != view_index_);
-}
-
-TableSelectionIterator& TableSelectionIterator::operator++() {
- view_index_ = table_view_->PreviousSelectedViewIndex(view_index_);
- UpdateModelIndexFromViewIndex();
- return *this;
-}
-
-int TableSelectionIterator::operator*() {
- return model_index_;
-}
-
-void TableSelectionIterator::UpdateModelIndexFromViewIndex() {
- if (view_index_ == -1)
- model_index_ = -1;
- else
- model_index_ = table_view_->view_to_model(view_index_);
-}
-
-} // namespace views
diff --git a/chrome/views/controls/table/table_view.h b/chrome/views/controls/table/table_view.h
deleted file mode 100644
index e411d8a..0000000
--- a/chrome/views/controls/table/table_view.h
+++ /dev/null
@@ -1,676 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_CONTROLS_TABLE_TABLE_VIEW_H_
-#define CHROME_VIEWS_CONTROLS_TABLE_TABLE_VIEW_H_
-
-#include "build/build_config.h"
-
-#if defined(OS_WIN)
-#include <windows.h>
-#endif // defined(OS_WIN)
-
-#include <map>
-#include <unicode/coll.h>
-#include <unicode/uchar.h>
-#include <vector>
-
-#include "app/l10n_util.h"
-#include "base/logging.h"
-#if defined(OS_WIN)
-// TODO(port): remove the ifdef when native_control.h is ported.
-#include "chrome/views/controls/native_control.h"
-#endif // defined(OS_WIN)
-#include "skia/include/SkColor.h"
-
-class SkBitmap;
-
-// A TableView is a view that displays multiple rows with any number of columns.
-// TableView is driven by a TableModel. The model returns the contents
-// to display. TableModel also has an Observer which is used to notify
-// TableView of changes to the model so that the display may be updated
-// appropriately.
-//
-// TableView itself has an observer that is notified when the selection
-// changes.
-//
-// Tables may be sorted either by directly invoking SetSortDescriptors or by
-// marking the column as sortable and the user doing a gesture to sort the
-// contents. TableView itself maintains the sort so that the underlying model
-// isn't effected.
-//
-// When a table is sorted the model coordinates do not necessarily match the
-// view coordinates. All table methods are in terms of the model. If you need to
-// convert to view coordinates use model_to_view.
-//
-// Sorting is done by a locale sensitive string sort. You can customize the
-// sort by way of overriding CompareValues.
-//
-// TableView is a wrapper around the window type ListView in report mode.
-namespace views {
-
-class ListView;
-class ListViewParent;
-class TableView;
-struct TableColumn;
-
-// The cells in the first column of a table can contain:
-// - only text
-// - a small icon (16x16) and some text
-// - a check box and some text
-enum TableTypes {
- TEXT_ONLY = 0,
- ICON_AND_TEXT,
- CHECK_BOX_AND_TEXT
-};
-
-// Any time the TableModel changes, it must notify its observer.
-class TableModelObserver {
- public:
- // Invoked when the model has been completely changed.
- virtual void OnModelChanged() = 0;
-
- // Invoked when a range of items has changed.
- virtual void OnItemsChanged(int start, int length) = 0;
-
- // Invoked when new items are added.
- virtual void OnItemsAdded(int start, int length) = 0;
-
- // Invoked when a range of items has been removed.
- virtual void OnItemsRemoved(int start, int length) = 0;
-};
-
-// The model driving the TableView.
-class TableModel {
- public:
- // See HasGroups, get GetGroupID for details as to how this is used.
- struct Group {
- // The title text for the group.
- std::wstring title;
-
- // Unique id for the group.
- int id;
- };
- typedef std::vector<Group> Groups;
-
- // Number of rows in the model.
- virtual int RowCount() = 0;
-
- // Returns the value at a particular location in text.
- virtual std::wstring GetText(int row, int column_id) = 0;
-
- // Returns the small icon (16x16) that should be displayed in the first
- // column before the text. This is only used when the TableView was created
- // with the ICON_AND_TEXT table type. Returns an isNull() bitmap if there is
- // no bitmap.
- virtual SkBitmap GetIcon(int row);
-
- // Sets whether a particular row is checked. This is only invoked
- // if the TableView was created with show_check_in_first_column true.
- virtual void SetChecked(int row, bool is_checked) {
- NOTREACHED();
- }
-
- // Returns whether a particular row is checked. This is only invoked
- // if the TableView was created with show_check_in_first_column true.
- virtual bool IsChecked(int row) {
- return false;
- }
-
- // Returns true if the TableView has groups. Groups provide a way to visually
- // delineate the rows in a table view. When groups are enabled table view
- // shows a visual separator for each group, followed by all the rows in
- // the group.
- //
- // On win2k a visual separator is not rendered for the group headers.
- virtual bool HasGroups() { return false; }
-
- // Returns the groups.
- // This is only used if HasGroups returns true.
- virtual Groups GetGroups() {
- // If you override HasGroups to return true, you must override this as
- // well.
- NOTREACHED();
- return std::vector<Group>();
- }
-
- // Returns the group id of the specified row.
- // This is only used if HasGroups returns true.
- virtual int GetGroupID(int row) {
- // If you override HasGroups to return true, you must override this as
- // well.
- NOTREACHED();
- return 0;
- }
-
- // Sets the observer for the model. The TableView should NOT take ownership
- // of the observer.
- virtual void SetObserver(TableModelObserver* observer) = 0;
-
- // Compares the values in the column with id |column_id| for the two rows.
- // Returns a value < 0, == 0 or > 0 as to whether the first value is
- // <, == or > the second value.
- //
- // This implementation does a case insensitive locale specific string
- // comparison.
- virtual int CompareValues(int row1, int row2, int column_id);
-
- protected:
- // Returns the collator used by CompareValues.
- Collator* GetCollator();
-};
-
-// TableColumn specifies the title, alignment and size of a particular column.
-struct TableColumn {
- enum Alignment {
- LEFT, RIGHT, CENTER
- };
-
- TableColumn()
- : id(0),
- title(),
- alignment(LEFT),
- width(-1),
- percent(),
- min_visible_width(0),
- sortable(false) {
- }
- TableColumn(int id, const std::wstring title, Alignment alignment, int width)
- : id(id),
- title(title),
- alignment(alignment),
- width(width),
- percent(0),
- min_visible_width(0),
- sortable(false) {
- }
- TableColumn(int id, const std::wstring title, Alignment alignment, int width,
- float percent)
- : id(id),
- title(title),
- alignment(alignment),
- width(width),
- percent(percent),
- min_visible_width(0),
- sortable(false) {
- }
- // It's common (but not required) to use the title's IDS_* tag as the column
- // id. In this case, the provided conveniences look up the title string on
- // bahalf of the caller.
- TableColumn(int id, Alignment alignment, int width)
- : id(id),
- alignment(alignment),
- width(width),
- percent(0),
- min_visible_width(0),
- sortable(false) {
- title = l10n_util::GetString(id);
- }
- TableColumn(int id, Alignment alignment, int width, float percent)
- : id(id),
- alignment(alignment),
- width(width),
- percent(percent),
- min_visible_width(0),
- sortable(false) {
- title = l10n_util::GetString(id);
- }
-
- // A unique identifier for the column.
- int id;
-
- // The title for the column.
- std::wstring title;
-
- // Alignment for the content.
- Alignment alignment;
-
- // The size of a column may be specified in two ways:
- // 1. A fixed width. Set the width field to a positive number and the
- // column will be given that width, in pixels.
- // 2. As a percentage of the available width. If width is -1, and percent is
- // > 0, the column is given a width of
- // available_width * percent / total_percent.
- // 3. If the width == -1 and percent == 0, the column is autosized based on
- // the width of the column header text.
- //
- // Sizing is done in four passes. Fixed width columns are given
- // their width, percentages are applied, autosized columns are autosized,
- // and finally percentages are applied again taking into account the widths
- // of autosized columns.
- int width;
- float percent;
-
- // The minimum width required for all items in this column
- // (including the header)
- // to be visible.
- int min_visible_width;
-
- // Is this column sortable? Default is false
- bool sortable;
-};
-
-// Returned from SelectionBegin/SelectionEnd
-class TableSelectionIterator {
- public:
- TableSelectionIterator(TableView* view, int view_index);
- TableSelectionIterator& operator=(const TableSelectionIterator& other);
- bool operator==(const TableSelectionIterator& other);
- bool operator!=(const TableSelectionIterator& other);
- TableSelectionIterator& operator++();
- int operator*();
-
- private:
- void UpdateModelIndexFromViewIndex();
-
- TableView* table_view_;
- int view_index_;
-
- // The index in terms of the model. This is returned from the * operator. This
- // is cached to avoid dependencies on the view_to_model mapping.
- int model_index_;
-};
-
-// TableViewObserver is notified about the TableView selection.
-class TableViewObserver {
- public:
- virtual ~TableViewObserver() {}
-
- // Invoked when the selection changes.
- virtual void OnSelectionChanged() = 0;
-
- // Optional method invoked when the user double clicks on the table.
- virtual void OnDoubleClick() {}
-
- // Optional method invoked when the user hits a key with the table in focus.
- virtual void OnKeyDown(unsigned short virtual_keycode) {}
-
- // Invoked when the user presses the delete key.
- virtual void OnTableViewDelete(TableView* table_view) {}
-};
-
-#if defined(OS_WIN)
-// TODO(port): Port TableView.
-class TableView : public NativeControl,
- public TableModelObserver {
- public:
- typedef TableSelectionIterator iterator;
-
- // A helper struct for GetCellColors. Set |color_is_set| to true if color is
- // set. See OnCustomDraw for more details on why we need this.
- struct ItemColor {
- bool color_is_set;
- SkColor color;
- };
-
- // Describes a sorted column.
- struct SortDescriptor {
- SortDescriptor() : column_id(-1), ascending(true) {}
- SortDescriptor(int column_id, bool ascending)
- : column_id(column_id),
- ascending(ascending) { }
-
- // ID of the sorted column.
- int column_id;
-
- // Is the sort ascending?
- bool ascending;
- };
-
- typedef std::vector<SortDescriptor> SortDescriptors;
-
- // Creates a new table using the model and columns specified.
- // The table type applies to the content of the first column (text, icon and
- // text, checkbox and text).
- // When autosize_columns is true, columns always fill the available width. If
- // false, columns are not resized when the table is resized. An extra empty
- // column at the right fills the remaining space.
- // When resizable_columns is true, users can resize columns by dragging the
- // separator on the column header. NOTE: Right now this is always true. The
- // code to set it false is still in place to be a base for future, better
- // resizing behavior (see http://b/issue?id=874646 ), but no one uses or
- // tests the case where this flag is false.
- // Note that setting both resizable_columns and autosize_columns to false is
- // probably not a good idea, as there is no way for the user to increase a
- // column's size in that case.
- TableView(TableModel* model, const std::vector<TableColumn>& columns,
- TableTypes table_type, bool single_selection,
- bool resizable_columns, bool autosize_columns);
- virtual ~TableView();
-
- // Assigns a new model to the table view, detaching the old one if present.
- // If |model| is NULL, the table view cannot be used after this call. This
- // should be called in the containing view's destructor to avoid destruction
- // issues when the model needs to be deleted before the table.
- void SetModel(TableModel* model);
- TableModel* model() const { return model_; }
-
- // Resorts the contents.
- void SetSortDescriptors(const SortDescriptors& sort_descriptors);
-
- // Current sort.
- const SortDescriptors& sort_descriptors() const { return sort_descriptors_; }
-
- void DidChangeBounds(const gfx::Rect& previous,
- const gfx::Rect& current);
-
- // Returns the number of rows in the TableView.
- int RowCount();
-
- // Returns the number of selected rows.
- int SelectedRowCount();
-
- // Selects the specified item, making sure it's visible.
- void Select(int model_row);
-
- // Sets the selected state of an item (without sending any selection
- // notifications). Note that this routine does NOT set the focus to the
- // item at the given index.
- void SetSelectedState(int model_row, bool state);
-
- // Sets the focus to the item at the given index.
- void SetFocusOnItem(int model_row);
-
- // Returns the first selected row in terms of the model.
- int FirstSelectedRow();
-
- // Returns true if the item at the specified index is selected.
- bool IsItemSelected(int model_row);
-
- // Returns true if the item at the specified index has the focus.
- bool ItemHasTheFocus(int model_row);
-
- // Returns an iterator over the selection. The iterator proceeds from the
- // last index to the first.
- //
- // NOTE: the iterator iterates over the visual order (but returns coordinates
- // in terms of the model).
- iterator SelectionBegin();
- iterator SelectionEnd();
-
- // TableModelObserver methods.
- virtual void OnModelChanged();
- virtual void OnItemsChanged(int start, int length);
- virtual void OnItemsAdded(int start, int length);
- virtual void OnItemsRemoved(int start, int length);
-
- void SetObserver(TableViewObserver* observer) {
- table_view_observer_ = observer;
- }
- TableViewObserver* observer() const { return table_view_observer_; }
-
- // Replaces the set of known columns without changing the current visible
- // columns.
- void SetColumns(const std::vector<TableColumn>& columns);
- void AddColumn(const TableColumn& col);
- bool HasColumn(int id);
-
- // Sets which columns (by id) are displayed. All transient size and position
- // information is lost.
- void SetVisibleColumns(const std::vector<int>& columns);
- void SetColumnVisibility(int id, bool is_visible);
- bool IsColumnVisible(int id) const;
-
- // Resets the size of the columns based on the sizes passed to the
- // constructor. Your normally needn't invoked this, it's done for you the
- // first time the TableView is given a valid size.
- void ResetColumnSizes();
-
- // Sometimes we may want to size the TableView to a specific width and
- // height.
- virtual gfx::Size GetPreferredSize();
- void set_preferred_size(const gfx::Size& size) { preferred_size_ = size; }
-
- // Is the table sorted?
- bool is_sorted() const { return !sort_descriptors_.empty(); }
-
- // Maps from the index in terms of the model to that of the view.
- int model_to_view(int model_index) const {
- return model_to_view_.get() ? model_to_view_[model_index] : model_index;
- }
-
- // Maps from the index in terms of the view to that of the model.
- int view_to_model(int view_index) const {
- return view_to_model_.get() ? view_to_model_[view_index] : view_index;
- }
-
- protected:
- // Overriden to return the position of the first selected row.
- virtual gfx::Point GetKeyboardContextMenuLocation();
-
- // Subclasses that want to customize the colors of a particular row/column,
- // must invoke this passing in true. The default value is false, such that
- // GetCellColors is never invoked.
- void SetCustomColorsEnabled(bool custom_colors_enabled);
-
- // Notification from the ListView that the selected state of an item has
- // changed.
- virtual void OnSelectedStateChanged();
-
- // Notification from the ListView that the used double clicked the table.
- virtual void OnDoubleClick();
-
- // Subclasses can implement this method if they need to be notified of a key
- // press event. Other wise, it appeals to table_view_observer_
- virtual void OnKeyDown(unsigned short virtual_keycode);
-
- // Invoked to customize the colors or font at a particular cell. If you
- // change the colors or font, return true. This is only invoked if
- // SetCustomColorsEnabled(true) has been invoked.
- virtual bool GetCellColors(int model_row,
- int column,
- ItemColor* foreground,
- ItemColor* background,
- LOGFONT* logfont);
-
- // Subclasses that want to perform some custom painting (on top of the regular
- // list view painting) should return true here and implement the PostPaint
- // method.
- virtual bool ImplementPostPaint() { return false; }
- // Subclasses can implement in this method extra-painting for cells.
- virtual void PostPaint(int model_row, int column, bool selected,
- const CRect& bounds, HDC device_context) { }
- virtual void PostPaint() {}
-
- virtual HWND CreateNativeControl(HWND parent_container);
-
- virtual LRESULT OnNotify(int w_param, LPNMHDR l_param);
-
- // Overriden to destroy the image list.
- virtual void OnDestroy();
-
- // Used to sort the two rows. Returns a value < 0, == 0 or > 0 indicating
- // whether the row2 comes before row1, row2 is the same as row1 or row1 comes
- // after row2. This invokes CompareValues on the model with the sorted column.
- virtual int CompareRows(int model_row1, int model_row2);
-
- // Called before sorting. This does nothing and is intended for subclasses
- // that need to cache state used during sorting.
- virtual void PrepareForSort() {}
-
- // Returns the width of the specified column by id, or -1 if the column isn't
- // visible.
- int GetColumnWidth(int column_id);
-
- // Returns the offset from the top of the client area to the start of the
- // content.
- int content_offset() const { return content_offset_; }
-
- // Size (width and height) of images.
- static const int kImageSize;
-
- private:
- // Direction of a sort.
- enum SortDirection {
- ASCENDING_SORT,
- DESCENDING_SORT,
- NO_SORT
- };
-
- // We need this wrapper to pass the table view to the windows proc handler
- // when subclassing the list view and list view header, as the reinterpret
- // cast from GetWindowLongPtr would break the pointer if it is pointing to a
- // subclass (in the OO sense of TableView).
- struct TableViewWrapper {
- explicit TableViewWrapper(TableView* view) : table_view(view) { }
- TableView* table_view;
- };
-
- friend class ListViewParent;
- friend class TableSelectionIterator;
-
- LRESULT OnCustomDraw(NMLVCUSTOMDRAW* draw_info);
-
- // Invoked when the user clicks on a column to toggle the sort order. If
- // column_id is the primary sorted column the direction of the sort is
- // toggled, otherwise column_id is made the primary sorted column.
- void ToggleSortOrder(int column_id);
-
- // Updates the lparam of each of the list view items to be the model index.
- // If length is > 0, all items with an index >= start get offset by length.
- // This is used during sorting to determine how the items were sorted.
- void UpdateItemsLParams(int start, int length);
-
- // Does the actual sort and updates the mappings (view_to_model and
- // model_to_view) appropriately.
- void SortItemsAndUpdateMapping();
-
- // Method invoked by ListView to compare the two values. Invokes CompareRows.
- static int CALLBACK SortFunc(LPARAM model_index_1_p,
- LPARAM model_index_2_p,
- LPARAM table_view_param);
-
- // Method invoked by ListView when sorting back to natural state. Returns
- // model_index_1_p - model_index_2_p.
- static int CALLBACK NaturalSortFunc(LPARAM model_index_1_p,
- LPARAM model_index_2_p,
- LPARAM table_view_param);
-
- // Resets the sort image displayed for the specified column.
- void ResetColumnSortImage(int column_id, SortDirection direction);
-
- // Adds a new column.
- void InsertColumn(const TableColumn& tc, int index);
-
- // Update headers and internal state after columns have changed
- void OnColumnsChanged();
-
- // Updates the ListView with values from the model. See UpdateListViewCache0
- // for a complete description.
- // This turns off redrawing, and invokes UpdateListViewCache0 to do the
- // actual updating.
- void UpdateListViewCache(int start, int length, bool add);
-
- // Updates ListView with values from the model.
- // If add is true, this adds length items starting at index start.
- // If add is not true, the items are not added, the but the values in the
- // range start - [start + length] are updated from the model.
- void UpdateListViewCache0(int start, int length, bool add);
-
- // Notification from the ListView that the checked state of the item has
- // changed.
- void OnCheckedStateChanged(int model_row, bool is_checked);
-
- // Returns the index of the selected item before |view_index|, or -1 if
- // |view_index| is the first selected item.
- //
- // WARNING: this returns coordinates in terms of the view, NOT the model.
- int PreviousSelectedViewIndex(int view_index);
-
- // Returns the last selected view index in the table view, or -1 if the table
- // is empty, or nothing is selected.
- //
- // WARNING: this returns coordinates in terms of the view, NOT the model.
- int LastSelectedViewIndex();
-
- // The TableColumn visible at position pos.
- const TableColumn& GetColumnAtPosition(int pos);
-
- // Window procedure of the list view class. We subclass the list view to
- // ignore WM_ERASEBKGND, which gives smoother painting during resizing.
- static LRESULT CALLBACK TableWndProc(HWND window,
- UINT message,
- WPARAM w_param,
- LPARAM l_param);
-
- // Window procedure of the header class. We subclass the header of the table
- // to disable resizing of columns.
- static LRESULT CALLBACK TableHeaderWndProc(HWND window, UINT message,
- WPARAM w_param, LPARAM l_param);
-
- // Updates content_offset_ from the position of the header.
- void UpdateContentOffset();
-
- TableModel* model_;
- TableTypes table_type_;
- TableViewObserver* table_view_observer_;
-
- // An ordered list of id's into all_columns_ representing current visible
- // columns.
- std::vector<int> visible_columns_;
-
- // Mapping of an int id to a TableColumn representing all possible columns.
- std::map<int, TableColumn> all_columns_;
-
- // Cached value of columns_.size()
- int column_count_;
-
- // Selection mode.
- bool single_selection_;
-
- // If true, any events that would normally be propagated to the observer
- // are ignored. For example, if this is true and the selection changes in
- // the listview, the observer is not notified.
- bool ignore_listview_change_;
-
- // Reflects the value passed to SetCustomColorsEnabled.
- bool custom_colors_enabled_;
-
- // Whether or not the columns have been sized in the ListView. This is
- // set to true the first time Layout() is invoked and we have a valid size.
- bool sized_columns_;
-
- // Whether or not columns should automatically be resized to fill the
- // the available width when the list view is resized.
- bool autosize_columns_;
-
- // Whether or not the user can resize columns.
- bool resizable_columns_;
-
- // NOTE: While this has the name View in it, it's not a view. Rather it's
- // a wrapper around the List-View window.
- HWND list_view_;
-
- // The list view's header original proc handler. It is required when
- // subclassing.
- WNDPROC header_original_handler_;
-
- // Window procedure of the listview before we subclassed it.
- WNDPROC original_handler_;
-
- // A wrapper around 'this' used when "subclassing" the list view and header.
- TableViewWrapper table_view_wrapper_;
-
- // A custom font we use when overriding the font type for a specific cell.
- HFONT custom_cell_font_;
-
- // The preferred size of the table view.
- gfx::Size preferred_size_;
-
- int content_offset_;
-
- // Current sort.
- SortDescriptors sort_descriptors_;
-
- // Mappings used when sorted.
- scoped_array<int> view_to_model_;
- scoped_array<int> model_to_view_;
-
- DISALLOW_COPY_AND_ASSIGN(TableView);
-};
-#endif // defined(OS_WIN)
-
-} // namespace views
-
-#endif // CHROME_VIEWS_CONTROLS_TABLE_TABLE_VIEW_H_
diff --git a/chrome/views/controls/table/table_view_unittest.cc b/chrome/views/controls/table/table_view_unittest.cc
deleted file mode 100644
index 7248015..0000000
--- a/chrome/views/controls/table/table_view_unittest.cc
+++ /dev/null
@@ -1,381 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <vector>
-
-#include "base/message_loop.h"
-#include "base/string_util.h"
-#include "chrome/views/controls/table/table_view.h"
-#include "chrome/views/window/window_delegate.h"
-#include "chrome/views/window/window_win.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-using views::TableView;
-
-// TestTableModel --------------------------------------------------------------
-
-// Trivial TableModel implementation that is backed by a vector of vectors.
-// Provides methods for adding/removing/changing the contents that notify the
-// observer appropriately.
-//
-// Initial contents are:
-// 0, 1
-// 1, 1
-// 2, 2
-class TestTableModel : public views::TableModel {
- public:
- TestTableModel();
-
- // Adds a new row at index |row| with values |c1_value| and |c2_value|.
- void AddRow(int row, int c1_value, int c2_value);
-
- // Removes the row at index |row|.
- void RemoveRow(int row);
-
- // Changes the values of the row at |row|.
- void ChangeRow(int row, int c1_value, int c2_value);
-
- // TableModel
- virtual int RowCount();
- virtual std::wstring GetText(int row, int column_id);
- virtual void SetObserver(views::TableModelObserver* observer);
- virtual int CompareValues(int row1, int row2, int column_id);
-
- private:
- views::TableModelObserver* observer_;
-
- // The data.
- std::vector<std::vector<int>> rows_;
-
- DISALLOW_COPY_AND_ASSIGN(TestTableModel);
-};
-
-TestTableModel::TestTableModel() : observer_(NULL) {
- AddRow(0, 0, 1);
- AddRow(1, 1, 1);
- AddRow(2, 2, 2);
-}
-
-void TestTableModel::AddRow(int row, int c1_value, int c2_value) {
- DCHECK(row >= 0 && row <= static_cast<int>(rows_.size()));
- std::vector<int> new_row;
- new_row.push_back(c1_value);
- new_row.push_back(c2_value);
- rows_.insert(rows_.begin() + row, new_row);
- if (observer_)
- observer_->OnItemsAdded(row, 1);
-}
-void TestTableModel::RemoveRow(int row) {
- DCHECK(row >= 0 && row <= static_cast<int>(rows_.size()));
- rows_.erase(rows_.begin() + row);
- if (observer_)
- observer_->OnItemsRemoved(row, 1);
-}
-
-void TestTableModel::ChangeRow(int row, int c1_value, int c2_value) {
- DCHECK(row >= 0 && row < static_cast<int>(rows_.size()));
- rows_[row][0] = c1_value;
- rows_[row][1] = c2_value;
- if (observer_)
- observer_->OnItemsChanged(row, 1);
-}
-
-int TestTableModel::RowCount() {
- return static_cast<int>(rows_.size());
-}
-
-std::wstring TestTableModel::GetText(int row, int column_id) {
- return IntToWString(rows_[row][column_id]);
-}
-
-void TestTableModel::SetObserver(views::TableModelObserver* observer) {
- observer_ = observer;
-}
-
-int TestTableModel::CompareValues(int row1, int row2, int column_id) {
- return rows_[row1][column_id] - rows_[row2][column_id];
-}
-
-// TableViewTest ---------------------------------------------------------------
-
-class TableViewTest : public testing::Test, views::WindowDelegate {
- public:
- virtual void SetUp();
- virtual void TearDown();
-
- virtual views::View* GetContentsView() {
- return table_;
- }
-
- protected:
- // Creates the model.
- TestTableModel* CreateModel();
-
- // Verifies the view order matches that of the supplied arguments. The
- // arguments are in terms of the model. For example, values of '1, 0' indicate
- // the model index at row 0 is 1 and the model index at row 1 is 0.
- void VeriyViewOrder(int first, ...);
-
- // Verifies the selection matches the supplied arguments. The supplied
- // arguments are in terms of this model. This uses the iterator returned by
- // SelectionBegin.
- void VerifySelectedRows(int first, ...);
-
- // Configures the state for the various multi-selection tests.
- // This selects model rows 0 and 1, and if |sort| is true the first column
- // is sorted in descending order.
- void SetUpMultiSelectTestState(bool sort);
-
- scoped_ptr<TestTableModel> model_;
-
- // The table. This is owned by the window.
- TableView* table_;
-
- private:
- MessageLoopForUI message_loop_;
- views::Window* window_;
-};
-
-void TableViewTest::SetUp() {
- OleInitialize(NULL);
- model_.reset(CreateModel());
- std::vector<views::TableColumn> columns;
- columns.resize(2);
- columns[0].id = 0;
- columns[1].id = 1;
- table_ = new TableView(model_.get(), columns, views::ICON_AND_TEXT,
- false, false, false);
- window_ =
- views::Window::CreateChromeWindow(NULL,
- gfx::Rect(100, 100, 512, 512),
- this);
-}
-
-void TableViewTest::TearDown() {
- window_->Close();
- // Temporary workaround to avoid leak of RootView::pending_paint_task_.
- message_loop_.RunAllPending();
- OleUninitialize();
-}
-
-void TableViewTest::VeriyViewOrder(int first, ...) {
- va_list marker;
- va_start(marker, first);
- int value = first;
- int index = 0;
- for (int value = first, index = 0; value != -1; index++) {
- ASSERT_EQ(value, table_->view_to_model(index));
- value = va_arg(marker, int);
- }
- va_end(marker);
-}
-
-void TableViewTest::VerifySelectedRows(int first, ...) {
- va_list marker;
- va_start(marker, first);
- int value = first;
- int index = 0;
- TableView::iterator selection_iterator = table_->SelectionBegin();
- for (int value = first, index = 0; value != -1; index++) {
- ASSERT_TRUE(selection_iterator != table_->SelectionEnd());
- ASSERT_EQ(value, *selection_iterator);
- value = va_arg(marker, int);
- ++selection_iterator;
- }
- ASSERT_TRUE(selection_iterator == table_->SelectionEnd());
- va_end(marker);
-}
-
-void TableViewTest::SetUpMultiSelectTestState(bool sort) {
- // Select two rows.
- table_->SetSelectedState(0, true);
- table_->SetSelectedState(1, true);
-
- VerifySelectedRows(1, 0, -1);
- if (!sort || HasFatalFailure())
- return;
-
- // Sort by first column descending.
- TableView::SortDescriptors sd;
- sd.push_back(TableView::SortDescriptor(0, false));
- table_->SetSortDescriptors(sd);
- VeriyViewOrder(2, 1, 0, -1);
- if (HasFatalFailure())
- return;
-
- // Make sure the two rows are sorted.
- // NOTE: the order changed because iteration happens over view indices.
- VerifySelectedRows(0, 1, -1);
-}
-
-TestTableModel* TableViewTest::CreateModel() {
- return new TestTableModel();
-}
-
-// NullModelTableViewTest ------------------------------------------------------
-
-class NullModelTableViewTest : public TableViewTest {
- protected:
- // Creates the model.
- TestTableModel* CreateModel() {
- return NULL;
- }
-};
-
-// Tests -----------------------------------------------------------------------
-
-// Tests various sorting permutations.
-TEST_F(TableViewTest, Sort) {
- // Sort by first column descending.
- TableView::SortDescriptors sort;
- sort.push_back(TableView::SortDescriptor(0, false));
- table_->SetSortDescriptors(sort);
- VeriyViewOrder(2, 1, 0, -1);
- if (HasFatalFailure())
- return;
-
- // Sort by second column ascending, first column descending.
- sort.clear();
- sort.push_back(TableView::SortDescriptor(1, true));
- sort.push_back(TableView::SortDescriptor(0, false));
- sort[1].ascending = false;
- table_->SetSortDescriptors(sort);
- VeriyViewOrder(1, 0, 2, -1);
- if (HasFatalFailure())
- return;
-
- // Clear the sort.
- table_->SetSortDescriptors(TableView::SortDescriptors());
- VeriyViewOrder(0, 1, 2, -1);
- if (HasFatalFailure())
- return;
-}
-
-// Tests changing the model while sorted.
-TEST_F(TableViewTest, SortThenChange) {
- // Sort by first column descending.
- TableView::SortDescriptors sort;
- sort.push_back(TableView::SortDescriptor(0, false));
- table_->SetSortDescriptors(sort);
- VeriyViewOrder(2, 1, 0, -1);
- if (HasFatalFailure())
- return;
-
- model_->ChangeRow(0, 3, 1);
- VeriyViewOrder(0, 2, 1, -1);
-}
-
-// Tests adding to the model while sorted.
-TEST_F(TableViewTest, AddToSorted) {
- // Sort by first column descending.
- TableView::SortDescriptors sort;
- sort.push_back(TableView::SortDescriptor(0, false));
- table_->SetSortDescriptors(sort);
- VeriyViewOrder(2, 1, 0, -1);
- if (HasFatalFailure())
- return;
-
- // Add row so that it occurs first.
- model_->AddRow(0, 5, -1);
- VeriyViewOrder(0, 3, 2, 1, -1);
- if (HasFatalFailure())
- return;
-
- // Add row so that it occurs last.
- model_->AddRow(0, -1, -1);
- VeriyViewOrder(1, 4, 3, 2, 0, -1);
-}
-
-// Tests selection on sort.
-TEST_F(TableViewTest, PersistSelectionOnSort) {
- // Select row 0.
- table_->Select(0);
-
- // Sort by first column descending.
- TableView::SortDescriptors sort;
- sort.push_back(TableView::SortDescriptor(0, false));
- table_->SetSortDescriptors(sort);
- VeriyViewOrder(2, 1, 0, -1);
- if (HasFatalFailure())
- return;
-
- // Make sure 0 is still selected.
- EXPECT_EQ(0, table_->FirstSelectedRow());
-}
-
-// Tests selection iterator with sort.
-TEST_F(TableViewTest, PersistMultiSelectionOnSort) {
- SetUpMultiSelectTestState(true);
-}
-
-// Tests selection persists after a change when sorted with iterator.
-TEST_F(TableViewTest, PersistMultiSelectionOnChangeWithSort) {
- SetUpMultiSelectTestState(true);
- if (HasFatalFailure())
- return;
-
- model_->ChangeRow(0, 3, 1);
-
- VerifySelectedRows(1, 0, -1);
-}
-
-// Tests selection persists after a remove when sorted with iterator.
-TEST_F(TableViewTest, PersistMultiSelectionOnRemoveWithSort) {
- SetUpMultiSelectTestState(true);
- if (HasFatalFailure())
- return;
-
- model_->RemoveRow(0);
-
- VerifySelectedRows(0, -1);
-}
-
-// Tests selection persists after a add when sorted with iterator.
-TEST_F(TableViewTest, PersistMultiSelectionOnAddWithSort) {
- SetUpMultiSelectTestState(true);
- if (HasFatalFailure())
- return;
-
- model_->AddRow(3, 4, 4);
-
- VerifySelectedRows(0, 1, -1);
-}
-
-// Tests selection persists after a change with iterator.
-TEST_F(TableViewTest, PersistMultiSelectionOnChange) {
- SetUpMultiSelectTestState(false);
- if (HasFatalFailure())
- return;
-
- model_->ChangeRow(0, 3, 1);
-
- VerifySelectedRows(1, 0, -1);
-}
-
-// Tests selection persists after a remove with iterator.
-TEST_F(TableViewTest, PersistMultiSelectionOnRemove) {
- SetUpMultiSelectTestState(false);
- if (HasFatalFailure())
- return;
-
- model_->RemoveRow(0);
-
- VerifySelectedRows(0, -1);
-}
-
-// Tests selection persists after a add with iterator.
-TEST_F(TableViewTest, PersistMultiSelectionOnAdd) {
- SetUpMultiSelectTestState(false);
- if (HasFatalFailure())
- return;
-
- model_->AddRow(3, 4, 4);
-
- VerifySelectedRows(1, 0, -1);
-}
-
-TEST_F(NullModelTableViewTest, NullModel) {
- // There's nothing explicit to test. If there is a bug in TableView relating
- // to a NULL model we'll crash.
-}
diff --git a/chrome/views/controls/text_field.cc b/chrome/views/controls/text_field.cc
deleted file mode 100644
index 0871cdf..0000000
--- a/chrome/views/controls/text_field.cc
+++ /dev/null
@@ -1,1192 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/controls/text_field.h"
-
-#include <atlbase.h>
-#include <atlapp.h>
-#include <atlcrack.h>
-#include <atlctrls.h>
-#include <tom.h> // For ITextDocument, a COM interface to CRichEditCtrl
-#include <vsstyle.h>
-
-#include "app/gfx/insets.h"
-#include "app/l10n_util.h"
-#include "app/l10n_util_win.h"
-#include "base/clipboard.h"
-#include "base/gfx/native_theme.h"
-#include "base/scoped_clipboard_writer.h"
-#include "base/string_util.h"
-#include "base/win_util.h"
-#include "chrome/browser/browser_process.h"
-#include "chrome/common/win_util.h"
-#include "chrome/views/controls/hwnd_view.h"
-#include "chrome/views/controls/menu/menu.h"
-#include "chrome/views/focus/focus_util_win.h"
-#include "chrome/views/widget/widget.h"
-#include "grit/generated_resources.h"
-#include "skia/ext/skia_utils_win.h"
-
-using gfx::NativeTheme;
-
-namespace views {
-
-static const int kDefaultEditStyle = WS_CHILD | WS_VISIBLE;
-
-class TextField::Edit
- : public CWindowImpl<TextField::Edit, CRichEditCtrl,
- CWinTraits<kDefaultEditStyle> >,
- public CRichEditCommands<TextField::Edit>,
- public Menu::Delegate {
- public:
- DECLARE_WND_CLASS(L"ChromeViewsTextFieldEdit");
-
- Edit(TextField* parent, bool draw_border);
- ~Edit();
-
- std::wstring GetText() const;
- void SetText(const std::wstring& text);
- void AppendText(const std::wstring& text);
-
- std::wstring GetSelectedText() const;
-
- // Selects all the text in the edit. Use this in place of SetSelAll() to
- // avoid selecting the "phantom newline" at the end of the edit.
- void SelectAll();
-
- // Clears the selection within the edit field and sets the caret to the end.
- void ClearSelection();
-
- // Removes the border.
- void RemoveBorder();
-
- void SetEnabled(bool enabled);
-
- void SetBackgroundColor(COLORREF bg_color);
-
- // CWindowImpl
- BEGIN_MSG_MAP(Edit)
- MSG_WM_CHAR(OnChar)
- MSG_WM_CONTEXTMENU(OnContextMenu)
- MSG_WM_COPY(OnCopy)
- MSG_WM_CREATE(OnCreate)
- MSG_WM_CUT(OnCut)
- MSG_WM_DESTROY(OnDestroy)
- MESSAGE_HANDLER_EX(WM_IME_CHAR, OnImeChar)
- MESSAGE_HANDLER_EX(WM_IME_STARTCOMPOSITION, OnImeStartComposition)
- MESSAGE_HANDLER_EX(WM_IME_COMPOSITION, OnImeComposition)
- MSG_WM_KEYDOWN(OnKeyDown)
- MSG_WM_LBUTTONDBLCLK(OnLButtonDblClk)
- MSG_WM_LBUTTONDOWN(OnLButtonDown)
- MSG_WM_LBUTTONUP(OnLButtonUp)
- MSG_WM_MBUTTONDOWN(OnNonLButtonDown)
- MSG_WM_MOUSEMOVE(OnMouseMove)
- MSG_WM_MOUSELEAVE(OnMouseLeave)
- MESSAGE_HANDLER_EX(WM_MOUSEWHEEL, OnMouseWheel)
- MSG_WM_NCCALCSIZE(OnNCCalcSize)
- MSG_WM_NCPAINT(OnNCPaint)
- MSG_WM_RBUTTONDOWN(OnNonLButtonDown)
- MSG_WM_PASTE(OnPaste)
- MSG_WM_SYSCHAR(OnSysChar) // WM_SYSxxx == WM_xxx with ALT down
- MSG_WM_SYSKEYDOWN(OnKeyDown)
- END_MSG_MAP()
-
- // Menu::Delegate
- virtual bool IsCommandEnabled(int id) const;
- virtual void ExecuteCommand(int id);
-
- private:
- // This object freezes repainting of the edit until the object is destroyed.
- // Some methods of the CRichEditCtrl draw synchronously to the screen. If we
- // don't freeze, the user will see a rapid series of calls to these as
- // flickers.
- //
- // Freezing the control while it is already frozen is permitted; the control
- // will unfreeze once both freezes are released (the freezes stack).
- class ScopedFreeze {
- public:
- ScopedFreeze(Edit* edit, ITextDocument* text_object_model);
- ~ScopedFreeze();
-
- private:
- Edit* const edit_;
- ITextDocument* const text_object_model_;
-
- DISALLOW_COPY_AND_ASSIGN(ScopedFreeze);
- };
-
- // message handlers
- void OnChar(TCHAR key, UINT repeat_count, UINT flags);
- void OnContextMenu(HWND window, const CPoint& point);
- void OnCopy();
- LRESULT OnCreate(CREATESTRUCT* create_struct);
- void OnCut();
- void OnDestroy();
- LRESULT OnImeChar(UINT message, WPARAM wparam, LPARAM lparam);
- LRESULT OnImeStartComposition(UINT message, WPARAM wparam, LPARAM lparam);
- LRESULT OnImeComposition(UINT message, WPARAM wparam, LPARAM lparam);
- void OnKeyDown(TCHAR key, UINT repeat_count, UINT flags);
- void OnLButtonDblClk(UINT keys, const CPoint& point);
- void OnLButtonDown(UINT keys, const CPoint& point);
- void OnLButtonUp(UINT keys, const CPoint& point);
- void OnMouseLeave();
- LRESULT OnMouseWheel(UINT message, WPARAM w_param, LPARAM l_param);
- void OnMouseMove(UINT keys, const CPoint& point);
- int OnNCCalcSize(BOOL w_param, LPARAM l_param);
- void OnNCPaint(HRGN region);
- void OnNonLButtonDown(UINT keys, const CPoint& point);
- void OnPaste();
- void OnSysChar(TCHAR ch, UINT repeat_count, UINT flags);
-
- // Helper function for OnChar() and OnKeyDown() that handles keystrokes that
- // could change the text in the edit.
- void HandleKeystroke(UINT message, TCHAR key, UINT repeat_count, UINT flags);
-
- // Every piece of code that can change the edit should call these functions
- // before and after the change. These functions determine if anything
- // meaningful changed, and do any necessary updating and notification.
- void OnBeforePossibleChange();
- void OnAfterPossibleChange();
-
- // Given an X coordinate in client coordinates, returns that coordinate
- // clipped to be within the horizontal bounds of the visible text.
- //
- // This is used in our mouse handlers to work around quirky behaviors of the
- // underlying CRichEditCtrl like not supporting triple-click when the user
- // doesn't click on the text itself.
- //
- // |is_triple_click| should be true iff this is the third click of a triple
- // click. Sadly, we need to clip slightly differently in this case.
- LONG ClipXCoordToVisibleText(LONG x, bool is_triple_click) const;
-
- // Sets whether the mouse is in the edit. As necessary this redraws the
- // edit.
- void SetContainsMouse(bool contains_mouse);
-
- // Getter for the text_object_model_, used by the ScopedFreeze class. Note
- // that the pointer returned here is only valid as long as the Edit is still
- // alive.
- ITextDocument* GetTextObjectModel() const;
-
- // We need to know if the user triple-clicks, so track double click points
- // and times so we can see if subsequent clicks are actually triple clicks.
- bool tracking_double_click_;
- CPoint double_click_point_;
- DWORD double_click_time_;
-
- // Used to discard unnecessary WM_MOUSEMOVE events after the first such
- // unnecessary event. See detailed comments in OnMouseMove().
- bool can_discard_mousemove_;
-
- // The text of this control before a possible change.
- std::wstring text_before_change_;
-
- // If true, the mouse is over the edit.
- bool contains_mouse_;
-
- static bool did_load_library_;
-
- TextField* parent_;
-
- // The context menu for the edit.
- scoped_ptr<Menu> context_menu_;
-
- // Border insets.
- gfx::Insets content_insets_;
-
- // Whether the border is drawn.
- bool draw_border_;
-
- // This interface is useful for accessing the CRichEditCtrl at a low level.
- mutable CComQIPtr<ITextDocument> text_object_model_;
-
- // The position and the length of the ongoing composition string.
- // These values are used for removing a composition string from a search
- // text to emulate Firefox.
- bool ime_discard_composition_;
- int ime_composition_start_;
- int ime_composition_length_;
-
- COLORREF bg_color_;
-
- DISALLOW_COPY_AND_ASSIGN(Edit);
-};
-
-///////////////////////////////////////////////////////////////////////////////
-// Helper classes
-
-TextField::Edit::ScopedFreeze::ScopedFreeze(TextField::Edit* edit,
- ITextDocument* text_object_model)
- : edit_(edit),
- text_object_model_(text_object_model) {
- // Freeze the screen.
- if (text_object_model_) {
- long count;
- text_object_model_->Freeze(&count);
- }
-}
-
-TextField::Edit::ScopedFreeze::~ScopedFreeze() {
- // Unfreeze the screen.
- if (text_object_model_) {
- long count;
- text_object_model_->Unfreeze(&count);
- if (count == 0) {
- // We need to UpdateWindow() here instead of InvalidateRect() because, as
- // far as I can tell, the edit likes to synchronously erase its background
- // when unfreezing, thus requiring us to synchronously redraw if we don't
- // want flicker.
- edit_->UpdateWindow();
- }
- }
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// TextField::Edit
-
-bool TextField::Edit::did_load_library_ = false;
-
-TextField::Edit::Edit(TextField* parent, bool draw_border)
- : parent_(parent),
- tracking_double_click_(false),
- double_click_time_(0),
- can_discard_mousemove_(false),
- contains_mouse_(false),
- draw_border_(draw_border),
- ime_discard_composition_(false),
- ime_composition_start_(0),
- ime_composition_length_(0),
- bg_color_(0) {
- if (!did_load_library_)
- did_load_library_ = !!LoadLibrary(L"riched20.dll");
-
- DWORD style = kDefaultEditStyle;
- if (parent->GetStyle() & TextField::STYLE_PASSWORD)
- style |= ES_PASSWORD;
-
- if (parent->read_only_)
- style |= ES_READONLY;
-
- if (parent->GetStyle() & TextField::STYLE_MULTILINE)
- style |= ES_MULTILINE | ES_WANTRETURN | ES_AUTOVSCROLL;
- else
- style |= ES_AUTOHSCROLL;
- // Make sure we apply RTL related extended window styles if necessary.
- DWORD ex_style = l10n_util::GetExtendedStyles();
-
- RECT r = {0, 0, parent_->width(), parent_->height()};
- Create(parent_->GetWidget()->GetNativeView(), r, NULL, style, ex_style);
-
- if (parent->GetStyle() & TextField::STYLE_LOWERCASE) {
- DCHECK((parent->GetStyle() & TextField::STYLE_PASSWORD) == 0);
- SetEditStyle(SES_LOWERCASE, SES_LOWERCASE);
- }
-
- // Set up the text_object_model_.
- CComPtr<IRichEditOle> ole_interface;
- ole_interface.Attach(GetOleInterface());
- text_object_model_ = ole_interface;
-
- context_menu_.reset(new Menu(this, Menu::TOPLEFT, m_hWnd));
- context_menu_->AppendMenuItemWithLabel(IDS_UNDO,
- l10n_util::GetString(IDS_UNDO));
- context_menu_->AppendSeparator();
- context_menu_->AppendMenuItemWithLabel(IDS_CUT,
- l10n_util::GetString(IDS_CUT));
- context_menu_->AppendMenuItemWithLabel(IDS_COPY,
- l10n_util::GetString(IDS_COPY));
- context_menu_->AppendMenuItemWithLabel(IDS_PASTE,
- l10n_util::GetString(IDS_PASTE));
- context_menu_->AppendSeparator();
- context_menu_->AppendMenuItemWithLabel(IDS_SELECT_ALL,
- l10n_util::GetString(IDS_SELECT_ALL));
-}
-
-TextField::Edit::~Edit() {
-}
-
-std::wstring TextField::Edit::GetText() const {
- int len = GetTextLength() + 1;
- std::wstring str;
- GetWindowText(WriteInto(&str, len), len);
- return str;
-}
-
-void TextField::Edit::SetText(const std::wstring& text) {
- // Adjusting the string direction before setting the text in order to make
- // sure both RTL and LTR strings are displayed properly.
- std::wstring text_to_set;
- if (!l10n_util::AdjustStringForLocaleDirection(text, &text_to_set))
- text_to_set = text;
- if (parent_->GetStyle() & STYLE_LOWERCASE)
- text_to_set = l10n_util::ToLower(text_to_set);
- SetWindowText(text_to_set.c_str());
-}
-
-void TextField::Edit::AppendText(const std::wstring& text) {
- int text_length = GetWindowTextLength();
- ::SendMessage(m_hWnd, TBM_SETSEL, true, MAKELPARAM(text_length, text_length));
- ::SendMessage(m_hWnd, EM_REPLACESEL, false,
- reinterpret_cast<LPARAM>(text.c_str()));
-}
-
-std::wstring TextField::Edit::GetSelectedText() const {
- // Figure out the length of the selection.
- long start;
- long end;
- GetSel(start, end);
-
- // Grab the selected text.
- std::wstring str;
- GetSelText(WriteInto(&str, end - start + 1));
-
- return str;
-}
-
-void TextField::Edit::SelectAll() {
- // Select from the end to the front so that the first part of the text is
- // always visible.
- SetSel(GetTextLength(), 0);
-}
-
-void TextField::Edit::ClearSelection() {
- SetSel(GetTextLength(), GetTextLength());
-}
-
-void TextField::Edit::RemoveBorder() {
- if (!draw_border_)
- return;
-
- draw_border_ = false;
- SetWindowPos(NULL, 0, 0, 0, 0,
- SWP_NOMOVE | SWP_FRAMECHANGED | SWP_NOACTIVATE |
- SWP_NOOWNERZORDER | SWP_NOSIZE);
-}
-
-void TextField::Edit::SetEnabled(bool enabled) {
- SendMessage(parent_->GetNativeComponent(), WM_ENABLE,
- static_cast<WPARAM>(enabled), 0);
-}
-
-void TextField::Edit::SetBackgroundColor(COLORREF bg_color) {
- CRichEditCtrl::SetBackgroundColor(bg_color);
- bg_color_ = bg_color;
-}
-
-bool TextField::Edit::IsCommandEnabled(int id) const {
- switch (id) {
- case IDS_UNDO: return !parent_->IsReadOnly() && !!CanUndo();
- case IDS_CUT: return !parent_->IsReadOnly() &&
- !parent_->IsPassword() && !!CanCut();
- case IDS_COPY: return !!CanCopy() && !parent_->IsPassword();
- case IDS_PASTE: return !parent_->IsReadOnly() && !!CanPaste();
- case IDS_SELECT_ALL: return !!CanSelectAll();
- default: NOTREACHED();
- return false;
- }
-}
-
-void TextField::Edit::ExecuteCommand(int id) {
- ScopedFreeze freeze(this, GetTextObjectModel());
- OnBeforePossibleChange();
- switch (id) {
- case IDS_UNDO: Undo(); break;
- case IDS_CUT: Cut(); break;
- case IDS_COPY: Copy(); break;
- case IDS_PASTE: Paste(); break;
- case IDS_SELECT_ALL: SelectAll(); break;
- default: NOTREACHED(); break;
- }
- OnAfterPossibleChange();
-}
-
-void TextField::Edit::OnChar(TCHAR ch, UINT repeat_count, UINT flags) {
- HandleKeystroke(GetCurrentMessage()->message, ch, repeat_count, flags);
-}
-
-void TextField::Edit::OnContextMenu(HWND window, const CPoint& point) {
- CPoint p(point);
- if (point.x == -1 || point.y == -1) {
- GetCaretPos(&p);
- MapWindowPoints(HWND_DESKTOP, &p, 1);
- }
- context_menu_->RunMenuAt(p.x, p.y);
-}
-
-void TextField::Edit::OnCopy() {
- if (parent_->IsPassword())
- return;
-
- const std::wstring text(GetSelectedText());
-
- if (!text.empty()) {
- ScopedClipboardWriter scw(g_browser_process->clipboard());
- scw.WriteText(text);
- }
-}
-
-LRESULT TextField::Edit::OnCreate(CREATESTRUCT* create_struct) {
- SetMsgHandled(FALSE);
- TRACK_HWND_CREATION(m_hWnd);
- return 0;
-}
-
-void TextField::Edit::OnCut() {
- if (parent_->IsReadOnly() || parent_->IsPassword())
- return;
-
- OnCopy();
-
- // This replace selection will have no effect (even on the undo stack) if the
- // current selection is empty.
- ReplaceSel(L"", true);
-}
-
-void TextField::Edit::OnDestroy() {
- TRACK_HWND_DESTRUCTION(m_hWnd);
-}
-
-LRESULT TextField::Edit::OnImeChar(UINT message, WPARAM wparam, LPARAM lparam) {
- // http://crbug.com/7707: a rich-edit control may crash when it receives a
- // WM_IME_CHAR message while it is processing a WM_IME_COMPOSITION message.
- // Since view controls don't need WM_IME_CHAR messages, we prevent WM_IME_CHAR
- // messages from being dispatched to view controls via the CallWindowProc()
- // call.
- return 0;
-}
-
-LRESULT TextField::Edit::OnImeStartComposition(UINT message,
- WPARAM wparam,
- LPARAM lparam) {
- // Users may press alt+shift or control+shift keys to change their keyboard
- // layouts. So, we retrieve the input locale identifier everytime we start
- // an IME composition.
- int language_id = PRIMARYLANGID(GetKeyboardLayout(0));
- ime_discard_composition_ =
- language_id == LANG_JAPANESE || language_id == LANG_CHINESE;
- ime_composition_start_ = 0;
- ime_composition_length_ = 0;
-
- return DefWindowProc(message, wparam, lparam);
-}
-
-LRESULT TextField::Edit::OnImeComposition(UINT message,
- WPARAM wparam,
- LPARAM lparam) {
- text_before_change_.clear();
- LRESULT result = DefWindowProc(message, wparam, lparam);
-
- ime_composition_start_ = 0;
- ime_composition_length_ = 0;
- if (ime_discard_composition_) {
- // Call IMM32 functions to retrieve the position and the length of the
- // ongoing composition string and notify the OnAfterPossibleChange()
- // function that it should discard the composition string from a search
- // string. We should not call IMM32 functions in the function because it
- // is called when an IME is not composing a string.
- HIMC imm_context = ImmGetContext(m_hWnd);
- if (imm_context) {
- CHARRANGE selection;
- GetSel(selection);
- const int cursor_position =
- ImmGetCompositionString(imm_context, GCS_CURSORPOS, NULL, 0);
- if (cursor_position >= 0)
- ime_composition_start_ = selection.cpMin - cursor_position;
-
- const int composition_size =
- ImmGetCompositionString(imm_context, GCS_COMPSTR, NULL, 0);
- if (composition_size >= 0)
- ime_composition_length_ = composition_size / sizeof(wchar_t);
-
- ImmReleaseContext(m_hWnd, imm_context);
- }
- }
-
- OnAfterPossibleChange();
- return result;
-}
-
-void TextField::Edit::OnKeyDown(TCHAR key, UINT repeat_count, UINT flags) {
- // NOTE: Annoyingly, ctrl-alt-<key> generates WM_KEYDOWN rather than
- // WM_SYSKEYDOWN, so we need to check (flags & KF_ALTDOWN) in various places
- // in this function even with a WM_SYSKEYDOWN handler.
-
- switch (key) {
- case VK_RETURN:
- // If we are multi-line, we want to let returns through so they start a
- // new line.
- if (parent_->IsMultiLine())
- break;
- else
- return;
- // Hijacking Editing Commands
- //
- // We hijack the keyboard short-cuts for Cut, Copy, and Paste here so that
- // they go through our clipboard routines. This allows us to be smarter
- // about how we interact with the clipboard and avoid bugs in the
- // CRichEditCtrl. If we didn't hijack here, the edit control would handle
- // these internally with sending the WM_CUT, WM_COPY, or WM_PASTE messages.
- //
- // Cut: Shift-Delete and Ctrl-x are treated as cut. Ctrl-Shift-Delete and
- // Ctrl-Shift-x are not treated as cut even though the underlying
- // CRichTextEdit would treat them as such.
- // Copy: Ctrl-v is treated as copy. Shift-Ctrl-v is not.
- // Paste: Shift-Insert and Ctrl-v are tread as paste. Ctrl-Shift-Insert and
- // Ctrl-Shift-v are not.
- //
- // This behavior matches most, but not all Windows programs, and largely
- // conforms to what users expect.
-
- case VK_DELETE:
- case 'X':
- if ((flags & KF_ALTDOWN) ||
- (GetKeyState((key == 'X') ? VK_CONTROL : VK_SHIFT) >= 0))
- break;
- if (GetKeyState((key == 'X') ? VK_SHIFT : VK_CONTROL) >= 0) {
- ScopedFreeze freeze(this, GetTextObjectModel());
- OnBeforePossibleChange();
- Cut();
- OnAfterPossibleChange();
- }
- return;
-
- case 'C':
- if ((flags & KF_ALTDOWN) || (GetKeyState(VK_CONTROL) >= 0))
- break;
- if (GetKeyState(VK_SHIFT) >= 0)
- Copy();
- return;
-
- case VK_INSERT:
- case 'V':
- if ((flags & KF_ALTDOWN) ||
- (GetKeyState((key == 'V') ? VK_CONTROL : VK_SHIFT) >= 0))
- break;
- if (GetKeyState((key == 'V') ? VK_SHIFT : VK_CONTROL) >= 0) {
- ScopedFreeze freeze(this, GetTextObjectModel());
- OnBeforePossibleChange();
- Paste();
- OnAfterPossibleChange();
- }
- return;
-
- case 0xbb: // Ctrl-'='. Triggers subscripting, even in plain text mode.
- return;
-
- case VK_PROCESSKEY:
- // This key event is consumed by an IME.
- // We ignore this event because an IME sends WM_IME_COMPOSITION messages
- // when it updates the CRichEditCtrl text.
- return;
- }
-
- // CRichEditCtrl changes its text on WM_KEYDOWN instead of WM_CHAR for many
- // different keys (backspace, ctrl-v, ...), so we call this in both cases.
- HandleKeystroke(GetCurrentMessage()->message, key, repeat_count, flags);
-}
-
-void TextField::Edit::OnLButtonDblClk(UINT keys, const CPoint& point) {
- // Save the double click info for later triple-click detection.
- tracking_double_click_ = true;
- double_click_point_ = point;
- double_click_time_ = GetCurrentMessage()->time;
-
- ScopedFreeze freeze(this, GetTextObjectModel());
- OnBeforePossibleChange();
- DefWindowProc(WM_LBUTTONDBLCLK, keys,
- MAKELPARAM(ClipXCoordToVisibleText(point.x, false), point.y));
- OnAfterPossibleChange();
-}
-
-void TextField::Edit::OnLButtonDown(UINT keys, const CPoint& point) {
- // Check for triple click, then reset tracker. Should be safe to subtract
- // double_click_time_ from the current message's time even if the timer has
- // wrapped in between.
- const bool is_triple_click = tracking_double_click_ &&
- win_util::IsDoubleClick(double_click_point_, point,
- GetCurrentMessage()->time - double_click_time_);
- tracking_double_click_ = false;
-
- ScopedFreeze freeze(this, GetTextObjectModel());
- OnBeforePossibleChange();
- DefWindowProc(WM_LBUTTONDOWN, keys,
- MAKELPARAM(ClipXCoordToVisibleText(point.x, is_triple_click),
- point.y));
- OnAfterPossibleChange();
-}
-
-void TextField::Edit::OnLButtonUp(UINT keys, const CPoint& point) {
- ScopedFreeze freeze(this, GetTextObjectModel());
- OnBeforePossibleChange();
- DefWindowProc(WM_LBUTTONUP, keys,
- MAKELPARAM(ClipXCoordToVisibleText(point.x, false), point.y));
- OnAfterPossibleChange();
-}
-
-void TextField::Edit::OnMouseLeave() {
- SetContainsMouse(false);
-}
-
-LRESULT TextField::Edit::OnMouseWheel(UINT message,
- WPARAM w_param, LPARAM l_param) {
- // Reroute the mouse-wheel to the window under the mouse pointer if
- // applicable.
- if (views::RerouteMouseWheel(m_hWnd, w_param, l_param))
- return 0;
- return DefWindowProc(message, w_param, l_param);;
-}
-
-void TextField::Edit::OnMouseMove(UINT keys, const CPoint& point) {
- SetContainsMouse(true);
- // Clamp the selection to the visible text so the user can't drag to select
- // the "phantom newline". In theory we could achieve this by clipping the X
- // coordinate, but in practice the edit seems to behave nondeterministically
- // with similar sequences of clipped input coordinates fed to it. Maybe it's
- // reading the mouse cursor position directly?
- //
- // This solution has a minor visual flaw, however: if there's a visible
- // cursor at the edge of the text (only true when there's no selection),
- // dragging the mouse around outside that edge repaints the cursor on every
- // WM_MOUSEMOVE instead of allowing it to blink normally. To fix this, we
- // special-case this exact case and discard the WM_MOUSEMOVE messages instead
- // of passing them along.
- //
- // But even this solution has a flaw! (Argh.) In the case where the user
- // has a selection that starts at the edge of the edit, and proceeds to the
- // middle of the edit, and the user is dragging back past the start edge to
- // remove the selection, there's a redraw problem where the change between
- // having the last few bits of text still selected and having nothing
- // selected can be slow to repaint (which feels noticeably strange). This
- // occurs if you only let the edit receive a single WM_MOUSEMOVE past the
- // edge of the text. I think on each WM_MOUSEMOVE the edit is repainting its
- // previous state, then updating its internal variables to the new state but
- // not repainting. To fix this, we allow one more WM_MOUSEMOVE through after
- // the selection has supposedly been shrunk to nothing; this makes the edit
- // redraw the selection quickly so it feels smooth.
- CHARRANGE selection;
- GetSel(selection);
- const bool possibly_can_discard_mousemove =
- (selection.cpMin == selection.cpMax) &&
- (((selection.cpMin == 0) &&
- (ClipXCoordToVisibleText(point.x, false) > point.x)) ||
- ((selection.cpMin == GetTextLength()) &&
- (ClipXCoordToVisibleText(point.x, false) < point.x)));
- if (!can_discard_mousemove_ || !possibly_can_discard_mousemove) {
- can_discard_mousemove_ = possibly_can_discard_mousemove;
- ScopedFreeze freeze(this, GetTextObjectModel());
- OnBeforePossibleChange();
- // Force the Y coordinate to the center of the clip rect. The edit
- // behaves strangely when the cursor is dragged vertically: if the cursor
- // is in the middle of the text, drags inside the clip rect do nothing,
- // and drags outside the clip rect act as if the cursor jumped to the
- // left edge of the text. When the cursor is at the right edge, drags of
- // just a few pixels vertically end up selecting the "phantom newline"...
- // sometimes.
- RECT r;
- GetRect(&r);
- DefWindowProc(WM_MOUSEMOVE, keys,
- MAKELPARAM(point.x, (r.bottom - r.top) / 2));
- OnAfterPossibleChange();
- }
-}
-
-int TextField::Edit::OnNCCalcSize(BOOL w_param, LPARAM l_param) {
- content_insets_.Set(0, 0, 0, 0);
- parent_->CalculateInsets(&content_insets_);
- if (w_param) {
- NCCALCSIZE_PARAMS* nc_params =
- reinterpret_cast<NCCALCSIZE_PARAMS*>(l_param);
- nc_params->rgrc[0].left += content_insets_.left();
- nc_params->rgrc[0].right -= content_insets_.right();
- nc_params->rgrc[0].top += content_insets_.top();
- nc_params->rgrc[0].bottom -= content_insets_.bottom();
- } else {
- RECT* rect = reinterpret_cast<RECT*>(l_param);
- rect->left += content_insets_.left();
- rect->right -= content_insets_.right();
- rect->top += content_insets_.top();
- rect->bottom -= content_insets_.bottom();
- }
- return 0;
-}
-
-void TextField::Edit::OnNCPaint(HRGN region) {
- if (!draw_border_)
- return;
-
- HDC hdc = GetWindowDC();
-
- CRect window_rect;
- GetWindowRect(&window_rect);
- // Convert to be relative to 0x0.
- window_rect.MoveToXY(0, 0);
-
- ExcludeClipRect(hdc,
- window_rect.left + content_insets_.left(),
- window_rect.top + content_insets_.top(),
- window_rect.right - content_insets_.right(),
- window_rect.bottom - content_insets_.bottom());
-
- HBRUSH brush = CreateSolidBrush(bg_color_);
- FillRect(hdc, &window_rect, brush);
- DeleteObject(brush);
-
- int part;
- int state;
-
- if (win_util::GetWinVersion() < win_util::WINVERSION_VISTA) {
- part = EP_EDITTEXT;
-
- if (!parent_->IsEnabled())
- state = ETS_DISABLED;
- else if (parent_->IsReadOnly())
- state = ETS_READONLY;
- else if (!contains_mouse_)
- state = ETS_NORMAL;
- else
- state = ETS_HOT;
- } else {
- part = EP_EDITBORDER_HVSCROLL;
-
- if (!parent_->IsEnabled())
- state = EPSHV_DISABLED;
- else if (GetFocus() == m_hWnd)
- state = EPSHV_FOCUSED;
- else if (contains_mouse_)
- state = EPSHV_HOT;
- else
- state = EPSHV_NORMAL;
- // Vista doesn't appear to have a unique state for readonly.
- }
-
- int classic_state =
- (!parent_->IsEnabled() || parent_->IsReadOnly()) ? DFCS_INACTIVE : 0;
-
- NativeTheme::instance()->PaintTextField(hdc, part, state, classic_state,
- &window_rect, bg_color_, false,
- true);
-
- // NOTE: I tried checking the transparent property of the theme and invoking
- // drawParentBackground, but it didn't seem to make a difference.
-
- ReleaseDC(hdc);
-}
-
-void TextField::Edit::OnNonLButtonDown(UINT keys, const CPoint& point) {
- // Interestingly, the edit doesn't seem to cancel triple clicking when the
- // x-buttons (which usually means "thumb buttons") are pressed, so we only
- // call this for M and R down.
- tracking_double_click_ = false;
- SetMsgHandled(false);
-}
-
-void TextField::Edit::OnPaste() {
- if (parent_->IsReadOnly())
- return;
-
- Clipboard* clipboard = g_browser_process->clipboard();
-
- if (!clipboard->IsFormatAvailable(Clipboard::GetPlainTextWFormatType()))
- return;
-
- std::wstring clipboard_str;
- clipboard->ReadText(&clipboard_str);
- if (!clipboard_str.empty()) {
- std::wstring collapsed(CollapseWhitespace(clipboard_str, false));
- if (parent_->GetStyle() & STYLE_LOWERCASE)
- collapsed = l10n_util::ToLower(collapsed);
- // Force a Paste operation to trigger OnContentsChanged, even if identical
- // contents are pasted into the text box.
- text_before_change_.clear();
- ReplaceSel(collapsed.c_str(), true);
- }
-}
-
-void TextField::Edit::OnSysChar(TCHAR ch, UINT repeat_count, UINT flags) {
- // Nearly all alt-<xxx> combos result in beeping rather than doing something
- // useful, so we discard most. Exceptions:
- // * ctrl-alt-<xxx>, which is sometimes important, generates WM_CHAR instead
- // of WM_SYSCHAR, so it doesn't need to be handled here.
- // * alt-space gets translated by the default WM_SYSCHAR handler to a
- // WM_SYSCOMMAND to open the application context menu, so we need to allow
- // it through.
- if (ch == VK_SPACE)
- SetMsgHandled(false);
-}
-
-void TextField::Edit::HandleKeystroke(UINT message,
- TCHAR key,
- UINT repeat_count,
- UINT flags) {
- ScopedFreeze freeze(this, GetTextObjectModel());
-
- TextField::Controller* controller = parent_->GetController();
- bool handled = false;
- if (controller) {
- handled =
- controller->HandleKeystroke(parent_, message, key, repeat_count, flags);
- }
-
- if (!handled) {
- OnBeforePossibleChange();
- DefWindowProc(message, key, MAKELPARAM(repeat_count, flags));
- OnAfterPossibleChange();
- }
-}
-
-void TextField::Edit::OnBeforePossibleChange() {
- // Record our state.
- text_before_change_ = GetText();
-}
-
-void TextField::Edit::OnAfterPossibleChange() {
- // Prevent the user from selecting the "phantom newline" at the end of the
- // edit. If they try, we just silently move the end of the selection back to
- // the end of the real text.
- CHARRANGE new_sel;
- GetSel(new_sel);
- const int length = GetTextLength();
- if (new_sel.cpMax > length) {
- new_sel.cpMax = length;
- if (new_sel.cpMin > length)
- new_sel.cpMin = length;
- SetSel(new_sel);
- }
-
- std::wstring new_text(GetText());
- if (new_text != text_before_change_) {
- if (ime_discard_composition_ && ime_composition_start_ >= 0 &&
- ime_composition_length_ > 0) {
- // A string retrieved with a GetText() call contains a string being
- // composed by an IME. We remove the composition string from this search
- // string.
- new_text.erase(ime_composition_start_, ime_composition_length_);
- ime_composition_start_ = 0;
- ime_composition_length_ = 0;
- if (new_text.empty())
- return;
- }
- parent_->SyncText();
- if (parent_->GetController())
- parent_->GetController()->ContentsChanged(parent_, new_text);
- }
-}
-
-LONG TextField::Edit::ClipXCoordToVisibleText(LONG x,
- bool is_triple_click) const {
- // Clip the X coordinate to the left edge of the text. Careful:
- // PosFromChar(0) may return a negative X coordinate if the beginning of the
- // text has scrolled off the edit, so don't go past the clip rect's edge.
- PARAFORMAT2 pf2;
- GetParaFormat(pf2);
- // Calculation of the clipped coordinate is more complicated if the paragraph
- // layout is RTL layout, or if there is RTL characters inside the LTR layout
- // paragraph.
- bool ltr_text_in_ltr_layout = true;
- if ((pf2.wEffects & PFE_RTLPARA) ||
- l10n_util::StringContainsStrongRTLChars(GetText())) {
- ltr_text_in_ltr_layout = false;
- }
- const int length = GetTextLength();
- RECT r;
- GetRect(&r);
- // The values returned by PosFromChar() seem to refer always
- // to the left edge of the character's bounding box.
- const LONG first_position_x = PosFromChar(0).x;
- LONG min_x = first_position_x;
- if (!ltr_text_in_ltr_layout) {
- for (int i = 1; i < length; ++i)
- min_x = std::min(min_x, PosFromChar(i).x);
- }
- const LONG left_bound = std::max(r.left, min_x);
-
- // PosFromChar(length) is a phantom character past the end of the text. It is
- // not necessarily a right bound; in RTL controls it may be a left bound. So
- // treat it as a right bound only if it is to the right of the first
- // character.
- LONG right_bound = r.right;
- LONG end_position_x = PosFromChar(length).x;
- if (end_position_x >= first_position_x) {
- right_bound = std::min(right_bound, end_position_x); // LTR case.
- }
- // For trailing characters that are 2 pixels wide of less (like "l" in some
- // fonts), we have a problem:
- // * Clicks on any pixel within the character will place the cursor before
- // the character.
- // * Clicks on the pixel just after the character will not allow triple-
- // click to work properly (true for any last character width).
- // So, we move to the last pixel of the character when this is a
- // triple-click, and moving to one past the last pixel in all other
- // scenarios. This way, all clicks that can move the cursor will place it at
- // the end of the text, but triple-click will still work.
- if (x < left_bound) {
- return (is_triple_click && ltr_text_in_ltr_layout) ? left_bound - 1 :
- left_bound;
- }
- if ((length == 0) || (x < right_bound))
- return x;
- return is_triple_click ? (right_bound - 1) : right_bound;
-}
-
-void TextField::Edit::SetContainsMouse(bool contains_mouse) {
- if (contains_mouse == contains_mouse_)
- return;
-
- contains_mouse_ = contains_mouse;
-
- if (!draw_border_)
- return;
-
- if (contains_mouse_) {
- // Register for notification when the mouse leaves. Need to do this so
- // that we can reset contains mouse properly.
- TRACKMOUSEEVENT tme;
- tme.cbSize = sizeof(tme);
- tme.dwFlags = TME_LEAVE;
- tme.hwndTrack = m_hWnd;
- tme.dwHoverTime = 0;
- TrackMouseEvent(&tme);
- }
- RedrawWindow(NULL, NULL, RDW_INVALIDATE | RDW_FRAME);
-}
-
-ITextDocument* TextField::Edit::GetTextObjectModel() const {
- if (!text_object_model_) {
- CComPtr<IRichEditOle> ole_interface;
- ole_interface.Attach(GetOleInterface());
- text_object_model_ = ole_interface;
- }
- return text_object_model_;
-}
-
-/////////////////////////////////////////////////////////////////////////////
-// TextField
-
-TextField::~TextField() {
- if (edit_) {
- // If the edit hwnd still exists, we need to destroy it explicitly.
- if (*edit_)
- edit_->DestroyWindow();
- delete edit_;
- }
-}
-
-void TextField::ViewHierarchyChanged(bool is_add, View* parent, View* child) {
- Widget* widget;
-
- if (is_add && (widget = GetWidget())) {
- // This notification is called from the AddChildView call below. Ignore it.
- if (native_view_ && !edit_)
- return;
-
- if (!native_view_) {
- native_view_ = new HWNDView(); // Deleted from our superclass destructor
- AddChildView(native_view_);
-
- // Maps the focus of the native control to the focus of this view.
- native_view_->SetAssociatedFocusView(this);
- }
-
- // If edit_ is invalid from a previous use. Reset it.
- if (edit_ && !IsWindow(edit_->m_hWnd)) {
- native_view_->Detach();
- delete edit_;
- edit_ = NULL;
- }
-
- if (!edit_) {
- edit_ = new Edit(this, draw_border_);
- edit_->SetFont(font_.hfont());
- native_view_->Attach(*edit_);
- if (!text_.empty())
- edit_->SetText(text_);
- UpdateEditBackgroundColor();
- Layout();
- }
- } else if (!is_add && edit_ && IsWindow(edit_->m_hWnd)) {
- edit_->SetParent(NULL);
- }
-}
-
-void TextField::Layout() {
- if (native_view_) {
- native_view_->SetBounds(GetLocalBounds(true));
- native_view_->Layout();
- }
-}
-
-gfx::Size TextField::GetPreferredSize() {
- gfx::Insets insets;
- CalculateInsets(&insets);
- return gfx::Size(font_.GetExpectedTextWidth(default_width_in_chars_) +
- insets.width(),
- num_lines_ * font_.height() + insets.height());
-}
-
-std::wstring TextField::GetText() const {
- return text_;
-}
-
-void TextField::SetText(const std::wstring& text) {
- text_ = text;
- if (edit_)
- edit_->SetText(text);
-}
-
-void TextField::AppendText(const std::wstring& text) {
- text_ += text;
- if (edit_)
- edit_->AppendText(text);
-}
-
-void TextField::CalculateInsets(gfx::Insets* insets) {
- DCHECK(insets);
-
- if (!draw_border_)
- return;
-
- // NOTE: One would think GetThemeMargins would return the insets we should
- // use, but it doesn't. The margins returned by GetThemeMargins are always
- // 0.
-
- // This appears to be the insets used by Windows.
- insets->Set(3, 3, 3, 3);
-}
-
-void TextField::SyncText() {
- if (edit_)
- text_ = edit_->GetText();
-}
-
-void TextField::SetController(Controller* controller) {
- controller_ = controller;
-}
-
-TextField::Controller* TextField::GetController() const {
- return controller_;
-}
-
-bool TextField::IsReadOnly() const {
- return edit_ ? ((edit_->GetStyle() & ES_READONLY) != 0) : read_only_;
-}
-
-bool TextField::IsPassword() const {
- return GetStyle() & TextField::STYLE_PASSWORD;
-}
-
-bool TextField::IsMultiLine() const {
- return (style_ & STYLE_MULTILINE) != 0;
-}
-
-void TextField::SetReadOnly(bool read_only) {
- read_only_ = read_only;
- if (edit_) {
- edit_->SetReadOnly(read_only);
- UpdateEditBackgroundColor();
- }
-}
-
-void TextField::Focus() {
- ::SetFocus(native_view_->GetHWND());
-}
-
-void TextField::SelectAll() {
- if (edit_)
- edit_->SelectAll();
-}
-
-void TextField::ClearSelection() const {
- if (edit_)
- edit_->ClearSelection();
-}
-
-HWND TextField::GetNativeComponent() {
- return native_view_->GetHWND();
-}
-
-void TextField::SetBackgroundColor(SkColor color) {
- background_color_ = color;
- use_default_background_color_ = false;
- UpdateEditBackgroundColor();
-}
-
-void TextField::SetDefaultBackgroundColor() {
- use_default_background_color_ = true;
- UpdateEditBackgroundColor();
-}
-
-void TextField::SetFont(const ChromeFont& font) {
- font_ = font;
- if (edit_)
- edit_->SetFont(font.hfont());
-}
-
-ChromeFont TextField::GetFont() const {
- return font_;
-}
-
-bool TextField::SetHorizontalMargins(int left, int right) {
- // SendMessage expects the two values to be packed into one using MAKELONG
- // so we truncate to 16 bits if necessary.
- return ERROR_SUCCESS == SendMessage(GetNativeComponent(),
- (UINT) EM_SETMARGINS,
- (WPARAM) EC_LEFTMARGIN | EC_RIGHTMARGIN,
- (LPARAM) MAKELONG(left & 0xFFFF,
- right & 0xFFFF));
-}
-
-void TextField::SetHeightInLines(int num_lines) {
- DCHECK(IsMultiLine());
- num_lines_ = num_lines;
-}
-
-void TextField::RemoveBorder() {
- if (!draw_border_)
- return;
-
- draw_border_ = false;
- if (edit_)
- edit_->RemoveBorder();
-}
-
-void TextField::SetEnabled(bool enabled) {
- View::SetEnabled(enabled);
- edit_->SetEnabled(enabled);
-}
-
-bool TextField::IsFocusable() const {
- return IsEnabled() && !IsReadOnly();
-}
-
-void TextField::AboutToRequestFocusFromTabTraversal(bool reverse) {
- SelectAll();
-}
-
-bool TextField::ShouldLookupAccelerators(const KeyEvent& e) {
- // TODO(hamaji): Figure out which keyboard combinations we need to add here,
- // similar to LocationBarView::ShouldLookupAccelerators.
- if (e.GetCharacter() == VK_BACK)
- return false; // We'll handle BackSpace ourselves.
-
- // We don't translate accelerators for ALT + NumPad digit, they are used for
- // entering special characters.
- if (!e.IsAltDown())
- return true;
-
- return !win_util::IsNumPadDigit(e.GetCharacter(), e.IsExtendedKey());
-}
-
-void TextField::UpdateEditBackgroundColor() {
- if (!edit_)
- return;
-
- COLORREF bg_color;
- if (!use_default_background_color_)
- bg_color = skia::SkColorToCOLORREF(background_color_);
- else
- bg_color = GetSysColor(read_only_ ? COLOR_3DFACE : COLOR_WINDOW);
- edit_->SetBackgroundColor(bg_color);
-}
-
-} // namespace views
diff --git a/chrome/views/controls/text_field.h b/chrome/views/controls/text_field.h
deleted file mode 100644
index 6de2218..0000000
--- a/chrome/views/controls/text_field.h
+++ /dev/null
@@ -1,208 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// These classes define a text field widget that can be used in the views UI
-// toolkit.
-
-#ifndef CHROME_VIEWS_CONTROLS_TEXT_FIELD_H_
-#define CHROME_VIEWS_CONTROLS_TEXT_FIELD_H_
-
-#include <string>
-
-#include "app/gfx/chrome_font.h"
-#include "base/basictypes.h"
-#include "chrome/views/view.h"
-#include "skia/include/SkColor.h"
-
-namespace views {
-
-class HWNDView;
-
-// This class implements a ChromeView that wraps a native text (edit) field.
-class TextField : public View {
- public:
- // This defines the callback interface for other code to be notified of
- // changes in the state of a text field.
- class Controller {
- public:
- // This method is called whenever the text in the field changes.
- virtual void ContentsChanged(TextField* sender,
- const std::wstring& new_contents) = 0;
-
- // This method is called to get notified about keystrokes in the edit.
- // This method returns true if the message was handled and should not be
- // processed further. If it returns false the processing continues.
- virtual bool HandleKeystroke(TextField* sender,
- UINT message, TCHAR key, UINT repeat_count,
- UINT flags) = 0;
- };
-
- enum StyleFlags {
- STYLE_DEFAULT = 0,
- STYLE_PASSWORD = 1<<0,
- STYLE_MULTILINE = 1<<1,
- STYLE_LOWERCASE = 1<<2
- };
-
- TextField::TextField()
- : native_view_(NULL),
- edit_(NULL),
- controller_(NULL),
- style_(STYLE_DEFAULT),
- read_only_(false),
- default_width_in_chars_(0),
- draw_border_(true),
- use_default_background_color_(true),
- num_lines_(1) {
- SetFocusable(true);
- }
- explicit TextField::TextField(StyleFlags style)
- : native_view_(NULL),
- edit_(NULL),
- controller_(NULL),
- style_(style),
- read_only_(false),
- default_width_in_chars_(0),
- draw_border_(true),
- use_default_background_color_(true),
- num_lines_(1) {
- SetFocusable(true);
- }
- virtual ~TextField();
-
- void ViewHierarchyChanged(bool is_add, View* parent, View* child);
-
- // Overridden for layout purposes
- virtual void Layout();
- virtual gfx::Size GetPreferredSize();
-
- // Controller accessors
- void SetController(Controller* controller);
- Controller* GetController() const;
-
- void SetReadOnly(bool read_only);
- bool IsReadOnly() const;
-
- bool IsPassword() const;
-
- // Whether the text field is multi-line or not, must be set when the text
- // field is created, using StyleFlags.
- bool IsMultiLine() const;
-
- virtual bool IsFocusable() const;
- virtual void AboutToRequestFocusFromTabTraversal(bool reverse);
-
- // Overridden from Chrome::View.
- virtual bool ShouldLookupAccelerators(const KeyEvent& e);
-
- virtual HWND GetNativeComponent();
-
- // Returns the text currently displayed in the text field.
- std::wstring GetText() const;
-
- // Sets the text currently displayed in the text field.
- void SetText(const std::wstring& text);
-
- // Appends the given string to the previously-existing text in the field.
- void AppendText(const std::wstring& text);
-
- virtual void Focus();
-
- // Causes the edit field to be fully selected.
- void SelectAll();
-
- // Clears the selection within the edit field and sets the caret to the end.
- void ClearSelection() const;
-
- StyleFlags GetStyle() const { return style_; }
-
- void SetBackgroundColor(SkColor color);
- void SetDefaultBackgroundColor();
-
- // Set the font.
- void SetFont(const ChromeFont& font);
-
- // Return the font used by this TextField.
- ChromeFont GetFont() const;
-
- // Sets the left and right margin (in pixels) within the text box. On Windows
- // this is accomplished by packing the left and right margin into a single
- // 32 bit number, so the left and right margins are effectively 16 bits.
- bool SetHorizontalMargins(int left, int right);
-
- // Should only be called on a multi-line text field. Sets how many lines of
- // text can be displayed at once by this text field.
- void SetHeightInLines(int num_lines);
-
- // Sets the default width of the text control. See default_width_in_chars_.
- void set_default_width_in_chars(int default_width) {
- default_width_in_chars_ = default_width;
- }
-
- // Removes the border from the edit box, giving it a 2D look.
- void RemoveBorder();
-
- // Disable the edit control.
- // NOTE: this does NOT change the read only property.
- void SetEnabled(bool enabled);
-
- private:
- class Edit;
-
- // Invoked by the edit control when the value changes. This method set
- // the text_ member variable to the value contained in edit control.
- // This is important because the edit control can be replaced if it has
- // been deleted during a window close.
- void SyncText();
-
- // Reset the text field native control.
- void ResetNativeControl();
-
- // Resets the background color of the edit.
- void UpdateEditBackgroundColor();
-
- // This encapsulates the HWND of the native text field.
- HWNDView* native_view_;
-
- // This inherits from the native text field.
- Edit* edit_;
-
- // This is the current listener for events from this control.
- Controller* controller_;
-
- StyleFlags style_;
-
- ChromeFont font_;
-
- // NOTE: this is temporary until we rewrite TextField to always work whether
- // there is an HWND or not.
- // Used if the HWND hasn't been created yet.
- std::wstring text_;
-
- bool read_only_;
-
- // The default number of average characters for the width of this text field.
- // This will be reported as the "desired size". Defaults to 0.
- int default_width_in_chars_;
-
- // Whether the border is drawn.
- bool draw_border_;
-
- SkColor background_color_;
-
- bool use_default_background_color_;
-
- // The number of lines of text this textfield displays at once.
- int num_lines_;
-
- protected:
- // Calculates the insets for the text field.
- void CalculateInsets(gfx::Insets* insets);
-
- DISALLOW_COPY_AND_ASSIGN(TextField);
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_CONTROLS_TEXT_FIELD_H_
diff --git a/chrome/views/controls/throbber.cc b/chrome/views/controls/throbber.cc
deleted file mode 100644
index 64d18e5..0000000
--- a/chrome/views/controls/throbber.cc
+++ /dev/null
@@ -1,170 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/controls/throbber.h"
-
-#include "app/gfx/chrome_canvas.h"
-#include "app/resource_bundle.h"
-#include "base/time.h"
-#include "grit/theme_resources.h"
-#include "skia/include/SkBitmap.h"
-
-using base::Time;
-using base::TimeDelta;
-
-namespace views {
-
-Throbber::Throbber(int frame_time_ms,
- bool paint_while_stopped)
- : running_(false),
- paint_while_stopped_(paint_while_stopped),
- frames_(NULL),
- frame_time_(TimeDelta::FromMilliseconds(frame_time_ms)) {
- ResourceBundle &rb = ResourceBundle::GetSharedInstance();
- frames_ = rb.GetBitmapNamed(IDR_THROBBER);
- DCHECK(frames_->width() > 0 && frames_->height() > 0);
- DCHECK(frames_->width() % frames_->height() == 0);
- frame_count_ = frames_->width() / frames_->height();
-}
-
-Throbber::~Throbber() {
- Stop();
-}
-
-void Throbber::Start() {
- if (running_)
- return;
-
- start_time_ = Time::Now();
-
- timer_.Start(frame_time_ - TimeDelta::FromMilliseconds(10),
- this, &Throbber::Run);
-
- running_ = true;
-
- SchedulePaint(); // paint right away
-}
-
-void Throbber::Stop() {
- if (!running_)
- return;
-
- timer_.Stop();
-
- running_ = false;
- SchedulePaint(); // Important if we're not painting while stopped
-}
-
-void Throbber::Run() {
- DCHECK(running_);
-
- SchedulePaint();
-}
-
-gfx::Size Throbber::GetPreferredSize() {
- return gfx::Size(frames_->height(), frames_->height());
-}
-
-void Throbber::Paint(ChromeCanvas* canvas) {
- if (!running_ && !paint_while_stopped_)
- return;
-
- const TimeDelta elapsed_time = Time::Now() - start_time_;
- const int current_frame =
- static_cast<int>(elapsed_time / frame_time_) % frame_count_;
-
- int image_size = frames_->height();
- int image_offset = current_frame * image_size;
- canvas->DrawBitmapInt(*frames_,
- image_offset, 0, image_size, image_size,
- 0, 0, image_size, image_size,
- false);
-}
-
-
-
-// Smoothed throbber ---------------------------------------------------------
-
-
-// Delay after work starts before starting throbber, in milliseconds.
-static const int kStartDelay = 200;
-
-// Delay after work stops before stopping, in milliseconds.
-static const int kStopDelay = 50;
-
-
-SmoothedThrobber::SmoothedThrobber(int frame_time_ms)
- : Throbber(frame_time_ms, /* paint_while_stopped= */ false) {
-}
-
-void SmoothedThrobber::Start() {
- stop_timer_.Stop();
-
- if (!running_ && !start_timer_.IsRunning()) {
- start_timer_.Start(TimeDelta::FromMilliseconds(kStartDelay), this,
- &SmoothedThrobber::StartDelayOver);
- }
-}
-
-void SmoothedThrobber::StartDelayOver() {
- Throbber::Start();
-}
-
-void SmoothedThrobber::Stop() {
- if (!running_)
- start_timer_.Stop();
-
- stop_timer_.Stop();
- stop_timer_.Start(TimeDelta::FromMilliseconds(kStopDelay), this,
- &SmoothedThrobber::StopDelayOver);
-}
-
-void SmoothedThrobber::StopDelayOver() {
- Throbber::Stop();
-}
-
-// Checkmark throbber ---------------------------------------------------------
-
-CheckmarkThrobber::CheckmarkThrobber()
- : Throbber(kFrameTimeMs, false),
- checked_(false) {
- InitClass();
-}
-
-void CheckmarkThrobber::SetChecked(bool checked) {
- bool changed = checked != checked_;
- if (changed) {
- checked_ = checked;
- SchedulePaint();
- }
-}
-
-void CheckmarkThrobber::Paint(ChromeCanvas* canvas) {
- if (running_) {
- // Let the throbber throb...
- Throbber::Paint(canvas);
- return;
- }
- // Otherwise we paint our tick mark or nothing depending on our state.
- if (checked_) {
- int checkmark_x = (width() - checkmark_->width()) / 2;
- int checkmark_y = (height() - checkmark_->height()) / 2;
- canvas->DrawBitmapInt(*checkmark_, checkmark_x, checkmark_y);
- }
-}
-
-// static
-void CheckmarkThrobber::InitClass() {
- static bool initialized = false;
- if (!initialized) {
- ResourceBundle& rb = ResourceBundle::GetSharedInstance();
- checkmark_ = rb.GetBitmapNamed(IDR_INPUT_GOOD);
- initialized = true;
- }
-}
-
-// static
-SkBitmap* CheckmarkThrobber::checkmark_ = NULL;
-
-} // namespace views
diff --git a/chrome/views/controls/throbber.h b/chrome/views/controls/throbber.h
deleted file mode 100644
index b356466..0000000
--- a/chrome/views/controls/throbber.h
+++ /dev/null
@@ -1,111 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Throbbers display an animation, usually used as a status indicator.
-
-#ifndef CHROME_VIEWS_CONTROLS_THROBBER_H_
-#define CHROME_VIEWS_CONTROLS_THROBBER_H_
-
-#include "base/basictypes.h"
-#include "base/time.h"
-#include "base/timer.h"
-#include "chrome/views/view.h"
-
-class SkBitmap;
-
-namespace views {
-
-class Throbber : public View {
- public:
- // |frame_time_ms| is the amount of time that should elapse between frames
- // (in milliseconds)
- // If |paint_while_stopped| is false, this view will be invisible when not
- // running.
- Throbber(int frame_time_ms, bool paint_while_stopped);
- virtual ~Throbber();
-
- // Start and stop the throbber animation
- virtual void Start();
- virtual void Stop();
-
- // overridden from View
- virtual gfx::Size GetPreferredSize();
- virtual void Paint(ChromeCanvas* canvas);
-
- protected:
- // Specifies whether the throbber is currently animating or not
- bool running_;
-
- private:
- void Run();
-
- bool paint_while_stopped_;
- int frame_count_; // How many frames we have.
- base::Time start_time_; // Time when Start was called.
- SkBitmap* frames_; // Frames bitmaps.
- base::TimeDelta frame_time_; // How long one frame is displayed.
- base::RepeatingTimer<Throbber> timer_; // Used to schedule Run calls.
-
- DISALLOW_COPY_AND_ASSIGN(Throbber);
-};
-
-// A SmoothedThrobber is a throbber that is representing potentially short
-// and nonoverlapping bursts of work. SmoothedThrobber ignores small
-// pauses in the work stops and starts, and only starts its throbber after
-// a small amount of work time has passed.
-class SmoothedThrobber : public Throbber {
- public:
- SmoothedThrobber(int frame_delay_ms);
-
- virtual void Start();
- virtual void Stop();
-
- private:
- // Called when the startup-delay timer fires
- // This function starts the actual throbbing.
- void StartDelayOver();
-
- // Called when the shutdown-delay timer fires.
- // This function stops the actual throbbing.
- void StopDelayOver();
-
- base::OneShotTimer<SmoothedThrobber> start_timer_;
- base::OneShotTimer<SmoothedThrobber> stop_timer_;
-
- DISALLOW_COPY_AND_ASSIGN(SmoothedThrobber);
-};
-
-// A CheckmarkThrobber is a special variant of throbber that has three states:
-// 1. not yet completed (which paints nothing)
-// 2. working (which paints the throbber animation)
-// 3. completed (which paints a checkmark)
-//
-class CheckmarkThrobber : public Throbber {
- public:
- CheckmarkThrobber();
-
- // If checked is true, the throbber stops spinning and displays a checkmark.
- // If checked is false, the throbber stops spinning and displays nothing.
- void SetChecked(bool checked);
-
- // Overridden from Throbber:
- virtual void Paint(ChromeCanvas* canvas);
-
- private:
- static const int kFrameTimeMs = 30;
-
- static void InitClass();
-
- // Whether or not we should display a checkmark.
- bool checked_;
-
- // The checkmark image.
- static SkBitmap* checkmark_;
-
- DISALLOW_COPY_AND_ASSIGN(CheckmarkThrobber);
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_CONTROLS_THROBBER_H_
diff --git a/chrome/views/controls/tree/tree_model.h b/chrome/views/controls/tree/tree_model.h
deleted file mode 100644
index 8c54b75..0000000
--- a/chrome/views/controls/tree/tree_model.h
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright (c) 2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_CONTROLS_TREE_TREE_MODEL_H_
-#define CHROME_VIEWS_CONTROLS_TREE_TREE_MODEL_H_
-
-#include <string>
-
-#include "base/logging.h"
-
-class SkBitmap;
-
-namespace views {
-
-class TreeModel;
-
-// TreeModelNode --------------------------------------------------------------
-
-// Type of class returned from the model.
-class TreeModelNode {
- public:
- // Returns the title for the node.
- virtual std::wstring GetTitle() = 0;
-};
-
-// Observer for the TreeModel. Notified of significant events to the model.
-class TreeModelObserver {
- public:
- // Notification that nodes were added to the specified parent.
- virtual void TreeNodesAdded(TreeModel* model,
- TreeModelNode* parent,
- int start,
- int count) = 0;
-
- // Notification that nodes were removed from the specified parent.
- virtual void TreeNodesRemoved(TreeModel* model,
- TreeModelNode* parent,
- int start,
- int count) = 0;
-
- // Notification the children of |parent| have been reordered. Note, only
- // the direct children of |parent| have been reordered, not descendants.
- virtual void TreeNodeChildrenReordered(TreeModel* model,
- TreeModelNode* parent) = 0;
-
- // Notification that the contents of a node has changed.
- virtual void TreeNodeChanged(TreeModel* model, TreeModelNode* node) = 0;
-};
-
-// TreeModel ------------------------------------------------------------------
-
-// The model for TreeView.
-class TreeModel {
- public:
- // Returns the root of the tree. This may or may not be shown in the tree,
- // see SetRootShown for details.
- virtual TreeModelNode* GetRoot() = 0;
-
- // Returns the number of children in the specified node.
- virtual int GetChildCount(TreeModelNode* parent) = 0;
-
- // Returns the child node at the specified index.
- virtual TreeModelNode* GetChild(TreeModelNode* parent, int index) = 0;
-
- // Returns the parent of a node, or NULL if node is the root.
- virtual TreeModelNode* GetParent(TreeModelNode* node) = 0;
-
- // Sets the observer of the model.
- virtual void SetObserver(TreeModelObserver* observer) = 0;
-
- // Sets the title of the specified node.
- // This is only invoked if the node is editable and the user edits a node.
- virtual void SetTitle(TreeModelNode* node,
- const std::wstring& title) {
- NOTREACHED();
- }
-
- // Returns the set of icons for the nodes in the tree. You only need override
- // this if you don't want to use the default folder icons.
- virtual void GetIcons(std::vector<SkBitmap>* icons) {}
-
- // Returns the index of the icon to use for |node|. Return -1 to use the
- // default icon. The index is relative to the list of icons returned from
- // GetIcons.
- virtual int GetIconIndex(TreeModelNode* node) { return -1; }
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_CONTROLS_TREE_TREE_MODEL_H_
diff --git a/chrome/views/controls/tree/tree_node_iterator.h b/chrome/views/controls/tree/tree_node_iterator.h
deleted file mode 100644
index fa28b3e..0000000
--- a/chrome/views/controls/tree/tree_node_iterator.h
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_CONTROLS_TREE_TREE_NODE_ITERATOR_H_
-#define CHROME_VIEWS_CONTROLS_TREE_TREE_NODE_ITERATOR_H_
-
-#include <stack>
-
-#include "base/basictypes.h"
-#include "base/logging.h"
-
-namespace views {
-
-// Iterator that iterates over the descendants of a node. The iteration does
-// not include the node itself, only the descendants. The following illustrates
-// typical usage:
-// while (iterator.has_next()) {
-// Node* node = iterator.Next();
-// // do something with node.
-// }
-template <class NodeType>
-class TreeNodeIterator {
- public:
- explicit TreeNodeIterator(NodeType* node) {
- if (node->GetChildCount() > 0)
- positions_.push(Position<NodeType>(node, 0));
- }
-
- // Returns true if there are more descendants.
- bool has_next() const { return !positions_.empty(); }
-
- // Returns the next descendant.
- NodeType* Next() {
- if (!has_next()) {
- NOTREACHED();
- return NULL;
- }
-
- NodeType* result = positions_.top().node->GetChild(positions_.top().index);
-
- // Make sure we don't attempt to visit result again.
- positions_.top().index++;
-
- // Iterate over result's children.
- positions_.push(Position<NodeType>(result, 0));
-
- // Advance to next position.
- while (!positions_.empty() && positions_.top().index >=
- positions_.top().node->GetChildCount()) {
- positions_.pop();
- }
-
- return result;
- }
-
- private:
- template <class PositionNodeType>
- struct Position {
- Position(PositionNodeType* node, int index) : node(node), index(index) {}
- Position() : node(NULL), index(-1) {}
-
- PositionNodeType* node;
- int index;
- };
-
- std::stack<Position<NodeType> > positions_;
-
- DISALLOW_COPY_AND_ASSIGN(TreeNodeIterator);
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_CONTROLS_TREE_TREE_NODE_ITERATOR_H_
diff --git a/chrome/views/controls/tree/tree_node_iterator_unittest.cc b/chrome/views/controls/tree/tree_node_iterator_unittest.cc
deleted file mode 100644
index 3aec1af..0000000
--- a/chrome/views/controls/tree/tree_node_iterator_unittest.cc
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "testing/gtest/include/gtest/gtest.h"
-
-#include "chrome/views/controls/tree/tree_node_iterator.h"
-#include "chrome/views/controls/tree/tree_node_model.h"
-
-typedef testing::Test TreeNodeIteratorTest;
-
-using views::TreeNodeWithValue;
-
-TEST_F(TreeNodeIteratorTest, Test) {
- TreeNodeWithValue<int> root;
- root.Add(0, new TreeNodeWithValue<int>(1));
- root.Add(1, new TreeNodeWithValue<int>(2));
- TreeNodeWithValue<int>* f3 = new TreeNodeWithValue<int>(3);
- root.Add(2, f3);
- TreeNodeWithValue<int>* f4 = new TreeNodeWithValue<int>(4);
- f3->Add(0, f4);
- f4->Add(0, new TreeNodeWithValue<int>(5));
-
- views::TreeNodeIterator<TreeNodeWithValue<int> > iterator(&root);
- ASSERT_TRUE(iterator.has_next());
- ASSERT_EQ(root.GetChild(0), iterator.Next());
-
- ASSERT_TRUE(iterator.has_next());
- ASSERT_EQ(root.GetChild(1), iterator.Next());
-
- ASSERT_TRUE(iterator.has_next());
- ASSERT_EQ(root.GetChild(2), iterator.Next());
-
- ASSERT_TRUE(iterator.has_next());
- ASSERT_EQ(f4, iterator.Next());
-
- ASSERT_TRUE(iterator.has_next());
- ASSERT_EQ(f4->GetChild(0), iterator.Next());
-
- ASSERT_FALSE(iterator.has_next());
-}
diff --git a/chrome/views/controls/tree/tree_node_model.h b/chrome/views/controls/tree/tree_node_model.h
deleted file mode 100644
index 14e5748..0000000
--- a/chrome/views/controls/tree/tree_node_model.h
+++ /dev/null
@@ -1,283 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_CONTROLS_TREE_TREE_NODE_MODEL_H_
-#define CHROME_VIEWS_CONTROLS_TREE_TREE_NODE_MODEL_H_
-
-#include <algorithm>
-#include <vector>
-
-#include "base/basictypes.h"
-#include "base/scoped_ptr.h"
-#include "base/scoped_vector.h"
-#include "base/stl_util-inl.h"
-#include "chrome/views/controls/tree/tree_model.h"
-
-namespace views {
-
-// TreeNodeModel and TreeNodes provide an implementation of TreeModel around
-// TreeNodes. TreeNodes form a directed acyclic graph.
-//
-// TreeNodes own their children, so that deleting a node deletes all
-// descendants.
-//
-// TreeNodes do NOT maintain a pointer back to the model. As such, if you
-// are using TreeNodes with a TreeNodeModel you will need to notify the observer
-// yourself any time you make any change directly to the TreeNodes. For example,
-// if you directly invoke SetTitle on a node it does not notify the
-// observer, you will need to do it yourself. This includes the following
-// methods: SetTitle, Remove and Add. TreeNodeModel provides cover
-// methods that mutate the TreeNodes and notify the observer. If you are using
-// TreeNodes with a TreeNodeModel use the cover methods to save yourself the
-// headache.
-//
-// The following example creates a TreeNode with two children and then
-// creates a TreeNodeModel from it:
-//
-// TreeNodeWithValue<int> root = new TreeNodeWithValue<int>(0, L"root");
-// root.add(new TreeNodeWithValue<int>(1, L"child 1"));
-// root.add(new TreeNodeWithValue<int>(1, L"child 2"));
-// TreeNodeModel<TreeNodeWithValue<int>>* model =
-// new TreeNodeModel<TreeNodeWithValue<int>>(root);
-//
-// Two variants of TreeNode are provided here:
-//
-// . TreeNode itself is intended for subclassing. It has one type parameter
-// that corresponds to the type of the node. When subclassing use your class
-// name as the type parameter, eg:
-// class MyTreeNode : public TreeNode<MyTreeNode> .
-// . TreeNodeWithValue is a trivial subclass of TreeNode that has one type
-// type parameter: a value type that is associated with the node.
-//
-// Which you use depends upon the situation. If you want to subclass and add
-// methods, then use TreeNode. If you don't need any extra methods and just
-// want to associate a value with each node, then use TreeNodeWithValue.
-//
-// Regardless of which TreeNode you use, if you are using the nodes with a
-// TreeView take care to notify the observer when mutating the nodes.
-
-template <class NodeType>
-class TreeNodeModel;
-
-// TreeNode -------------------------------------------------------------------
-
-template <class NodeType>
-class TreeNode : public TreeModelNode {
- public:
- TreeNode() : parent_(NULL) { }
-
- explicit TreeNode(const std::wstring& title)
- : title_(title), parent_(NULL) {}
-
- virtual ~TreeNode() {
- }
-
- // Adds the specified child node.
- virtual void Add(int index, NodeType* child) {
- DCHECK(child && index >= 0 && index <= GetChildCount());
- // If the node has a parent, remove it from its parent.
- NodeType* node_parent = child->GetParent();
- if (node_parent)
- node_parent->Remove(node_parent->IndexOfChild(child));
- child->parent_ = static_cast<NodeType*>(this);
- children_->insert(children_->begin() + index, child);
- }
-
- // Removes the node by index. This does NOT delete the specified node, it is
- // up to the caller to delete it when done.
- virtual NodeType* Remove(int index) {
- DCHECK(index >= 0 && index < GetChildCount());
- NodeType* node = GetChild(index);
- node->parent_ = NULL;
- children_->erase(index + children_->begin());
- return node;
- }
-
- // Removes all the children from this node. This does NOT delete the nodes.
- void RemoveAll() {
- for (size_t i = 0; i < children_->size(); ++i)
- children_[i]->parent_ = NULL;
- children_->clear();
- }
-
- // Returns the number of children.
- int GetChildCount() {
- return static_cast<int>(children_->size());
- }
-
- // Returns a child by index.
- NodeType* GetChild(int index) {
- DCHECK(index >= 0 && index < GetChildCount());
- return children_[index];
- }
-
- // Returns the parent.
- NodeType* GetParent() {
- return parent_;
- }
-
- // Returns the index of the specified child, or -1 if node is a not a child.
- int IndexOfChild(const NodeType* node) {
- DCHECK(node);
- typename std::vector<NodeType*>::iterator i =
- std::find(children_->begin(), children_->end(), node);
- if (i != children_->end())
- return static_cast<int>(i - children_->begin());
- return -1;
- }
-
- // Sets the title of the node.
- void SetTitle(const std::wstring& string) {
- title_ = string;
- }
-
- // Returns the title of the node.
- std::wstring GetTitle() {
- return title_;
- }
-
- // Returns true if this is the root.
- bool IsRoot() { return (parent_ == NULL); }
-
- // Returns true if this == ancestor, or one of this nodes parents is
- // ancestor.
- bool HasAncestor(NodeType* ancestor) const {
- if (ancestor == this)
- return true;
- if (!ancestor)
- return false;
- return parent_ ? parent_->HasAncestor(ancestor) : false;
- }
-
- protected:
- std::vector<NodeType*>& children() { return children_.get(); }
-
- private:
- // Title displayed in the tree.
- std::wstring title_;
-
- NodeType* parent_;
-
- // Children.
- ScopedVector<NodeType> children_;
-
- DISALLOW_COPY_AND_ASSIGN(TreeNode);
-};
-
-// TreeNodeWithValue ----------------------------------------------------------
-
-template <class ValueType>
-class TreeNodeWithValue : public TreeNode< TreeNodeWithValue<ValueType> > {
- private:
- typedef TreeNode< TreeNodeWithValue<ValueType> > ParentType;
-
- public:
- TreeNodeWithValue() { }
-
- TreeNodeWithValue(const ValueType& value)
- : ParentType(std::wstring()), value(value) { }
-
- TreeNodeWithValue(const std::wstring& title, const ValueType& value)
- : ParentType(title), value(value) { }
-
- ValueType value;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(TreeNodeWithValue);
-};
-
-// TreeNodeModel --------------------------------------------------------------
-
-// TreeModel implementation intended to be used with TreeNodes.
-template <class NodeType>
-class TreeNodeModel : public TreeModel {
- public:
- // Creates a TreeNodeModel with the specified root node. The root is owned
- // by the TreeNodeModel.
- explicit TreeNodeModel(NodeType* root)
- : root_(root),
- observer_(NULL) {
- }
-
- virtual ~TreeNodeModel() {}
-
- virtual void SetObserver(TreeModelObserver* observer) {
- observer_ = observer;
- }
-
- TreeModelObserver* GetObserver() {
- return observer_;
- }
-
- // TreeModel methods, all forward to the nodes.
- virtual NodeType* GetRoot() { return root_.get(); }
-
- virtual int GetChildCount(TreeModelNode* parent) {
- DCHECK(parent);
- return AsNode(parent)->GetChildCount();
- }
-
- virtual NodeType* GetChild(TreeModelNode* parent, int index) {
- DCHECK(parent);
- return AsNode(parent)->GetChild(index);
- }
-
- virtual TreeModelNode* GetParent(TreeModelNode* node) {
- DCHECK(node);
- return AsNode(node)->GetParent();
- }
-
- NodeType* AsNode(TreeModelNode* model_node) {
- return reinterpret_cast<NodeType*>(model_node);
- }
-
- // Sets the title of the specified node.
- virtual void SetTitle(TreeModelNode* node,
- const std::wstring& title) {
- DCHECK(node);
- AsNode(node)->SetTitle(title);
- NotifyObserverTreeNodeChanged(node);
- }
-
- void Add(NodeType* parent, int index, NodeType* child) {
- DCHECK(parent && child);
- parent->Add(index, child);
- NotifyObserverTreeNodesAdded(parent, index, 1);
- }
-
- NodeType* Remove(NodeType* parent, int index) {
- DCHECK(parent);
- NodeType* child = parent->Remove(index);
- NotifyObserverTreeNodesRemoved(parent, index, 1);
- return child;
- }
-
- void NotifyObserverTreeNodesAdded(NodeType* parent, int start, int count) {
- if (observer_)
- observer_->TreeNodesAdded(this, parent, start, count);
- }
-
- void NotifyObserverTreeNodesRemoved(NodeType* parent, int start, int count) {
- if (observer_)
- observer_->TreeNodesRemoved(this, parent, start, count);
- }
-
- virtual void NotifyObserverTreeNodeChanged(TreeModelNode* node) {
- if (observer_)
- observer_->TreeNodeChanged(this, node);
- }
-
- private:
- // The root.
- scoped_ptr<NodeType> root_;
-
- // The observer.
- TreeModelObserver* observer_;
-
- DISALLOW_COPY_AND_ASSIGN(TreeNodeModel);
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_CONTROLS_TREE_TREE_NODE_MODEL_H_
diff --git a/chrome/views/controls/tree/tree_view.cc b/chrome/views/controls/tree/tree_view.cc
deleted file mode 100644
index 1bf668c..0000000
--- a/chrome/views/controls/tree/tree_view.cc
+++ /dev/null
@@ -1,745 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/controls/tree/tree_view.h"
-
-#include <shellapi.h>
-
-#include "app/gfx/chrome_canvas.h"
-#include "app/gfx/icon_util.h"
-#include "app/l10n_util.h"
-#include "app/l10n_util_win.h"
-#include "app/resource_bundle.h"
-#include "base/stl_util-inl.h"
-#include "base/win_util.h"
-#include "chrome/views/focus/focus_manager.h"
-#include "chrome/views/widget/widget.h"
-#include "grit/theme_resources.h"
-
-namespace views {
-
-TreeView::TreeView()
- : tree_view_(NULL),
- model_(NULL),
- editable_(true),
- next_id_(0),
- controller_(NULL),
- editing_node_(NULL),
- root_shown_(true),
- process_enter_(false),
- show_context_menu_only_when_node_selected_(true),
- select_on_right_mouse_down_(true),
- wrapper_(this),
- original_handler_(NULL),
- drag_enabled_(false),
- has_custom_icons_(false),
- image_list_(NULL) {
-}
-
-TreeView::~TreeView() {
- if (model_)
- model_->SetObserver(NULL);
- // Both param_to_details_map_ and node_to_details_map_ have the same value,
- // as such only need to delete from one.
- STLDeleteContainerPairSecondPointers(id_to_details_map_.begin(),
- id_to_details_map_.end());
- if (image_list_)
- ImageList_Destroy(image_list_);
-}
-
-void TreeView::SetModel(TreeModel* model) {
- if (model == model_)
- return;
- if(model_ && tree_view_)
- DeleteRootItems();
- if (model_)
- model_->SetObserver(NULL);
- model_ = model;
- if (tree_view_ && model_) {
- CreateRootItems();
- model_->SetObserver(this);
- HIMAGELIST last_image_list = image_list_;
- image_list_ = CreateImageList();
- TreeView_SetImageList(tree_view_, image_list_, TVSIL_NORMAL);
- if (last_image_list)
- ImageList_Destroy(last_image_list);
- }
-}
-
-// Sets whether the user can edit the nodes. The default is true.
-void TreeView::SetEditable(bool editable) {
- if (editable == editable_)
- return;
- editable_ = editable;
- if (!tree_view_)
- return;
- LONG_PTR style = GetWindowLongPtr(tree_view_, GWL_STYLE);
- style &= ~TVS_EDITLABELS;
- SetWindowLongPtr(tree_view_, GWL_STYLE, style);
-}
-
-void TreeView::StartEditing(TreeModelNode* node) {
- DCHECK(node && tree_view_);
- // Cancel the current edit.
- CancelEdit();
- // Make sure all ancestors are expanded.
- if (model_->GetParent(node))
- Expand(model_->GetParent(node));
- const NodeDetails* details = GetNodeDetails(node);
- // Tree needs focus for editing to work.
- SetFocus(tree_view_);
- // Select the node, else if the user commits the edit the selection reverts.
- SetSelectedNode(node);
- TreeView_EditLabel(tree_view_, details->tree_item);
-}
-
-void TreeView::CancelEdit() {
- DCHECK(tree_view_);
- TreeView_EndEditLabelNow(tree_view_, TRUE);
-}
-
-void TreeView::CommitEdit() {
- DCHECK(tree_view_);
- TreeView_EndEditLabelNow(tree_view_, FALSE);
-}
-
-TreeModelNode* TreeView::GetEditingNode() {
- // I couldn't find a way to dynamically query for this, so it is cached.
- return editing_node_;
-}
-
-void TreeView::SetSelectedNode(TreeModelNode* node) {
- DCHECK(tree_view_);
- if (!node) {
- TreeView_SelectItem(tree_view_, NULL);
- return;
- }
- if (node != model_->GetRoot())
- Expand(model_->GetParent(node));
- if (!root_shown_ && node == model_->GetRoot()) {
- // If the root isn't shown, we can't select it, clear out the selection
- // instead.
- TreeView_SelectItem(tree_view_, NULL);
- } else {
- // Select the node and make sure it is visible.
- TreeView_SelectItem(tree_view_, GetNodeDetails(node)->tree_item);
- }
-}
-
-TreeModelNode* TreeView::GetSelectedNode() {
- if (!tree_view_)
- return NULL;
- HTREEITEM selected_item = TreeView_GetSelection(tree_view_);
- if (!selected_item)
- return NULL;
- NodeDetails* details = GetNodeDetailsByTreeItem(selected_item);
- DCHECK(details);
- return details->node;
-}
-
-void TreeView::Expand(TreeModelNode* node) {
- DCHECK(model_ && node);
- if (!root_shown_ && model_->GetRoot() == node) {
- // Can only expand the root if it is showing.
- return;
- }
- TreeModelNode* parent = model_->GetParent(node);
- if (parent) {
- // Make sure all the parents are expanded.
- Expand(parent);
- }
- // And expand this item.
- TreeView_Expand(tree_view_, GetNodeDetails(node)->tree_item, TVE_EXPAND);
-}
-
-void TreeView::ExpandAll() {
- DCHECK(model_);
- ExpandAll(model_->GetRoot());
-}
-
-void TreeView::ExpandAll(TreeModelNode* node) {
- DCHECK(node);
- // Expand the node.
- if (node != model_->GetRoot() || root_shown_)
- TreeView_Expand(tree_view_, GetNodeDetails(node)->tree_item, TVE_EXPAND);
- // And recursively expand all the children.
- for (int i = model_->GetChildCount(node) - 1; i >= 0; --i) {
- TreeModelNode* child = model_->GetChild(node, i);
- ExpandAll(child);
- }
-}
-
-bool TreeView::IsExpanded(TreeModelNode* node) {
- TreeModelNode* parent = model_->GetParent(node);
- if (!parent)
- return true;
- if (!IsExpanded(parent))
- return false;
- NodeDetails* details = GetNodeDetails(node);
- return (TreeView_GetItemState(tree_view_, details->tree_item, TVIS_EXPANDED) &
- TVIS_EXPANDED) != 0;
-}
-
-void TreeView::SetRootShown(bool root_shown) {
- if (root_shown_ == root_shown)
- return;
- root_shown_ = root_shown;
- if (!model_)
- return;
- // Repopulate the tree.
- DeleteRootItems();
- CreateRootItems();
-}
-
-void TreeView::TreeNodesAdded(TreeModel* model,
- TreeModelNode* parent,
- int start,
- int count) {
- DCHECK(parent && start >= 0 && count > 0);
- if (node_to_details_map_.find(parent) == node_to_details_map_.end()) {
- // User hasn't navigated to this entry yet. Ignore the change.
- return;
- }
- HTREEITEM parent_tree_item = NULL;
- if (root_shown_ || parent != model_->GetRoot()) {
- const NodeDetails* details = GetNodeDetails(parent);
- if (!details->loaded_children) {
- if (count == model_->GetChildCount(parent)) {
- // Reset the treeviews child count. This triggers the treeview to call
- // us back.
- TV_ITEM tv_item = {0};
- tv_item.mask = TVIF_CHILDREN;
- tv_item.cChildren = count;
- tv_item.hItem = details->tree_item;
- TreeView_SetItem(tree_view_, &tv_item);
- }
-
- // Ignore the change, we haven't actually created entries in the tree
- // for the children.
- return;
- }
- parent_tree_item = details->tree_item;
- }
-
- // The user has expanded this node, add the items to it.
- for (int i = 0; i < count; ++i) {
- if (i == 0 && start == 0) {
- CreateItem(parent_tree_item, TVI_FIRST, model_->GetChild(parent, 0));
- } else {
- TreeModelNode* previous_sibling = model_->GetChild(parent, i + start - 1);
- CreateItem(parent_tree_item,
- GetNodeDetails(previous_sibling)->tree_item,
- model_->GetChild(parent, i + start));
- }
- }
-}
-
-void TreeView::TreeNodesRemoved(TreeModel* model,
- TreeModelNode* parent,
- int start,
- int count) {
- DCHECK(parent && start >= 0 && count > 0);
- HTREEITEM parent_tree_item = GetTreeItemForNodeDuringMutation(parent);
- if (!parent_tree_item)
- return;
-
- // Find the last item. Windows doesn't offer a convenient way to get the
- // TREEITEM at a particular index, so we iterate.
- HTREEITEM tree_item = TreeView_GetChild(tree_view_, parent_tree_item);
- for (int i = 0; i < (start + count - 1); ++i) {
- tree_item = TreeView_GetNextSibling(tree_view_, tree_item);
- }
- // NOTE: the direction doesn't matter here. I've made it backwards to
- // reinforce we're deleting from the end forward.
- for (int i = count - 1; i >= 0; --i) {
- HTREEITEM previous = (start + i) > 0 ?
- TreeView_GetPrevSibling(tree_view_, tree_item) : NULL;
- RecursivelyDelete(GetNodeDetailsByTreeItem(tree_item));
- tree_item = previous;
- }
-}
-
-namespace {
-
-// Callback function used to compare two items. The first two args are the
-// LPARAMs of the HTREEITEMs being compared. The last arg maps from LPARAM
-// to order. This is invoked from TreeNodeChildrenReordered.
-int CALLBACK CompareTreeItems(LPARAM item1_lparam,
- LPARAM item2_lparam,
- LPARAM map_as_lparam) {
- std::map<int, int>& mapping =
- *reinterpret_cast<std::map<int, int>*>(map_as_lparam);
- return mapping[static_cast<int>(item1_lparam)] -
- mapping[static_cast<int>(item2_lparam)];
-}
-
-} // namespace
-
-void TreeView::TreeNodeChildrenReordered(TreeModel* model,
- TreeModelNode* parent) {
- DCHECK(parent);
- if (model_->GetChildCount(parent) <= 1)
- return;
-
- TVSORTCB sort_details;
- sort_details.hParent = GetTreeItemForNodeDuringMutation(parent);
- if (!sort_details.hParent)
- return;
-
- std::map<int, int> lparam_to_order_map;
- for (int i = 0; i < model_->GetChildCount(parent); ++i) {
- TreeModelNode* node = model_->GetChild(parent, i);
- lparam_to_order_map[GetNodeDetails(node)->id] = i;
- }
-
- sort_details.lpfnCompare = &CompareTreeItems;
- sort_details.lParam = reinterpret_cast<LPARAM>(&lparam_to_order_map);
- TreeView_SortChildrenCB(tree_view_, &sort_details, 0);
-}
-
-void TreeView::TreeNodeChanged(TreeModel* model, TreeModelNode* node) {
- if (node_to_details_map_.find(node) == node_to_details_map_.end()) {
- // User hasn't navigated to this entry yet. Ignore the change.
- return;
- }
- const NodeDetails* details = GetNodeDetails(node);
- TV_ITEM tv_item = {0};
- tv_item.mask = TVIF_TEXT;
- tv_item.hItem = details->tree_item;
- tv_item.pszText = LPSTR_TEXTCALLBACK;
- TreeView_SetItem(tree_view_, &tv_item);
-}
-
-gfx::Point TreeView::GetKeyboardContextMenuLocation() {
- int y = height() / 2;
- if (GetSelectedNode()) {
- RECT bounds;
- RECT client_rect;
- if (TreeView_GetItemRect(tree_view_,
- GetNodeDetails(GetSelectedNode())->tree_item,
- &bounds, TRUE) &&
- GetClientRect(tree_view_, &client_rect) &&
- bounds.bottom >= 0 && bounds.bottom < client_rect.bottom) {
- y = bounds.bottom;
- }
- }
- gfx::Point screen_loc(0, y);
- if (UILayoutIsRightToLeft())
- screen_loc.set_x(width());
- ConvertPointToScreen(this, &screen_loc);
- return screen_loc;
-}
-
-HWND TreeView::CreateNativeControl(HWND parent_container) {
- int style = WS_CHILD | TVS_HASBUTTONS | TVS_HASLINES | TVS_SHOWSELALWAYS;
- if (!drag_enabled_)
- style |= TVS_DISABLEDRAGDROP;
- if (editable_)
- style |= TVS_EDITLABELS;
- tree_view_ = ::CreateWindowEx(WS_EX_CLIENTEDGE | GetAdditionalExStyle(),
- WC_TREEVIEW,
- L"",
- style,
- 0, 0, width(), height(),
- parent_container, NULL, NULL, NULL);
- SetWindowLongPtr(tree_view_, GWLP_USERDATA,
- reinterpret_cast<LONG_PTR>(&wrapper_));
- original_handler_ = win_util::SetWindowProc(tree_view_,
- &TreeWndProc);
- l10n_util::AdjustUIFontForWindow(tree_view_);
-
- if (model_) {
- CreateRootItems();
- model_->SetObserver(this);
- image_list_ = CreateImageList();
- TreeView_SetImageList(tree_view_, image_list_, TVSIL_NORMAL);
- }
-
- // Bug 964884: detach the IME attached to this window.
- // We should attach IMEs only when we need to input CJK strings.
- ::ImmAssociateContextEx(tree_view_, NULL, 0);
- return tree_view_;
-}
-
-LRESULT TreeView::OnNotify(int w_param, LPNMHDR l_param) {
- switch (l_param->code) {
- case TVN_GETDISPINFO: {
- // Windows is requesting more information about an item.
- // WARNING: At the time this is called the tree_item of the NodeDetails
- // in the maps is NULL.
- DCHECK(model_);
- NMTVDISPINFO* info = reinterpret_cast<NMTVDISPINFO*>(l_param);
- const NodeDetails* details =
- GetNodeDetailsByID(static_cast<int>(info->item.lParam));
- if (info->item.mask & TVIF_CHILDREN)
- info->item.cChildren = model_->GetChildCount(details->node);
- if (info->item.mask & TVIF_TEXT) {
- std::wstring text = details->node->GetTitle();
- DCHECK(info->item.cchTextMax);
-
- // Adjust the string direction if such adjustment is required.
- std::wstring localized_text;
- if (l10n_util::AdjustStringForLocaleDirection(text, &localized_text))
- text.swap(localized_text);
-
- wcsncpy_s(info->item.pszText, info->item.cchTextMax, text.c_str(),
- _TRUNCATE);
- }
- // Instructs windows to cache the values for this node.
- info->item.mask |= TVIF_DI_SETITEM;
- // Return value ignored.
- return 0;
- }
-
- case TVN_ITEMEXPANDING: {
- // Notification that a node is expanding. If we haven't populated the
- // tree view with the contents of the model, we do it here.
- DCHECK(model_);
- NMTREEVIEW* info = reinterpret_cast<NMTREEVIEW*>(l_param);
- NodeDetails* details =
- GetNodeDetailsByID(static_cast<int>(info->itemNew.lParam));
- if (!details->loaded_children) {
- details->loaded_children = true;
- for (int i = 0; i < model_->GetChildCount(details->node); ++i)
- CreateItem(details->tree_item, TVI_LAST,
- model_->GetChild(details->node, i));
- }
- // Return FALSE to allow the item to be expanded.
- return FALSE;
- }
-
- case TVN_SELCHANGED:
- if (controller_)
- controller_->OnTreeViewSelectionChanged(this);
- break;
-
- case TVN_BEGINLABELEDIT: {
- NMTVDISPINFO* info = reinterpret_cast<NMTVDISPINFO*>(l_param);
- NodeDetails* details =
- GetNodeDetailsByID(static_cast<int>(info->item.lParam));
- // Return FALSE to allow editing.
- if (!controller_ || controller_->CanEdit(this, details->node)) {
- editing_node_ = details->node;
- return FALSE;
- }
- return TRUE;
- }
-
- case TVN_ENDLABELEDIT: {
- NMTVDISPINFO* info = reinterpret_cast<NMTVDISPINFO*>(l_param);
- if (info->item.pszText) {
- // User accepted edit.
- NodeDetails* details =
- GetNodeDetailsByID(static_cast<int>(info->item.lParam));
- model_->SetTitle(details->node, info->item.pszText);
- editing_node_ = NULL;
- // Return FALSE so that the tree item doesn't change its text (if the
- // model changed the value, it should have sent out notification which
- // will have updated the value).
- return FALSE;
- }
- editing_node_ = NULL;
- // Return value ignored.
- return 0;
- }
-
- case TVN_KEYDOWN:
- if (controller_) {
- NMTVKEYDOWN* key_down_message =
- reinterpret_cast<NMTVKEYDOWN*>(l_param);
- controller_->OnTreeViewKeyDown(key_down_message->wVKey);
- }
- break;
-
- default:
- break;
- }
- return 0;
-}
-
-bool TreeView::OnKeyDown(int virtual_key_code) {
- if (virtual_key_code == VK_F2) {
- if (!GetEditingNode()) {
- TreeModelNode* selected_node = GetSelectedNode();
- if (selected_node)
- StartEditing(selected_node);
- }
- return true;
- } else if (virtual_key_code == VK_RETURN && !process_enter_) {
- Widget* widget = GetWidget();
- DCHECK(widget);
- FocusManager* fm = FocusManager::GetFocusManager(widget->GetNativeView());
- DCHECK(fm);
- Accelerator accelerator(Accelerator(static_cast<int>(virtual_key_code),
- win_util::IsShiftPressed(),
- win_util::IsCtrlPressed(),
- win_util::IsAltPressed()));
- fm->ProcessAccelerator(accelerator);
- return true;
- }
- return false;
-}
-
-void TreeView::OnContextMenu(const CPoint& location) {
- if (!GetContextMenuController())
- return;
-
- if (location.x == -1 && location.y == -1) {
- // Let NativeControl's implementation handle keyboard gesture.
- NativeControl::OnContextMenu(location);
- return;
- }
-
- if (show_context_menu_only_when_node_selected_) {
- if (!GetSelectedNode())
- return;
-
- // Make sure the mouse is over the selected node.
- TVHITTESTINFO hit_info;
- gfx::Point local_loc(location);
- ConvertPointToView(NULL, this, &local_loc);
- hit_info.pt.x = local_loc.x();
- hit_info.pt.y = local_loc.y();
- HTREEITEM hit_item = TreeView_HitTest(tree_view_, &hit_info);
- if (!hit_item ||
- GetNodeDetails(GetSelectedNode())->tree_item != hit_item ||
- (hit_info.flags & (TVHT_ONITEM | TVHT_ONITEMRIGHT |
- TVHT_ONITEMINDENT)) == 0) {
- return;
- }
- }
- ShowContextMenu(location.x, location.y, true);
-}
-
-TreeModelNode* TreeView::GetNodeForTreeItem(HTREEITEM tree_item) {
- NodeDetails* details = GetNodeDetailsByTreeItem(tree_item);
- return details ? details->node : NULL;
-}
-
-HTREEITEM TreeView::GetTreeItemForNode(TreeModelNode* node) {
- NodeDetails* details = GetNodeDetails(node);
- return details ? details->tree_item : NULL;
-}
-
-void TreeView::DeleteRootItems() {
- HTREEITEM root = TreeView_GetRoot(tree_view_);
- if (root) {
- if (root_shown_) {
- RecursivelyDelete(GetNodeDetailsByTreeItem(root));
- } else {
- do {
- RecursivelyDelete(GetNodeDetailsByTreeItem(root));
- } while ((root = TreeView_GetRoot(tree_view_)));
- }
- }
-}
-
-void TreeView::CreateRootItems() {
- DCHECK(model_);
- TreeModelNode* root = model_->GetRoot();
- if (root_shown_) {
- CreateItem(NULL, TVI_LAST, root);
- } else {
- for (int i = 0; i < model_->GetChildCount(root); ++i)
- CreateItem(NULL, TVI_LAST, model_->GetChild(root, i));
- }
-}
-
-void TreeView::CreateItem(HTREEITEM parent_item,
- HTREEITEM after,
- TreeModelNode* node) {
- DCHECK(node);
- TVINSERTSTRUCT insert_struct = {0};
- insert_struct.hParent = parent_item;
- insert_struct.hInsertAfter = after;
- insert_struct.itemex.mask = TVIF_PARAM | TVIF_CHILDREN | TVIF_TEXT |
- TVIF_SELECTEDIMAGE | TVIF_IMAGE;
- // Call us back for the text.
- insert_struct.itemex.pszText = LPSTR_TEXTCALLBACK;
- // And the number of children.
- insert_struct.itemex.cChildren = I_CHILDRENCALLBACK;
- // Set the index of the icons to use. These are relative to the imagelist
- // created in CreateImageList.
- int icon_index = model_->GetIconIndex(node);
- if (icon_index == -1) {
- insert_struct.itemex.iImage = 0;
- insert_struct.itemex.iSelectedImage = 1;
- } else {
- // The first two images are the default ones.
- insert_struct.itemex.iImage = icon_index + 2;
- insert_struct.itemex.iSelectedImage = icon_index + 2;
- }
- int node_id = next_id_++;
- insert_struct.itemex.lParam = node_id;
-
- // Invoking TreeView_InsertItem triggers OnNotify to be called. As such,
- // we set the map entries before adding the item.
- NodeDetails* node_details = new NodeDetails(node_id, node);
-
- node_to_details_map_[node] = node_details;
- id_to_details_map_[node_id] = node_details;
-
- node_details->tree_item = TreeView_InsertItem(tree_view_, &insert_struct);
-}
-
-void TreeView::RecursivelyDelete(NodeDetails* node) {
- DCHECK(node);
- HTREEITEM item = node->tree_item;
- DCHECK(item);
-
- // Recurse through children.
- for (HTREEITEM child = TreeView_GetChild(tree_view_, item);
- child ; child = TreeView_GetNextSibling(tree_view_, child)) {
- RecursivelyDelete(GetNodeDetailsByTreeItem(child));
- }
-
- TreeView_DeleteItem(tree_view_, item);
-
- // finally, it is safe to delete the data for this node.
- id_to_details_map_.erase(node->id);
- node_to_details_map_.erase(node->node);
- delete node;
-}
-
-TreeView::NodeDetails* TreeView::GetNodeDetailsByTreeItem(HTREEITEM tree_item) {
- DCHECK(tree_view_ && tree_item);
- TV_ITEM tv_item = {0};
- tv_item.hItem = tree_item;
- tv_item.mask = TVIF_PARAM;
- if (TreeView_GetItem(tree_view_, &tv_item))
- return GetNodeDetailsByID(static_cast<int>(tv_item.lParam));
- return NULL;
-}
-
-HIMAGELIST TreeView::CreateImageList() {
- std::vector<SkBitmap> model_images;
- model_->GetIcons(&model_images);
-
- bool rtl = UILayoutIsRightToLeft();
- // Creates the default image list used for trees.
- SkBitmap* closed_icon =
- ResourceBundle::GetSharedInstance().GetBitmapNamed(
- (rtl ? IDR_FOLDER_CLOSED_RTL : IDR_FOLDER_CLOSED));
- SkBitmap* opened_icon =
- ResourceBundle::GetSharedInstance().GetBitmapNamed(
- (rtl ? IDR_FOLDER_OPEN_RTL : IDR_FOLDER_OPEN));
- int width = closed_icon->width();
- int height = closed_icon->height();
- DCHECK(opened_icon->width() == width && opened_icon->height() == height);
- HIMAGELIST image_list =
- ImageList_Create(width, height, ILC_COLOR32, model_images.size() + 2,
- model_images.size() + 2);
- if (image_list) {
- // NOTE: the order the images are added in effects the selected
- // image index when adding items to the tree. If you change the
- // order you'll undoubtedly need to update itemex.iSelectedImage
- // when the item is added.
- HICON h_closed_icon = IconUtil::CreateHICONFromSkBitmap(*closed_icon);
- HICON h_opened_icon = IconUtil::CreateHICONFromSkBitmap(*opened_icon);
- ImageList_AddIcon(image_list, h_closed_icon);
- ImageList_AddIcon(image_list, h_opened_icon);
- DestroyIcon(h_closed_icon);
- DestroyIcon(h_opened_icon);
- for (size_t i = 0; i < model_images.size(); ++i) {
- HICON model_icon = IconUtil::CreateHICONFromSkBitmap(model_images[i]);
- ImageList_AddIcon(image_list, model_icon);
- DestroyIcon(model_icon);
- }
- }
- return image_list;
-}
-
-HTREEITEM TreeView::GetTreeItemForNodeDuringMutation(TreeModelNode* node) {
- if (node_to_details_map_.find(node) == node_to_details_map_.end()) {
- // User hasn't navigated to this entry yet. Ignore the change.
- return NULL;
- }
- if (!root_shown_ || node != model_->GetRoot()) {
- const NodeDetails* details = GetNodeDetails(node);
- if (!details->loaded_children)
- return NULL;
- return details->tree_item;
- }
- return TreeView_GetRoot(tree_view_);
-}
-
-LRESULT CALLBACK TreeView::TreeWndProc(HWND window,
- UINT message,
- WPARAM w_param,
- LPARAM l_param) {
- TreeViewWrapper* wrapper = reinterpret_cast<TreeViewWrapper*>(
- GetWindowLongPtr(window, GWLP_USERDATA));
- DCHECK(wrapper);
- TreeView* tree = wrapper->tree_view;
-
- // We handle the messages WM_ERASEBKGND and WM_PAINT such that we paint into
- // a DIB first and then perform a BitBlt from the DIB into the underlying
- // window's DC. This double buffering code prevents the tree view from
- // flickering during resize.
- switch (message) {
- case WM_ERASEBKGND:
- return 1;
-
- case WM_PAINT: {
- ChromeCanvasPaint canvas(window);
- if (canvas.isEmpty())
- return 0;
-
- HDC dc = canvas.beginPlatformPaint();
- if (l10n_util::GetTextDirection() == l10n_util::RIGHT_TO_LEFT) {
- // ChromeCanvas ends up configuring the DC with a mode of GM_ADVANCED.
- // For some reason a graphics mode of ADVANCED triggers all the text
- // to be mirrored when RTL. Set the mode back to COMPATIBLE and
- // explicitly set the layout. Additionally SetWorldTransform and
- // COMPATIBLE don't play nicely together. We need to use
- // SetViewportOrgEx when using a mode of COMPATIBLE.
- //
- // Reset the transform to the identify transform. Even though
- // SetWorldTransform and COMPATIBLE don't play nicely, bits of the
- // transform still carry over when we set the mode.
- XFORM xform = {0};
- xform.eM11 = xform.eM22 = 1;
- SetWorldTransform(dc, &xform);
-
- // Set the mode and layout.
- SetGraphicsMode(dc, GM_COMPATIBLE);
- SetLayout(dc, LAYOUT_RTL);
-
- // Transform the viewport such that the origin of the dc is that of
- // the dirty region. This way when we invoke WM_PRINTCLIENT tree-view
- // draws the dirty region at the origin of the DC so that when we
- // copy the bits everything lines up nicely. Without this we end up
- // copying the upper-left corner to the redraw region.
- SetViewportOrgEx(dc, -canvas.paintStruct().rcPaint.left,
- -canvas.paintStruct().rcPaint.top, NULL);
- }
- SendMessage(window, WM_PRINTCLIENT, reinterpret_cast<WPARAM>(dc), 0);
- if (l10n_util::GetTextDirection() == l10n_util::RIGHT_TO_LEFT) {
- // Reset the origin of the dc back to 0. This way when we copy the bits
- // over we copy the right bits.
- SetViewportOrgEx(dc, 0, 0, NULL);
- }
- canvas.endPlatformPaint();
- return 0;
- }
-
- case WM_RBUTTONDOWN:
- if (tree->select_on_right_mouse_down_) {
- TVHITTESTINFO hit_info;
- hit_info.pt.x = GET_X_LPARAM(l_param);
- hit_info.pt.y = GET_Y_LPARAM(l_param);
- HTREEITEM hit_item = TreeView_HitTest(window, &hit_info);
- if (hit_item && (hit_info.flags & (TVHT_ONITEM | TVHT_ONITEMRIGHT |
- TVHT_ONITEMINDENT)) != 0)
- TreeView_SelectItem(tree->tree_view_, hit_item);
- }
- // Fall through and let the default handler process as well.
- break;
- }
- WNDPROC handler = tree->original_handler_;
- DCHECK(handler);
- return CallWindowProc(handler, window, message, w_param, l_param);
-}
-
-} // namespace views
diff --git a/chrome/views/controls/tree/tree_view.h b/chrome/views/controls/tree/tree_view.h
deleted file mode 100644
index ca6f784..0000000
--- a/chrome/views/controls/tree/tree_view.h
+++ /dev/null
@@ -1,305 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_CONTROLS_TREE_TREE_VIEW_H_
-#define CHROME_VIEWS_CONTROLS_TREE_TREE_VIEW_H_
-
-#include <map>
-
-#include "base/basictypes.h"
-#include "base/logging.h"
-#include "chrome/views/controls/native_control.h"
-#include "chrome/views/controls/tree/tree_model.h"
-
-namespace views {
-
-class TreeView;
-
-// TreeViewController ---------------------------------------------------------
-
-// Controller for the treeview.
-class TreeViewController {
- public:
- // Notification that the selection of the tree view has changed. Use
- // GetSelectedNode to find the current selection.
- virtual void OnTreeViewSelectionChanged(TreeView* tree_view) = 0;
-
- // Returns true if the node can be edited. This is only used if the
- // TreeView is editable.
- virtual bool CanEdit(TreeView* tree_view, TreeModelNode* node) {
- return true;
- }
-
- // Invoked when a key is pressed on the tree view.
- virtual void OnTreeViewKeyDown(unsigned short virtual_keycode) {}
-};
-
-// TreeView -------------------------------------------------------------------
-
-// TreeView displays hierarchical data as returned from a TreeModel. The user
-// can expand, collapse and edit the items. A Controller may be attached to
-// receive notification of selection changes and restrict editing.
-class TreeView : public NativeControl, TreeModelObserver {
- public:
- TreeView();
- virtual ~TreeView();
-
- // Is dragging enabled? The default is false.
- void set_drag_enabled(bool drag_enabled) { drag_enabled_ = drag_enabled; }
- bool drag_enabled() const { return drag_enabled_; }
-
- // Sets the model. TreeView does not take ownership of the model.
- void SetModel(TreeModel* model);
- TreeModel* model() const { return model_; }
-
- // Sets whether the user can edit the nodes. The default is true. If true,
- // the Controller is queried to determine if a particular node can be edited.
- void SetEditable(bool editable);
-
- // Edits the specified node. This cancels the current edit and expands
- // all parents of node.
- void StartEditing(TreeModelNode* node);
-
- // Cancels the current edit. Does nothing if not editing.
- void CancelEdit();
-
- // Commits the current edit. Does nothing if not editing.
- void CommitEdit();
-
- // If the user is editing a node, it is returned. If the user is not
- // editing a node, NULL is returned.
- TreeModelNode* GetEditingNode();
-
- // Selects the specified node. This expands all the parents of node.
- void SetSelectedNode(TreeModelNode* node);
-
- // Returns the selected node, or NULL if nothing is selected.
- TreeModelNode* GetSelectedNode();
-
- // Make sure node and all its parents are expanded.
- void Expand(TreeModelNode* node);
-
- // Convenience to expand ALL nodes in the tree.
- void ExpandAll();
-
- // Invoked from ExpandAll(). Expands the supplied node and recursively
- // invokes itself with all children.
- void ExpandAll(TreeModelNode* node);
-
- // Returns true if the specified node is expanded.
- bool IsExpanded(TreeModelNode* node);
-
- // Sets whether the root is shown. If true, the root node of the tree is
- // shown, if false only the children of the root are shown. The default is
- // true.
- void SetRootShown(bool root_visible);
-
- // TreeModelObserver methods. Don't call these directly, instead your model
- // should notify the observer TreeView adds to it.
- virtual void TreeNodesAdded(TreeModel* model,
- TreeModelNode* parent,
- int start,
- int count);
- virtual void TreeNodesRemoved(TreeModel* model,
- TreeModelNode* parent,
- int start,
- int count);
- virtual void TreeNodeChildrenReordered(TreeModel* model,
- TreeModelNode* parent);
- virtual void TreeNodeChanged(TreeModel* model, TreeModelNode* node);
-
- // Sets the controller, which may be null. TreeView does not take ownership
- // of the controller.
- void SetController(TreeViewController* controller) {
- controller_ = controller;
- }
-
- // Sets whether enter is processed when not editing. If true, enter will
- // expand/collapse the node. If false, enter is passed to the focus manager
- // so that an enter accelerator can be enabled. The default is false.
- //
- // NOTE: Changing this has no effect after the hwnd has been created.
- void SetProcessesEnter(bool process_enter) {
- process_enter_ = process_enter;
- }
- bool GetProcessedEnter() { return process_enter_; }
-
- // Sets when the ContextMenuController is notified. If true, the
- // ContextMenuController is only notified when a node is selected and the
- // mouse is over a node. The default is true.
- void SetShowContextMenuOnlyWhenNodeSelected(bool value) {
- show_context_menu_only_when_node_selected_ = value;
- }
- bool GetShowContextMenuOnlyWhenNodeSelected() {
- return show_context_menu_only_when_node_selected_;
- }
-
- // If true, a right click selects the node under the mouse. The default
- // is true.
- void SetSelectOnRightMouseDown(bool value) {
- select_on_right_mouse_down_ = value;
- }
- bool GetSelectOnRightMouseDown() { return select_on_right_mouse_down_; }
-
- protected:
- // Overriden to return a location based on the selected node.
- virtual gfx::Point GetKeyboardContextMenuLocation();
-
- // Creates and configures the tree_view.
- virtual HWND CreateNativeControl(HWND parent_container);
-
- // Invoked when the native control sends a WM_NOTIFY message to its parent.
- // Handles a variety of potential TreeView messages.
- virtual LRESULT OnNotify(int w_param, LPNMHDR l_param);
-
- // Yes, we want to be notified of key down for two reasons. To circumvent
- // VK_ENTER from toggling the expaned state when processes_enter_ is false,
- // and to have F2 start editting.
- virtual bool NotifyOnKeyDown() const { return true; }
- virtual bool OnKeyDown(int virtual_key_code);
-
- virtual void OnContextMenu(const CPoint& location);
-
- // Returns the TreeModelNode for |tree_item|.
- TreeModelNode* GetNodeForTreeItem(HTREEITEM tree_item);
-
- // Returns the tree item for |node|.
- HTREEITEM GetTreeItemForNode(TreeModelNode* node);
-
- private:
- // See notes in TableView::TableViewWrapper for why this is needed.
- struct TreeViewWrapper {
- explicit TreeViewWrapper(TreeView* view) : tree_view(view) { }
- TreeView* tree_view;
- };
-
- // Internally used to track the state of nodes. NodeDetails are lazily created
- // as the user expands nodes.
- struct NodeDetails {
- NodeDetails(int id, TreeModelNode* node)
- : id(id), node(node), tree_item(NULL), loaded_children(false) {}
-
- // Unique identifier for the node. This corresponds to the lParam of
- // the tree item.
- const int id;
-
- // The node from the model.
- TreeModelNode* node;
-
- // From the native TreeView.
- //
- // This should be treated as const, but can't due to timing in creating the
- // entry.
- HTREEITEM tree_item;
-
- // Whether the children have been loaded.
- bool loaded_children;
- };
-
- // Deletes the root items from the treeview. This is used when the model
- // changes.
- void DeleteRootItems();
-
- // Creates the root items in the treeview from the model. This is used when
- // the model changes.
- void CreateRootItems();
-
- // Creates and adds an item to the treeview. parent_item identifies the
- // parent and is null for root items. after dictates where among the
- // children of parent_item the item is to be created. node is the node from
- // the model.
- void CreateItem(HTREEITEM parent_item, HTREEITEM after, TreeModelNode* node);
-
- // Removes entries from the map for item. This method will also
- // remove the items from the TreeView because the process of
- // deleting an item will send an TVN_GETDISPINFO message, consulting
- // our internal map data.
- void RecursivelyDelete(NodeDetails* node);
-
- // Returns the NodeDetails by node from the model.
- NodeDetails* GetNodeDetails(TreeModelNode* node) {
- DCHECK(node &&
- node_to_details_map_.find(node) != node_to_details_map_.end());
- return node_to_details_map_[node];
- }
-
- // Returns the NodeDetails by identifier (lparam of the HTREEITEM).
- NodeDetails* GetNodeDetailsByID(int id) {
- DCHECK(id_to_details_map_.find(id) != id_to_details_map_.end());
- return id_to_details_map_[id];
- }
-
- // Returns the NodeDetails by HTREEITEM.
- NodeDetails* GetNodeDetailsByTreeItem(HTREEITEM tree_item);
-
- // Creates the image list to use for the tree.
- HIMAGELIST CreateImageList();
-
- // Returns the HTREEITEM for |node|. This is intended to be called when a
- // model mutation event occur with |node| as the parent. This returns null
- // if the user has never expanded |node| or all of its parents.
- HTREEITEM GetTreeItemForNodeDuringMutation(TreeModelNode* node);
-
- // The window function installed on the treeview.
- static LRESULT CALLBACK TreeWndProc(HWND window,
- UINT message,
- WPARAM w_param,
- LPARAM l_param);
-
- // Handle to the tree window.
- HWND tree_view_;
-
- // The model, may be null.
- TreeModel* model_;
-
- // Maps from id to NodeDetails.
- std::map<int,NodeDetails*> id_to_details_map_;
-
- // Maps from model entry to NodeDetails.
- std::map<TreeModelNode*,NodeDetails*> node_to_details_map_;
-
- // Whether the user can edit the items.
- bool editable_;
-
- // Next id to create. Any time an item is added this is incremented by one.
- int next_id_;
-
- // The controller.
- TreeViewController* controller_;
-
- // Node being edited. If null, not editing.
- TreeModelNode* editing_node_;
-
- // Whether or not the root is shown in the tree.
- bool root_shown_;
-
- // Whether enter should be processed by the tree when not editing.
- bool process_enter_;
-
- // Whether we notify context menu controller only when mouse is over node
- // and node is selected.
- bool show_context_menu_only_when_node_selected_;
-
- // Whether the selection is changed on right mouse down.
- bool select_on_right_mouse_down_;
-
- // A wrapper around 'this', used for subclassing the TreeView control.
- TreeViewWrapper wrapper_;
-
- // Original handler installed on the TreeView.
- WNDPROC original_handler_;
-
- bool drag_enabled_;
-
- // Did the model return a non-empty set of icons from GetIcons?
- bool has_custom_icons_;
-
- HIMAGELIST image_list_;
-
- DISALLOW_COPY_AND_ASSIGN(TreeView);
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_CONTROLS_TREE_TREE_VIEW_H_
diff --git a/chrome/views/event.cc b/chrome/views/event.cc
deleted file mode 100644
index a968adc..0000000
--- a/chrome/views/event.cc
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/event.h"
-
-#include "chrome/views/view.h"
-
-namespace views {
-
-Event::Event(EventType type, int flags)
- : type_(type),
-#if defined(OS_WIN)
- time_stamp_(GetTickCount()),
-#else
- time_stamp_(0),
-#endif
- flags_(flags) {
-}
-
-LocatedEvent::LocatedEvent(const LocatedEvent& model, View* from, View* to)
- : Event(model),
- location_(model.location_) {
- if (to)
- View::ConvertPointToView(from, to, &location_);
-}
-
-MouseEvent::MouseEvent(EventType type,
- View* from,
- View* to,
- const gfx::Point &l,
- int flags)
- : LocatedEvent(LocatedEvent(type, gfx::Point(l.x(), l.y()), flags),
- from,
- to) {
-};
-
-MouseEvent::MouseEvent(const MouseEvent& model, View* from, View* to)
- : LocatedEvent(model, from, to) {
-}
-
-} // namespace views
diff --git a/chrome/views/event.h b/chrome/views/event.h
deleted file mode 100644
index 40aca37..0000000
--- a/chrome/views/event.h
+++ /dev/null
@@ -1,322 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_EVENT_H_
-#define CHROME_VIEWS_EVENT_H_
-
-#include "base/basictypes.h"
-#include "base/gfx/point.h"
-
-#if defined(OS_LINUX)
-typedef struct _GdkEventKey GdkEventKey;
-#endif
-class OSExchangeData;
-
-namespace views {
-
-class View;
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// Event class
-//
-// An event encapsulates an input event that can be propagated into view
-// hierarchies. An event has a type, some flags and a time stamp.
-//
-// Each major event type has a corresponding Event subclass.
-//
-// Events are immutable but support copy
-//
-////////////////////////////////////////////////////////////////////////////////
-class Event {
- public:
- // Event types. (prefixed because of a conflict with windows headers)
- enum EventType { ET_UNKNOWN = 0,
- ET_MOUSE_PRESSED,
- ET_MOUSE_DRAGGED,
- ET_MOUSE_RELEASED,
- ET_MOUSE_MOVED,
- ET_MOUSE_ENTERED,
- ET_MOUSE_EXITED,
- ET_KEY_PRESSED,
- ET_KEY_RELEASED,
- ET_MOUSEWHEEL,
- ET_DROP_TARGET_EVENT };
-
- // Event flags currently supported
- enum EventFlags { EF_SHIFT_DOWN = 1 << 0,
- EF_CONTROL_DOWN = 1 << 1,
- EF_ALT_DOWN = 1 << 2,
- EF_LEFT_BUTTON_DOWN = 1 << 3,
- EF_MIDDLE_BUTTON_DOWN = 1 << 4,
- EF_RIGHT_BUTTON_DOWN = 1 << 5 };
-
- // Return the event type
- EventType GetType() const {
- return type_;
- }
-
- // Return the event time stamp in ticks
- int GetTimeStamp() const {
- return time_stamp_;
- }
-
- // Return the flags
- int GetFlags() const {
- return flags_;
- }
-
- void set_flags(int flags) {
- flags_ = flags;
- }
-
- // Return whether the shift modifier is down
- bool IsShiftDown() const {
- return (flags_ & EF_SHIFT_DOWN) != 0;
- }
-
- // Return whether the control modifier is down
- bool IsControlDown() const {
- return (flags_ & EF_CONTROL_DOWN) != 0;
- }
-
- // Return whether the alt modifier is down
- bool IsAltDown() const {
- return (flags_ & EF_ALT_DOWN) != 0;
- }
-
-#if defined(OS_WIN)
- // Returns the EventFlags in terms of windows flags.
- int GetWindowsFlags() const;
-
- // Convert windows flags to views::Event flags
- static int ConvertWindowsFlags(uint32 win_flags);
-#elif defined(OS_LINUX)
- // Convert the state member on a GdkEvent to views::Event flags
- static int GetFlagsFromGdkState(int state);
-#endif
-
- protected:
- Event(EventType type, int flags);
-
- Event(const Event& model)
- : type_(model.GetType()),
- time_stamp_(model.GetTimeStamp()),
- flags_(model.GetFlags()) {
- }
-
- private:
- void operator=(const Event&);
-
- EventType type_;
- int time_stamp_;
- int flags_;
-};
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// LocatedEvent class
-//
-// A generic event that is used for any events that is located at a specific
-// position in the screen.
-//
-////////////////////////////////////////////////////////////////////////////////
-class LocatedEvent : public Event {
- public:
- LocatedEvent(EventType type, const gfx::Point& location, int flags)
- : Event(type, flags),
- location_(location) {
- }
-
- // Create a new LocatedEvent which is identical to the provided model.
- // If from / to views are provided, the model location will be converted
- // from 'from' coordinate system to 'to' coordinate system
- LocatedEvent(const LocatedEvent& model, View* from, View* to);
-
- // Returns the X location.
- int x() const {
- return location_.x();
- }
-
- // Returns the Y location.
- int y() const {
- return location_.y();
- }
-
- // Returns the location.
- const gfx::Point& location() const {
- return location_;
- }
-
- private:
- gfx::Point location_;
-};
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// MouseEvent class
-//
-// A mouse event is used for any input event related to the mouse.
-//
-////////////////////////////////////////////////////////////////////////////////
-class MouseEvent : public LocatedEvent {
- public:
- // Flags specific to mouse events
- enum MouseEventFlags {
- EF_IS_DOUBLE_CLICK = 1 << 16,
- EF_IS_NON_CLIENT = 1 << 17
- };
-
- // Create a new mouse event
- MouseEvent(EventType type, int x, int y, int flags)
- : LocatedEvent(type, gfx::Point(x, y), flags) {
- }
-
- // Create a new mouse event from a type and a point. If from / to views
- // are provided, the point will be converted from 'from' coordinate system to
- // 'to' coordinate system.
- MouseEvent(EventType type,
- View* from,
- View* to,
- const gfx::Point &l,
- int flags);
-
- // Create a new MouseEvent which is identical to the provided model.
- // If from / to views are provided, the model location will be converted
- // from 'from' coordinate system to 'to' coordinate system
- MouseEvent(const MouseEvent& model, View* from, View* to);
-
- // Conveniences to quickly test what button is down
- bool IsOnlyLeftMouseButton() const {
- return (GetFlags() & EF_LEFT_BUTTON_DOWN) &&
- !(GetFlags() & (EF_MIDDLE_BUTTON_DOWN | EF_RIGHT_BUTTON_DOWN));
- }
-
- bool IsLeftMouseButton() const {
- return (GetFlags() & EF_LEFT_BUTTON_DOWN) != 0;
- }
-
- bool IsOnlyMiddleMouseButton() const {
- return (GetFlags() & EF_MIDDLE_BUTTON_DOWN) &&
- !(GetFlags() & (EF_LEFT_BUTTON_DOWN | EF_RIGHT_BUTTON_DOWN));
- }
-
- bool IsMiddleMouseButton() const {
- return (GetFlags() & EF_MIDDLE_BUTTON_DOWN) != 0;
- }
-
- bool IsOnlyRightMouseButton() const {
- return (GetFlags() & EF_RIGHT_BUTTON_DOWN) &&
- !(GetFlags() & (EF_LEFT_BUTTON_DOWN | EF_MIDDLE_BUTTON_DOWN));
- }
-
- bool IsRightMouseButton() const {
- return (GetFlags() & EF_RIGHT_BUTTON_DOWN) != 0;
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MouseEvent);
-};
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// KeyEvent class
-//
-// A key event is used for any input event related to the keyboard.
-// Note: this event is about key pressed, not typed characters.
-//
-////////////////////////////////////////////////////////////////////////////////
-class KeyEvent : public Event {
- public:
-#if defined(OS_WIN)
- // Create a new key event
- KeyEvent(EventType type, int ch, int repeat_count, int message_flags);
-#elif defined(OS_LINUX)
- explicit KeyEvent(GdkEventKey* event);
-#endif
-
- int GetCharacter() const {
- return character_;
- }
-
-#if defined(OS_WIN)
- bool IsExtendedKey() const;
-#endif
-
- int GetRepeatCount() const {
- return repeat_count_;
- }
-
- private:
-#if defined(OS_WIN)
- int GetKeyStateFlags() const;
-#endif
-
- int character_;
- int repeat_count_;
- int message_flags_;
-
- DISALLOW_EVIL_CONSTRUCTORS(KeyEvent);
-};
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// MouseWheelEvent class
-//
-// A MouseWheelEvent is used to propagate mouse wheel user events
-//
-////////////////////////////////////////////////////////////////////////////////
-class MouseWheelEvent : public LocatedEvent {
- public:
- // Create a new key event
- MouseWheelEvent(int offset, int x, int y, int flags)
- : LocatedEvent(ET_MOUSEWHEEL, gfx::Point(x, y), flags),
- offset_(offset) {
- }
-
- int GetOffset() const {
- return offset_;
- }
-
- private:
- int offset_;
-
- DISALLOW_EVIL_CONSTRUCTORS(MouseWheelEvent);
-};
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// DropTargetEvent class
-//
-// A DropTargetEvent is sent to the view the mouse is over during a drag and
-// drop operation.
-//
-////////////////////////////////////////////////////////////////////////////////
-class DropTargetEvent : public LocatedEvent {
- public:
- DropTargetEvent(const OSExchangeData& data,
- int x,
- int y,
- int source_operations)
- : LocatedEvent(ET_DROP_TARGET_EVENT, gfx::Point(x, y), 0),
- data_(data),
- source_operations_(source_operations) {
- }
-
- // Data associated with the drag/drop session.
- const OSExchangeData& GetData() const { return data_; }
-
- // Bitmask of supported DragDropTypes::DragOperation by the source.
- int GetSourceOperations() const { return source_operations_; }
-
- private:
- const OSExchangeData& data_;
- int source_operations_;
-
- DISALLOW_EVIL_CONSTRUCTORS(DropTargetEvent);
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_EVENT_H_
diff --git a/chrome/views/event_gtk.cc b/chrome/views/event_gtk.cc
deleted file mode 100644
index 6a6482a..0000000
--- a/chrome/views/event_gtk.cc
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/event.h"
-
-#include <gdk/gdk.h>
-
-namespace views {
-
-KeyEvent::KeyEvent(GdkEventKey* event)
- : Event(event->type == GDK_KEY_PRESS ?
- Event::ET_KEY_PRESSED : Event::ET_KEY_RELEASED,
- GetFlagsFromGdkState(event->state)),
- // TODO(erg): All these values are iffy.
- character_(event->keyval),
- repeat_count_(0),
- message_flags_(0) {
-}
-
-int Event::GetFlagsFromGdkState(int state) {
- int flags = 0;
- if (state & GDK_CONTROL_MASK)
- flags |= Event::EF_CONTROL_DOWN;
- if (state & GDK_SHIFT_MASK)
- flags |= Event::EF_SHIFT_DOWN;
- if (state & GDK_MOD1_MASK)
- flags |= Event::EF_ALT_DOWN;
- if (state & GDK_BUTTON1_MASK)
- flags |= Event::EF_LEFT_BUTTON_DOWN;
- if (state & GDK_BUTTON2_MASK)
- flags |= Event::EF_MIDDLE_BUTTON_DOWN;
- if (state & GDK_BUTTON3_MASK)
- flags |= Event::EF_RIGHT_BUTTON_DOWN;
- return flags;
-}
-
-} // namespace views
diff --git a/chrome/views/event_win.cc b/chrome/views/event_win.cc
deleted file mode 100644
index 8d5e805..0000000
--- a/chrome/views/event_win.cc
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/event.h"
-
-#include <windows.h>
-
-namespace views {
-
-int Event::GetWindowsFlags() const {
- // TODO: need support for x1/x2.
- int result = 0;
- result |= (flags_ & EF_SHIFT_DOWN) ? MK_SHIFT : 0;
- result |= (flags_ & EF_CONTROL_DOWN) ? MK_CONTROL : 0;
- result |= (flags_ & EF_LEFT_BUTTON_DOWN) ? MK_LBUTTON : 0;
- result |= (flags_ & EF_MIDDLE_BUTTON_DOWN) ? MK_MBUTTON : 0;
- result |= (flags_ & EF_RIGHT_BUTTON_DOWN) ? MK_RBUTTON : 0;
- return result;
-}
-
-//static
-int Event::ConvertWindowsFlags(UINT win_flags) {
- int r = 0;
- if (win_flags & MK_CONTROL)
- r |= EF_CONTROL_DOWN;
- if (win_flags & MK_SHIFT)
- r |= EF_SHIFT_DOWN;
- if (GetKeyState(VK_MENU) < 0)
- r |= EF_ALT_DOWN;
- if (win_flags & MK_LBUTTON)
- r |= EF_LEFT_BUTTON_DOWN;
- if (win_flags & MK_MBUTTON)
- r |= EF_MIDDLE_BUTTON_DOWN;
- if (win_flags & MK_RBUTTON)
- r |= EF_RIGHT_BUTTON_DOWN;
- return r;
-}
-
-KeyEvent::KeyEvent(EventType type, int ch, int repeat_count, int message_flags)
- : Event(type, GetKeyStateFlags()),
- character_(ch),
- repeat_count_(repeat_count),
- message_flags_(message_flags) {
- }
-
-int KeyEvent::GetKeyStateFlags() const {
- // Windows Keyboard messages don't come with control key state as parameters
- // like mouse messages do, so we need to explicitly probe for these key
- // states.
- int flags = 0;
- if (GetKeyState(VK_MENU) & 0x80)
- flags |= Event::EF_ALT_DOWN;
- if (GetKeyState(VK_SHIFT) & 0x80)
- flags |= Event::EF_SHIFT_DOWN;
- if (GetKeyState(VK_CONTROL) & 0x80)
- flags |= Event::EF_CONTROL_DOWN;
- return flags;
-}
-
-bool KeyEvent::IsExtendedKey() const {
- return (message_flags_ & KF_EXTENDED) == KF_EXTENDED;
-}
-
-} // namespace views
diff --git a/chrome/views/fill_layout.cc b/chrome/views/fill_layout.cc
deleted file mode 100644
index 8c2beee..0000000
--- a/chrome/views/fill_layout.cc
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/fill_layout.h"
-
-#include "base/logging.h"
-
-namespace views {
-
-///////////////////////////////////////////////////////////////////////////////
-// FillLayout
-
-FillLayout::FillLayout() {
-}
-
-FillLayout::~FillLayout() {
-}
-
-void FillLayout::Layout(View* host) {
- if (host->GetChildViewCount() == 0)
- return;
-
- View* frame_view = host->GetChildViewAt(0);
- frame_view->SetBounds(0, 0, host->width(), host->height());
-}
-
-gfx::Size FillLayout::GetPreferredSize(View* host) {
- DCHECK(host->GetChildViewCount() == 1);
- return host->GetChildViewAt(0)->GetPreferredSize();
-}
-
-} // namespace views
diff --git a/chrome/views/fill_layout.h b/chrome/views/fill_layout.h
deleted file mode 100644
index a7ef21b..0000000
--- a/chrome/views/fill_layout.h
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_FILL_LAYOUT_H_
-#define CHROME_VIEWS_FILL_LAYOUT_H_
-
-#include "chrome/views/layout_manager.h"
-#include "chrome/views/view.h"
-
-namespace views {
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// FillLayout
-// A simple LayoutManager that causes the associated view's one child to be
-// sized to match the bounds of its parent.
-//
-///////////////////////////////////////////////////////////////////////////////
-class FillLayout : public LayoutManager {
- public:
- FillLayout();
- virtual ~FillLayout();
-
- // Overridden from LayoutManager:
- virtual void Layout(View* host);
- virtual gfx::Size GetPreferredSize(View* host);
-
- private:
- DISALLOW_EVIL_CONSTRUCTORS(FillLayout);
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_FILL_LAYOUT_H_
diff --git a/chrome/views/focus/external_focus_tracker.cc b/chrome/views/focus/external_focus_tracker.cc
deleted file mode 100644
index 89ea93e..0000000
--- a/chrome/views/focus/external_focus_tracker.cc
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/focus/external_focus_tracker.h"
-
-#include "chrome/views/view.h"
-#include "chrome/views/focus/view_storage.h"
-
-namespace views {
-
-ExternalFocusTracker::ExternalFocusTracker(View* parent_view,
- FocusManager* focus_manager)
- : focus_manager_(focus_manager),
- parent_view_(parent_view) {
- view_storage_ = ViewStorage::GetSharedInstance();
- last_focused_view_storage_id_ = view_storage_->CreateStorageID();
- // Store the view which is focused when we're created.
- StartTracking();
-}
-
-ExternalFocusTracker::~ExternalFocusTracker() {
- view_storage_->RemoveView(last_focused_view_storage_id_);
- if (focus_manager_)
- focus_manager_->RemoveFocusChangeListener(this);
-}
-
-void ExternalFocusTracker::FocusWillChange(View* focused_before,
- View* focused_now) {
- if (focused_now && !parent_view_->IsParentOf(focused_now) &&
- parent_view_ != focused_now) {
- // Store the newly focused view.
- StoreLastFocusedView(focused_now);
- }
-}
-
-void ExternalFocusTracker::FocusLastFocusedExternalView() {
- View* last_focused_view =
- view_storage_->RetrieveView(last_focused_view_storage_id_);
- if (last_focused_view)
- last_focused_view->RequestFocus();
-}
-
-void ExternalFocusTracker::SetFocusManager(FocusManager* focus_manager) {
- if (focus_manager_)
- focus_manager_->RemoveFocusChangeListener(this);
- focus_manager_ = focus_manager;
- if (focus_manager_)
- StartTracking();
-}
-
-void ExternalFocusTracker::StoreLastFocusedView(View* view) {
- view_storage_->RemoveView(last_focused_view_storage_id_);
- // If the view is NULL, remove the last focused view from storage, but don't
- // try to store NULL.
- if (view != NULL)
- view_storage_->StoreView(last_focused_view_storage_id_, view);
-}
-
-void ExternalFocusTracker::StartTracking() {
- StoreLastFocusedView(focus_manager_->GetFocusedView());
- focus_manager_->AddFocusChangeListener(this);
-}
-
-} // namespace views
diff --git a/chrome/views/focus/external_focus_tracker.h b/chrome/views/focus/external_focus_tracker.h
deleted file mode 100644
index 01bb864..0000000
--- a/chrome/views/focus/external_focus_tracker.h
+++ /dev/null
@@ -1,76 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_FOCUS_EXTERNAL_FOCUS_TRACKER_H_
-#define CHROME_VIEWS_FOCUS_EXTERNAL_FOCUS_TRACKER_H_
-
-#include "chrome/views/focus/focus_manager.h"
-
-namespace views {
-
-class View;
-class ViewStorage;
-
-// ExternalFocusTracker tracks the last focused view which belongs to the
-// provided focus manager and is not either the provided parent view or one of
-// its descendants. This is generally used if the parent view want to return
-// focus to some other view once it is dismissed. The parent view and the focus
-// manager must exist for the duration of the tracking. If the focus manager
-// must be deleted before this object is deleted, make sure to call
-// SetFocusManager(NULL) first.
-//
-// Typical use: When a view is added to the view hierarchy, it instantiates an
-// ExternalFocusTracker and passes in itself and its focus manager. Then,
-// when that view wants to return focus to the last focused view which is not
-// itself and not a descandant of itself, (usually when it is being closed)
-// it calls FocusLastFocusedExternalView.
-class ExternalFocusTracker : public FocusChangeListener {
- public:
- ExternalFocusTracker(View* parent_view, FocusManager* focus_manager);
-
- virtual ~ExternalFocusTracker();
- // FocusChangeListener implementation.
- virtual void FocusWillChange(View* focused_before, View* focused_now);
-
- // Focuses last focused view which is not a child of parent view and is not
- // parent view itself. Returns true if focus for a view was requested, false
- // otherwise.
- void FocusLastFocusedExternalView();
-
- // Sets the focus manager whose focus we are tracking. |focus_manager| can
- // be NULL, but no focus changes will be tracked. This is useful if the focus
- // manager went away, but you might later want to start tracking with a new
- // manager later, or call FocusLastFocusedExternalView to focus the previous
- // view.
- void SetFocusManager(FocusManager* focus_manager);
-
- private:
- // Store the provided view. This view will be focused when
- // FocusLastFocusedExternalView is called.
- void StoreLastFocusedView(View* view);
-
- // Store the currently focused view for our view manager and register as a
- // listener for future focus changes.
- void StartTracking();
-
- // Focus manager which we are a listener for.
- FocusManager* focus_manager_;
-
- // ID of the last focused view, which we store in view_storage_.
- int last_focused_view_storage_id_;
-
- // Used to store the last focused view which is not a child of
- // ExternalFocusTracker.
- ViewStorage* view_storage_;
-
- // The parent view of views which we should not track focus changes to. We
- // also do not track changes to parent_view_ itself.
- View* parent_view_;
-
- DISALLOW_EVIL_CONSTRUCTORS(ExternalFocusTracker);
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_FOCUS_EXTERNAL_FOCUS_TRACKER_H_
diff --git a/chrome/views/focus/focus_manager.cc b/chrome/views/focus/focus_manager.cc
deleted file mode 100644
index 9e477e9..0000000
--- a/chrome/views/focus/focus_manager.cc
+++ /dev/null
@@ -1,716 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <algorithm>
-
-#include "base/histogram.h"
-#include "base/logging.h"
-#include "base/win_util.h"
-#include "chrome/browser/renderer_host/render_widget_host_view_win.h"
-#include "chrome/views/accelerator.h"
-#include "chrome/views/focus/focus_manager.h"
-#include "chrome/views/focus/view_storage.h"
-#include "chrome/views/view.h"
-#include "chrome/views/widget/root_view.h"
-#include "chrome/views/widget/widget.h"
-
-// The following keys are used in SetProp/GetProp to associate additional
-// information needed for focus tracking with a window.
-
-// Maps to the FocusManager instance for a top level window. See
-// CreateFocusManager/DestoryFocusManager for usage.
-static const wchar_t* const kFocusManagerKey = L"__VIEW_CONTAINER__";
-
-// Maps to the View associated with a window.
-// We register views with window so we can:
-// - keep in sync the native focus with the view focus (when the native
-// component gets the focus, we get the WM_SETFOCUS event and we can focus the
-// associated view).
-// - prevent tab key events from being sent to views.
-static const wchar_t* const kViewKey = L"__CHROME_VIEW__";
-
-// A property set to 1 to indicate whether the focus manager has subclassed that
-// window. We are doing this to ensure we are not subclassing several times.
-// Subclassing twice is not a problem if no one is subclassing the HWND between
-// the 2 subclassings (the 2nd subclassing is ignored since the WinProc is the
-// same as the current one). However if some other app goes and subclasses the
-// HWND between the 2 subclassings, we will end up subclassing twice.
-// This flag lets us test that whether we have or not subclassed yet.
-static const wchar_t* const kFocusSubclassInstalled =
- L"__FOCUS_SUBCLASS_INSTALLED__";
-
-namespace views {
-
-// Callback installed via InstallFocusSubclass.
-static LRESULT CALLBACK FocusWindowCallback(HWND window, UINT message,
- WPARAM wParam, LPARAM lParam) {
- if (!::IsWindow(window)) {
- // QEMU has reported crashes when calling GetProp (this seems to happen for
- // some weird messages, not sure what they are).
- // Here we are just trying to avoid the crasher.
- NOTREACHED();
- return 0;
- }
-
- WNDPROC original_handler = win_util::GetSuperclassWNDPROC(window);
- DCHECK(original_handler);
- FocusManager* focus_manager = FocusManager::GetFocusManager(window);
- // There are cases when we have no FocusManager for the window. This happens
- // because we subclass certain windows (such as the TabContents window)
- // but that window may not have an associated FocusManager.
- if (focus_manager) {
- switch (message) {
- case WM_SETFOCUS:
- if (!focus_manager->OnSetFocus(window))
- return 0;
- break;
- case WM_NCDESTROY:
- if (!focus_manager->OnNCDestroy(window))
- return 0;
- break;
- case WM_ACTIVATE: {
- // We call the DefWindowProc before calling OnActivate as some of our
- // windows need the OnActivate notifications. The default activation on
- // the window causes it to focus the main window, and since
- // FocusManager::OnActivate attempts to restore the focused view, it
- // needs to be called last so the focus it is setting does not get
- // overridden.
- LRESULT result = CallWindowProc(original_handler, window, WM_ACTIVATE,
- wParam, lParam);
- if (!focus_manager->OnPostActivate(window,
- LOWORD(wParam), HIWORD(wParam)))
- return 0;
- return result;
- }
- default:
- break;
- }
- }
- return CallWindowProc(original_handler, window, message, wParam, lParam);
-}
-
-// FocusManager -----------------------------------------------------
-
-// static
-FocusManager* FocusManager::CreateFocusManager(HWND window,
- RootView* root_view) {
- DCHECK(window);
- DCHECK(root_view);
- InstallFocusSubclass(window, NULL);
- FocusManager* focus_manager = new FocusManager(window, root_view);
- SetProp(window, kFocusManagerKey, focus_manager);
-
- return focus_manager;
-}
-
-// static
-void FocusManager::InstallFocusSubclass(HWND window, View* view) {
- DCHECK(window);
-
- bool already_subclassed =
- reinterpret_cast<bool>(GetProp(window,
- kFocusSubclassInstalled));
- if (already_subclassed &&
- !win_util::IsSubclassed(window, &FocusWindowCallback)) {
- NOTREACHED() << "window sub-classed by someone other than the FocusManager";
- // Track in UMA so we know if this case happens.
- UMA_HISTOGRAM_COUNTS("FocusManager.MultipleSubclass", 1);
- } else {
- win_util::Subclass(window, &FocusWindowCallback);
- SetProp(window, kFocusSubclassInstalled, reinterpret_cast<HANDLE>(true));
- }
- if (view)
- SetProp(window, kViewKey, view);
-}
-
-void FocusManager::UninstallFocusSubclass(HWND window) {
- DCHECK(window);
- if (win_util::Unsubclass(window, &FocusWindowCallback)) {
- RemoveProp(window, kViewKey);
- RemoveProp(window, kFocusSubclassInstalled);
- }
-}
-
-// static
-FocusManager* FocusManager::GetFocusManager(HWND window) {
- DCHECK(window);
-
- // In case parent windows belong to a different process, yet
- // have the kFocusManagerKey property set, we have to be careful
- // to also check the process id of the window we're checking.
- DWORD window_pid = 0, current_pid = GetCurrentProcessId();
- FocusManager* focus_manager;
- for (focus_manager = NULL; focus_manager == NULL && IsWindow(window);
- window = GetParent(window)) {
- GetWindowThreadProcessId(window, &window_pid);
- if (current_pid != window_pid)
- break;
- focus_manager = reinterpret_cast<FocusManager*>(
- GetProp(window, kFocusManagerKey));
- }
- return focus_manager;
-}
-
-// static
-View* FocusManager::GetViewForWindow(HWND window, bool look_in_parents) {
- DCHECK(window);
- do {
- View* v = reinterpret_cast<View*>(GetProp(window, kViewKey));
- if (v)
- return v;
- } while (look_in_parents && (window = ::GetParent(window)));
-
- return NULL;
-}
-
-FocusManager::FocusManager(HWND root, RootView* root_view)
- : root_(root),
- top_root_view_(root_view),
- focused_view_(NULL),
- ignore_set_focus_msg_(false) {
- stored_focused_view_storage_id_ =
- ViewStorage::GetSharedInstance()->CreateStorageID();
- DCHECK(root_);
-}
-
-FocusManager::~FocusManager() {
- // If there are still registered FocusChange listeners, chances are they were
- // leaked so warn about them.
- DCHECK(focus_change_listeners_.empty());
-}
-
-// Message handlers.
-bool FocusManager::OnSetFocus(HWND window) {
- if (ignore_set_focus_msg_)
- return true;
-
- // Focus the view associated with that window.
- View* v = static_cast<View*>(GetProp(window, kViewKey));
- if (v && v->IsFocusable()) {
- v->GetRootView()->FocusView(v);
- } else {
- SetFocusedView(NULL);
- }
-
- return true;
-}
-
-bool FocusManager::OnNCDestroy(HWND window) {
- // Window is being destroyed, undo the subclassing.
- FocusManager::UninstallFocusSubclass(window);
-
- if (window == root_) {
- // We are the top window.
-
- DCHECK(GetProp(window, kFocusManagerKey));
-
- // Make sure this is called on the window that was set with the
- // FocusManager.
- RemoveProp(window, kFocusManagerKey);
-
- delete this;
- }
- return true;
-}
-
-bool FocusManager::OnKeyDown(HWND window, UINT message, WPARAM wparam,
- LPARAM lparam) {
- DCHECK((message == WM_KEYDOWN) || (message == WM_SYSKEYDOWN));
-
- if (!IsWindowVisible(root_)) {
- // We got a message for a hidden window. Because WidgetWin::Close hides the
- // window, then destroys it, it it possible to get a message after we've
- // hidden the window. If we allow the message to be dispatched chances are
- // we'll crash in some weird place. By returning false we make sure the
- // message isn't dispatched.
- return false;
- }
-
- // First give the registered keystroke handlers a chance a processing
- // the message
- // Do some basic checking to try to catch evil listeners that change the list
- // from under us.
- KeystrokeListenerList::size_type original_count =
- keystroke_listeners_.size();
- for (int i = 0; i < static_cast<int>(keystroke_listeners_.size()); i++) {
- if (keystroke_listeners_[i]->ProcessKeyStroke(window, message, wparam,
- lparam)) {
- return false;
- }
- }
- DCHECK_EQ(original_count, keystroke_listeners_.size())
- << "KeystrokeListener list modified during notification";
-
- int virtual_key_code = static_cast<int>(wparam);
- // Intercept Tab related messages for focus traversal.
- // Note that we don't do focus traversal if the root window is not part of the
- // active window hierarchy as this would mean we have no focused view and
- // would focus the first focusable view.
- HWND active_window = ::GetActiveWindow();
- if ((active_window == root_ || ::IsChild(active_window, root_)) &&
- (virtual_key_code == VK_TAB) && !win_util::IsCtrlPressed()) {
- if (!focused_view_ || !focused_view_->CanProcessTabKeyEvents()) {
- AdvanceFocus(win_util::IsShiftPressed());
- return false;
- }
- }
-
- // Intercept arrow key messages to switch between grouped views.
- if (focused_view_ && focused_view_->GetGroup() != -1 &&
- (virtual_key_code == VK_UP || virtual_key_code == VK_DOWN ||
- virtual_key_code == VK_LEFT || virtual_key_code == VK_RIGHT)) {
- bool next = (virtual_key_code == VK_RIGHT || virtual_key_code == VK_DOWN);
- std::vector<View*> views;
- focused_view_->GetParent()->GetViewsWithGroup(focused_view_->GetGroup(),
- &views);
- std::vector<View*>::const_iterator iter = std::find(views.begin(),
- views.end(),
- focused_view_);
- DCHECK(iter != views.end());
- int index = static_cast<int>(iter - views.begin());
- index += next ? 1 : -1;
- if (index < 0) {
- index = static_cast<int>(views.size()) - 1;
- } else if (index >= static_cast<int>(views.size())) {
- index = 0;
- }
- views[index]->RequestFocus();
- return false;
- }
-
- int repeat_count = LOWORD(lparam);
- int flags = HIWORD(lparam);
- if (focused_view_ &&
- !focused_view_->ShouldLookupAccelerators(KeyEvent(
- Event::ET_KEY_PRESSED, virtual_key_code,
- repeat_count, flags))) {
- // This should not be processed as an accelerator.
- return true;
- }
-
- // Process keyboard accelerators.
- // We process accelerators here as we have no way of knowing if a HWND has
- // really processed a key event. If the key combination matches an
- // accelerator, the accelerator is triggered, otherwise we forward the
- // event to the HWND.
- Accelerator accelerator(Accelerator(static_cast<int>(virtual_key_code),
- win_util::IsShiftPressed(),
- win_util::IsCtrlPressed(),
- win_util::IsAltPressed()));
- if (ProcessAccelerator(accelerator)) {
- // If a shortcut was activated for this keydown message, do not
- // propagate the message further.
- return false;
- }
- return true;
-}
-
-bool FocusManager::OnKeyUp(HWND window, UINT message, WPARAM wparam,
- LPARAM lparam) {
- for (int i = 0; i < static_cast<int>(keystroke_listeners_.size()); ++i) {
- if (keystroke_listeners_[i]->ProcessKeyStroke(window, message, wparam,
- lparam)) {
- return false;
- }
- }
-
- return true;
-}
-
-bool FocusManager::OnPostActivate(HWND window,
- int activation_state,
- int minimized_state) {
- if (WA_INACTIVE == LOWORD(activation_state)) {
- StoreFocusedView();
- } else {
- RestoreFocusedView();
- }
- return false;
-}
-
-void FocusManager::ValidateFocusedView() {
- if (focused_view_) {
- if (!ContainsView(focused_view_)) {
- focused_view_ = NULL;
- }
- }
-}
-
-// Tests whether a view is valid, whether it still belongs to the window
-// hierarchy of the FocusManager.
-bool FocusManager::ContainsView(View* view) {
- DCHECK(view);
- RootView* root_view = view->GetRootView();
- if (!root_view)
- return false;
-
- Widget* widget = root_view->GetWidget();
- if (!widget)
- return false;
-
- HWND window = widget->GetNativeView();
- while (window) {
- if (window == root_)
- return true;
- window = ::GetParent(window);
- }
- return false;
-}
-
-void FocusManager::AdvanceFocus(bool reverse) {
- View* v = GetNextFocusableView(focused_view_, reverse, false);
- // Note: Do not skip this next block when v == focused_view_. If the user
- // tabs past the last focusable element in a webpage, we'll get here, and if
- // the TabContentsContainerView is the only focusable view (possible in
- // fullscreen mode), we need to run this block in order to cycle around to the
- // first element on the page.
- if (v) {
- v->AboutToRequestFocusFromTabTraversal(reverse);
- v->RequestFocus();
- }
-}
-
-View* FocusManager::GetNextFocusableView(View* original_starting_view,
- bool reverse,
- bool dont_loop) {
- FocusTraversable* focus_traversable = NULL;
-
- // Let's revalidate the focused view.
- ValidateFocusedView();
-
- View* starting_view = NULL;
- if (original_starting_view) {
- // If the starting view has a focus traversable, use it.
- // This is the case with WidgetWins for example.
- focus_traversable = original_starting_view->GetFocusTraversable();
-
- // Otherwise default to the root view.
- if (!focus_traversable) {
- focus_traversable = original_starting_view->GetRootView();
- starting_view = original_starting_view;
- }
- } else {
- focus_traversable = top_root_view_;
- }
-
- // Traverse the FocusTraversable tree down to find the focusable view.
- View* v = FindFocusableView(focus_traversable, starting_view,
- reverse, dont_loop);
- if (v) {
- return v;
- } else {
- // Let's go up in the FocusTraversable tree.
- FocusTraversable* parent_focus_traversable =
- focus_traversable->GetFocusTraversableParent();
- starting_view = focus_traversable->GetFocusTraversableParentView();
- while (parent_focus_traversable) {
- FocusTraversable* new_focus_traversable = NULL;
- View* new_starting_view = NULL;
- v = parent_focus_traversable ->FindNextFocusableView(
- starting_view, reverse, FocusTraversable::UP, dont_loop,
- &new_focus_traversable, &new_starting_view);
-
- if (new_focus_traversable) {
- DCHECK(!v);
-
- // There is a FocusTraversable, traverse it down.
- v = FindFocusableView(new_focus_traversable, NULL, reverse, dont_loop);
- }
-
- if (v)
- return v;
-
- starting_view = focus_traversable->GetFocusTraversableParentView();
- parent_focus_traversable =
- parent_focus_traversable->GetFocusTraversableParent();
- }
-
- if (!dont_loop) {
- // If we get here, we have reached the end of the focus hierarchy, let's
- // loop.
- if (reverse) {
- // When reversing from the top, the next focusable view is at the end
- // of the focus hierarchy.
- return FindLastFocusableView();
- } else {
- // Easy, just clear the selection and press tab again.
- if (original_starting_view) { // Make sure there was at least a view to
- // start with, to prevent infinitely
- // looping in empty windows.
- // By calling with NULL as the starting view, we'll start from the
- // top_root_view.
- return GetNextFocusableView(NULL, false, true);
- }
- }
- }
- }
- return NULL;
-}
-
-View* FocusManager::FindLastFocusableView() {
- // Just walk the entire focus loop from where we're at until we reach the end.
- View* new_focused = NULL;
- View* last_focused = focused_view_;
- while (new_focused = GetNextFocusableView(last_focused, false, true))
- last_focused = new_focused;
- return last_focused;
-}
-
-void FocusManager::SetFocusedView(View* view) {
- if (focused_view_ != view) {
- View* prev_focused_view = focused_view_;
- if (focused_view_)
- focused_view_->WillLoseFocus();
-
- if (view)
- view->WillGainFocus();
-
- // Notified listeners that the focus changed.
- FocusChangeListenerList::const_iterator iter;
- for (iter = focus_change_listeners_.begin();
- iter != focus_change_listeners_.end(); ++iter) {
- (*iter)->FocusWillChange(prev_focused_view, view);
- }
-
- focused_view_ = view;
-
- if (prev_focused_view)
- prev_focused_view->SchedulePaint(); // Remove focus artifacts.
-
- if (view) {
- view->SchedulePaint();
- view->Focus();
- view->DidGainFocus();
- }
- }
-}
-
-void FocusManager::ClearFocus() {
- SetFocusedView(NULL);
- ClearHWNDFocus();
-}
-
-void FocusManager::ClearHWNDFocus() {
- // Keep the top root window focused so we get keyboard events.
- ignore_set_focus_msg_ = true;
- ::SetFocus(root_);
- ignore_set_focus_msg_ = false;
-}
-
-void FocusManager::FocusHWND(HWND hwnd) {
- ignore_set_focus_msg_ = true;
- // Only reset focus if hwnd is not already focused.
- if (hwnd && ::GetFocus() != hwnd)
- ::SetFocus(hwnd);
- ignore_set_focus_msg_ = false;
-}
-
-void FocusManager::StoreFocusedView() {
- ViewStorage* view_storage = ViewStorage::GetSharedInstance();
- if (!view_storage) {
- // This should never happen but bug 981648 seems to indicate it could.
- NOTREACHED();
- return;
- }
-
- // TODO (jcampan): when a TabContents containing a popup is closed, the focus
- // is stored twice causing an assert. We should find a better alternative than
- // removing the view from the storage explicitly.
- view_storage->RemoveView(stored_focused_view_storage_id_);
-
- if (!focused_view_)
- return;
-
- view_storage->StoreView(stored_focused_view_storage_id_, focused_view_);
-
- View* v = focused_view_;
- focused_view_ = NULL;
-
- if (v)
- v->SchedulePaint(); // Remove focus border.
-}
-
-void FocusManager::RestoreFocusedView() {
- ViewStorage* view_storage = ViewStorage::GetSharedInstance();
- if (!view_storage) {
- // This should never happen but bug 981648 seems to indicate it could.
- NOTREACHED();
- return;
- }
-
- View* view = view_storage->RetrieveView(stored_focused_view_storage_id_);
- if (view) {
- if (ContainsView(view))
- view->RequestFocus();
- } else {
- // Clearing the focus will focus the root window, so we still get key
- // events.
- ClearFocus();
- }
-}
-
-void FocusManager::ClearStoredFocusedView() {
- ViewStorage* view_storage = ViewStorage::GetSharedInstance();
- if (!view_storage) {
- // This should never happen but bug 981648 seems to indicate it could.
- NOTREACHED();
- return;
- }
- view_storage->RemoveView(stored_focused_view_storage_id_);
-}
-
-FocusManager* FocusManager::GetParentFocusManager() const {
- HWND parent = ::GetParent(root_);
- // If we are a top window, we don't have a parent FocusManager.
- if (!parent)
- return NULL;
-
- return GetFocusManager(parent);
-}
-
-// Find the next (previous if reverse is true) focusable view for the specified
-// FocusTraversable, starting at the specified view, traversing down the
-// FocusTraversable hierarchy.
-View* FocusManager::FindFocusableView(FocusTraversable* focus_traversable,
- View* starting_view,
- bool reverse,
- bool dont_loop) {
- FocusTraversable* new_focus_traversable = NULL;
- View* new_starting_view = NULL;
- View* v = focus_traversable->FindNextFocusableView(starting_view,
- reverse,
- FocusTraversable::DOWN,
- dont_loop,
- &new_focus_traversable,
- &new_starting_view);
-
- // Let's go down the FocusTraversable tree as much as we can.
- while (new_focus_traversable) {
- DCHECK(!v);
- focus_traversable = new_focus_traversable;
- starting_view = new_starting_view;
- new_focus_traversable = NULL;
- starting_view = NULL;
- v = focus_traversable->FindNextFocusableView(starting_view,
- reverse,
- FocusTraversable::DOWN,
- dont_loop,
- &new_focus_traversable,
- &new_starting_view);
- }
- return v;
-}
-
-AcceleratorTarget* FocusManager::RegisterAccelerator(
- const Accelerator& accelerator,
- AcceleratorTarget* target) {
- AcceleratorMap::const_iterator iter = accelerators_.find(accelerator);
- AcceleratorTarget* previous_target = NULL;
- if (iter != accelerators_.end())
- previous_target = iter->second;
-
- accelerators_[accelerator] = target;
-
- return previous_target;
-}
-
-void FocusManager::UnregisterAccelerator(const Accelerator& accelerator,
- AcceleratorTarget* target) {
- AcceleratorMap::iterator iter = accelerators_.find(accelerator);
- if (iter == accelerators_.end()) {
- NOTREACHED() << "Unregistering non-existing accelerator";
- return;
- }
-
- if (iter->second != target) {
- NOTREACHED() << "Unregistering accelerator for wrong target";
- return;
- }
-
- accelerators_.erase(iter);
-}
-
-void FocusManager::UnregisterAccelerators(AcceleratorTarget* target) {
- for (AcceleratorMap::iterator iter = accelerators_.begin();
- iter != accelerators_.end();) {
- if (iter->second == target)
- accelerators_.erase(iter++);
- else
- ++iter;
- }
-}
-
-bool FocusManager::ProcessAccelerator(const Accelerator& accelerator) {
- FocusManager* focus_manager = this;
- do {
- AcceleratorTarget* target =
- focus_manager->GetTargetForAccelerator(accelerator);
- if (target) {
- // If there is focused view, we give it a chance to process that
- // accelerator.
- if (!focused_view_ ||
- !focused_view_->OverrideAccelerator(accelerator)) {
- if (target->AcceleratorPressed(accelerator))
- return true;
- }
- }
-
- // When dealing with child windows that have their own FocusManager (such
- // as ConstrainedWindow), we still want the parent FocusManager to process
- // the accelerator if the child window did not process it.
- focus_manager = focus_manager->GetParentFocusManager();
- } while (focus_manager);
- return false;
-}
-
-AcceleratorTarget* FocusManager::GetTargetForAccelerator(
- const Accelerator& accelerator) const {
- AcceleratorMap::const_iterator iter = accelerators_.find(accelerator);
- if (iter != accelerators_.end())
- return iter->second;
- return NULL;
-}
-
-void FocusManager::ViewRemoved(View* parent, View* removed) {
- if (focused_view_ && focused_view_ == removed)
- focused_view_ = NULL;
-}
-
-void FocusManager::AddKeystrokeListener(KeystrokeListener* listener) {
- DCHECK(std::find(keystroke_listeners_.begin(), keystroke_listeners_.end(),
- listener) == keystroke_listeners_.end())
- << "Adding a listener twice.";
- keystroke_listeners_.push_back(listener);
-}
-
-void FocusManager::RemoveKeystrokeListener(KeystrokeListener* listener) {
- KeystrokeListenerList::iterator place =
- std::find(keystroke_listeners_.begin(), keystroke_listeners_.end(),
- listener);
- if (place == keystroke_listeners_.end()) {
- NOTREACHED() << "Removing a listener that isn't registered.";
- return;
- }
- keystroke_listeners_.erase(place);
-}
-
-void FocusManager::AddFocusChangeListener(FocusChangeListener* listener) {
- DCHECK(std::find(focus_change_listeners_.begin(),
- focus_change_listeners_.end(), listener) ==
- focus_change_listeners_.end()) << "Adding a listener twice.";
- focus_change_listeners_.push_back(listener);
-}
-
-void FocusManager::RemoveFocusChangeListener(FocusChangeListener* listener) {
- FocusChangeListenerList::iterator place =
- std::find(focus_change_listeners_.begin(), focus_change_listeners_.end(),
- listener);
- if (place == focus_change_listeners_.end()) {
- NOTREACHED() << "Removing a listener that isn't registered.";
- return;
- }
- focus_change_listeners_.erase(place);
-}
-
-} // namespace views
diff --git a/chrome/views/focus/focus_manager.h b/chrome/views/focus/focus_manager.h
deleted file mode 100644
index 4a32c0d..0000000
--- a/chrome/views/focus/focus_manager.h
+++ /dev/null
@@ -1,343 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_FOCUS_FOCUS_MANAGER_H_
-#define CHROME_VIEWS_FOCUS_FOCUS_MANAGER_H_
-
-#include "base/basictypes.h"
-
-#if defined(OS_WIN)
-#include <windows.h>
-#endif
-#include <vector>
-#include <map>
-
-#include "chrome/views/accelerator.h"
-
-// The FocusManager class is used to handle focus traversal, store/restore
-// focused views and handle keyboard accelerators.
-//
-// There are 2 types of focus:
-// - the native focus, which is the focus that an HWND has.
-// - the view focus, which is the focus that a views::View has.
-//
-// Each native view must register with their Focus Manager so the focus manager
-// gets notified when they are focused (and keeps track of the native focus) and
-// as well so that the tab key events can be intercepted.
-// They can provide when they register a View that is kept in synch in term of
-// focus. This is used in NativeControl for example, where a View wraps an
-// actual native window.
-// This is already done for you if you subclass the NativeControl class or if
-// you use the HWNDView class.
-//
-// When creating a top window, if it derives from WidgetWin, the
-// |has_own_focus_manager| of the Init method lets you specify whether that
-// window should have its own focus manager (so focus traversal stays confined
-// in that window). If you are not deriving from WidgetWin or one of its
-// derived classes (Window, FramelessWindow, ConstrainedWindow), you must
-// create a FocusManager when the window is created (it is automatically deleted
-// when the window is destroyed).
-//
-// The FocusTraversable interface exposes the methods a class should implement
-// in order to be able to be focus traversed when tab key is pressed.
-// RootViews implement FocusTraversable.
-// The FocusManager contains a top FocusTraversable instance, which is the top
-// RootView.
-//
-// If you just use views, then the focus traversal is handled for you by the
-// RootView. The default traversal order is the order in which the views have
-// been added to their container. You can modify this order by using the View
-// method SetNextFocusableView().
-//
-// If you are embedding a native view containing a nested RootView (for example
-// by adding a NativeControl that contains a WidgetWin as its native
-// component), then you need to:
-// - override the View::GetFocusTraversable() method in your outter component.
-// It should return the RootView of the inner component. This is used when
-// the focus traversal traverse down the focus hierarchy to enter the nested
-// RootView. In the example mentioned above, the NativeControl overrides
-// GetFocusTraversable() and returns hwnd_view_container_->GetRootView().
-// - call RootView::SetFocusTraversableParent() on the nested RootView and point
-// it to the outter RootView. This is used when the focus goes out of the
-// nested RootView. In the example:
-// hwnd_view_container_->GetRootView()->SetFocusTraversableParent(
-// native_control->GetRootView());
-// - call RootView::SetFocusTraversableParentView() on the nested RootView with
-// the parent view that directly contains the native window. This is needed
-// when traversing up from the nested RootView to know which view to start
-// with when going to the next/previous view.
-// In our example:
-// hwnd_view_container_->GetRootView()->SetFocusTraversableParent(
-// native_control);
-//
-// Note that FocusTraversable do not have to be RootViews: TabContents is
-// FocusTraversable.
-
-namespace views {
-
-class View;
-class RootView;
-
-// The FocusTraversable interface is used by components that want to process
-// focus traversal events (due to Tab/Shift-Tab key events).
-class FocusTraversable {
- public:
- // The direction in which the focus traversal is going.
- // TODO (jcampan): add support for lateral (left, right) focus traversal. The
- // goal is to switch to focusable views on the same level when using the arrow
- // keys (ala Windows: in a dialog box, arrow keys typically move between the
- // dialog OK, Cancel buttons).
- enum Direction {
- UP = 0,
- DOWN
- };
-
- // Should find the next view that should be focused and return it. If a
- // FocusTraversable is found while searching for the focusable view, NULL
- // should be returned, focus_traversable should be set to the FocusTraversable
- // and focus_traversable_view should be set to the view associated with the
- // FocusTraversable.
- // This call should return NULL if the end of the focus loop is reached.
- // - |starting_view| is the view that should be used as the starting point
- // when looking for the previous/next view. It may be NULL (in which case
- // the first/last view should be used depending if normal/reverse).
- // - |reverse| whether we should find the next (reverse is false) or the
- // previous (reverse is true) view.
- // - |direction| specifies whether we are traversing down (meaning we should
- // look into child views) or traversing up (don't look at child views).
- // - |dont_loop| if true specifies that if there is a loop in the focus
- // hierarchy, we should keep traversing after the last view of the loop.
- // - |focus_traversable| is set to the focus traversable that should be
- // traversed if one is found (in which case the call returns NULL).
- // - |focus_traversable_view| is set to the view associated with the
- // FocusTraversable set in the previous parameter (it is used as the
- // starting view when looking for the next focusable view).
-
- virtual View* FindNextFocusableView(View* starting_view,
- bool reverse,
- Direction direction,
- bool dont_loop,
- FocusTraversable** focus_traversable,
- View** focus_traversable_view) = 0;
-
- // Should return the parent FocusTraversable.
- // The top RootView which is the top FocusTraversable returns NULL.
- virtual FocusTraversable* GetFocusTraversableParent() = 0;
-
- // This should return the View this FocusTraversable belongs to.
- // It is used when walking up the view hierarchy tree to find which view
- // should be used as the starting view for finding the next/previous view.
- virtual View* GetFocusTraversableParentView() = 0;
-};
-
-// The KeystrokeListener interface is used by components (such as the
-// ExternalTabContainer class) which need a crack at handling all
-// keystrokes.
-class KeystrokeListener {
- public:
- // If this returns true, then the component handled the keystroke and ate
- // it.
-#if defined(OS_WIN)
- virtual bool ProcessKeyStroke(HWND window, UINT message, WPARAM wparam,
- LPARAM lparam) = 0;
-#endif
-};
-
-// This interface should be implemented by classes that want to be notified when
-// the focus is about to change. See the Add/RemoveFocusChangeListener methods.
-class FocusChangeListener {
- public:
- virtual void FocusWillChange(View* focused_before, View* focused_now) = 0;
-};
-
-class FocusManager {
- public:
-#if defined(OS_WIN)
- // Creates a FocusManager for the specified window. Top level windows
- // must invoked this when created.
- // The RootView specified should be the top RootView of the window.
- // This also invokes InstallFocusSubclass.
- static FocusManager* CreateFocusManager(HWND window, RootView* root_view);
-
- // Subclasses the specified window. The subclassed window procedure listens
- // for WM_SETFOCUS notification and keeps the FocusManager's focus owner
- // property in sync.
- // It's not necessary to explicitly invoke Uninstall, it's automatically done
- // when the window is destroyed and Uninstall wasn't invoked.
- static void InstallFocusSubclass(HWND window, View* view);
-
- // Uninstalls the window subclass installed by InstallFocusSubclass.
- static void UninstallFocusSubclass(HWND window);
-
- static FocusManager* GetFocusManager(HWND window);
-
- // Message handlers (for messages received from registered windows).
- // Should return true if the message should be forwarded to the window
- // original proc function, false otherwise.
- bool OnSetFocus(HWND window);
- bool OnNCDestroy(HWND window);
- // OnKeyDown covers WM_KEYDOWN and WM_SYSKEYDOWN.
- bool OnKeyDown(HWND window,
- UINT message,
- WPARAM wparam,
- LPARAM lparam);
- bool OnKeyUp(HWND window,
- UINT message,
- WPARAM wparam,
- LPARAM lparam);
- // OnPostActivate is called after WM_ACTIVATE has been propagated to the
- // DefWindowProc.
- bool OnPostActivate(HWND window, int activation_state, int minimized_state);
-#endif
-
- // Returns true is the specified is part of the hierarchy of the window
- // associated with this FocusManager.
- bool ContainsView(View* view);
-
- // Advances the focus (backward if reverse is true).
- void AdvanceFocus(bool reverse);
-
- // The FocusManager is handling the selected view for the RootView.
- View* GetFocusedView() const { return focused_view_; }
- void SetFocusedView(View* view);
-
- // Clears the focused view. The window associated with the top root view gets
- // the native focus (so we still get keyboard events).
- void ClearFocus();
-
- // Clears the HWND that has the focus by focusing the HWND from the top
- // RootView (so we still get keyboard events).
- // Note that this does not change the currently focused view.
- void ClearHWNDFocus();
-
-#if defined(OS_WIN)
- // Focus the specified |hwnd| without changing the focused view.
- void FocusHWND(HWND hwnd);
-#endif
-
- // Validates the focused view, clearing it if the window it belongs too is not
- // attached to the window hierarchy anymore.
- void ValidateFocusedView();
-
-#if defined(OS_WIN)
- // Returns the view associated with the specified window if any.
- // If |look_in_parents| is true, it goes up the window parents until it find
- // a view.
- static View* GetViewForWindow(HWND window, bool look_in_parents);
-#endif
-
- // Stores and restores the focused view. Used when the window becomes
- // active/inactive.
- void StoreFocusedView();
- void RestoreFocusedView();
-
- // Clears the stored focused view.
- void ClearStoredFocusedView();
-
- // Returns the FocusManager of the parent window of the window that is the
- // root of this FocusManager. This is useful with ConstrainedWindows that have
- // their own FocusManager and need to return focus to the browser when closed.
- FocusManager* GetParentFocusManager() const;
-
- // Register a keyboard accelerator for the specified target. If an
- // AcceleratorTarget is already registered for that accelerator, it is
- // returned.
- // Note that we are currently limited to accelerators that are either:
- // - a key combination including Ctrl or Alt
- // - the escape key
- // - the enter key
- // - any F key (F1, F2, F3 ...)
- // - any browser specific keys (as available on special keyboards)
- AcceleratorTarget* RegisterAccelerator(const Accelerator& accelerator,
- AcceleratorTarget* target);
-
- // Unregister the specified keyboard accelerator for the specified target.
- void UnregisterAccelerator(const Accelerator& accelerator,
- AcceleratorTarget* target);
-
- // Unregister all keyboard accelerator for the specified target.
- void UnregisterAccelerators(AcceleratorTarget* target);
-
- // Activate the target associated with the specified accelerator if any.
- // Returns true if an accelerator was activated.
- bool ProcessAccelerator(const Accelerator& accelerator);
-
- // Called by a RootView when a view within its hierarchy is removed from its
- // parent. This will only be called by a RootView in a hierarchy of Widgets
- // that this FocusManager is attached to the parent Widget of.
- void ViewRemoved(View* parent, View* removed);
-
- void AddKeystrokeListener(KeystrokeListener* listener);
- void RemoveKeystrokeListener(KeystrokeListener* listener);
-
- // Adds/removes a listener. The FocusChangeListener is notified every time
- // the focused view is about to change.
- void AddFocusChangeListener(FocusChangeListener* listener);
- void RemoveFocusChangeListener(FocusChangeListener* listener);
-
- // Returns the AcceleratorTarget that should be activated for the specified
- // keyboard accelerator, or NULL if no view is registered for that keyboard
- // accelerator.
- // TODO(finnur): http://b/1307173 Make this private once the bug is fixed.
- AcceleratorTarget* GetTargetForAccelerator(
- const Accelerator& accelerator) const;
-
- private:
-#if defined(OS_WIN)
- explicit FocusManager(HWND root, RootView* root_view);
-#endif
- ~FocusManager();
-
- // Returns the next focusable view.
- View* GetNextFocusableView(View* starting_view, bool reverse, bool dont_loop);
-
- // Returns the last view of the focus traversal hierarchy.
- View* FindLastFocusableView();
-
- // Returns the focusable view found in the FocusTraversable specified starting
- // at the specified view. This traverses down along the FocusTraversable
- // hierarchy.
- // Returns NULL if no focusable view were found.
- View* FindFocusableView(FocusTraversable* focus_traversable,
- View* starting_view,
- bool reverse,
- bool dont_loop);
-
- // The RootView of the window associated with this FocusManager.
- RootView* top_root_view_;
-
- // The view that currently is focused.
- View* focused_view_;
-
- // The storage id used in the ViewStorage to store/restore the view that last
- // had focus.
- int stored_focused_view_storage_id_;
-
-#if defined(OS_WIN)
- // The window associated with this focus manager.
- HWND root_;
-#endif
-
- // Used to allow setting the focus on an HWND without changing the currently
- // focused view.
- bool ignore_set_focus_msg_;
-
- // The accelerators and associated targets.
- typedef std::map<Accelerator, AcceleratorTarget*> AcceleratorMap;
- AcceleratorMap accelerators_;
-
- // The list of registered keystroke listeners
- typedef std::vector<KeystrokeListener*> KeystrokeListenerList;
- KeystrokeListenerList keystroke_listeners_;
-
- // The list of registered FocusChange listeners.
- typedef std::vector<FocusChangeListener*> FocusChangeListenerList;
- FocusChangeListenerList focus_change_listeners_;
-
- DISALLOW_COPY_AND_ASSIGN(FocusManager);
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_FOCUS_MANAGER_H_
diff --git a/chrome/views/focus/focus_manager_unittest.cc b/chrome/views/focus/focus_manager_unittest.cc
deleted file mode 100644
index 613f701..0000000
--- a/chrome/views/focus/focus_manager_unittest.cc
+++ /dev/null
@@ -1,665 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Disabled right now as this won't work on BuildBots right now as this test
-// require the box it runs on to be unlocked (and no screen-savers).
-// The test actually simulates mouse and key events, so if the screen is locked,
-// the events don't go to the Chrome window.
-#include "testing/gtest/include/gtest/gtest.h"
-
-#include "app/resource_bundle.h"
-#include "base/gfx/rect.h"
-#include "chrome/views/background.h"
-#include "chrome/views/border.h"
-#include "chrome/views/controls/button/checkbox.h"
-#include "chrome/views/controls/button/native_button.h"
-#include "chrome/views/controls/button/radio_button.h"
-#include "chrome/views/controls/label.h"
-#include "chrome/views/controls/link.h"
-#include "chrome/views/controls/scroll_view.h"
-#include "chrome/views/controls/tabbed_pane.h"
-#include "chrome/views/controls/text_field.h"
-#include "chrome/views/widget/accelerator_handler.h"
-#include "chrome/views/widget/root_view.h"
-#include "chrome/views/widget/widget_win.h"
-#include "chrome/views/window/window.h"
-#include "chrome/views/window/window_delegate.h"
-#include "SkColor.h"
-
-
-namespace {
-
-static const int kWindowWidth = 600;
-static const int kWindowHeight = 500;
-
-static int count = 1;
-
-static const int kTopCheckBoxID = count++; // 1
-static const int kLeftContainerID = count++;
-static const int kAppleLabelID = count++;
-static const int kAppleTextFieldID = count++;
-static const int kOrangeLabelID = count++; // 5
-static const int kOrangeTextFieldID = count++;
-static const int kBananaLabelID = count++;
-static const int kBananaTextFieldID = count++;
-static const int kKiwiLabelID = count++;
-static const int kKiwiTextFieldID = count++; // 10
-static const int kFruitButtonID = count++;
-static const int kFruitCheckBoxID = count++;
-
-static const int kRightContainerID = count++;
-static const int kAsparagusButtonID = count++;
-static const int kBroccoliButtonID = count++; // 15
-static const int kCauliflowerButtonID = count++;
-
-static const int kInnerContainerID = count++;
-static const int kScrollViewID = count++;
-static const int kScrollContentViewID = count++;
-static const int kRosettaLinkID = count++; // 20
-static const int kStupeurEtTremblementLinkID = count++;
-static const int kDinerGameLinkID = count++;
-static const int kRidiculeLinkID = count++;
-static const int kClosetLinkID = count++;
-static const int kVisitingLinkID = count++; // 25
-static const int kAmelieLinkID = count++;
-static const int kJoyeuxNoelLinkID = count++;
-static const int kCampingLinkID = count++;
-static const int kBriceDeNiceLinkID = count++;
-static const int kTaxiLinkID = count++; // 30
-static const int kAsterixLinkID = count++;
-
-static const int kOKButtonID = count++;
-static const int kCancelButtonID = count++;
-static const int kHelpButtonID = count++;
-
-static const int kStyleContainerID = count++; // 35
-static const int kBoldCheckBoxID = count++;
-static const int kItalicCheckBoxID = count++;
-static const int kUnderlinedCheckBoxID = count++;
-
-static const int kSearchContainerID = count++;
-static const int kSearchTextFieldID = count++; // 40
-static const int kSearchButtonID = count++;
-static const int kHelpLinkID = count++;
-
-static const int kThumbnailContainerID = count++;
-static const int kThumbnailStarID = count++;
-static const int kThumbnailSuperStarID = count++;
-
-class FocusManagerTest;
-
-// BorderView is a NativeControl that creates a tab control as its child and
-// takes a View to add as the child of the tab control. The tab control is used
-// to give a nice background for the view. At some point we'll have a real
-// wrapper for TabControl, and this can be nuked in favor of it.
-// Taken from keyword_editor_view.cc.
-// It is interesting in our test as it is a native control containing another
-// RootView.
-class BorderView : public views::NativeControl {
- public:
- explicit BorderView(View* child) : child_(child) {
- DCHECK(child);
- SetFocusable(false);
- }
-
- virtual ~BorderView() {}
-
- virtual HWND CreateNativeControl(HWND parent_container) {
- // Create the tab control.
- HWND tab_control = ::CreateWindowEx(GetAdditionalExStyle(),
- WC_TABCONTROL,
- L"",
- WS_CHILD,
- 0, 0, width(), height(),
- parent_container, NULL, NULL, NULL);
- // Create the view container which is a child of the TabControl.
- widget_ = new views::WidgetWin();
- widget_->Init(tab_control, gfx::Rect(), false);
- widget_->SetContentsView(child_);
- widget_->SetFocusTraversableParentView(this);
- ResizeContents(tab_control);
- return tab_control;
- }
-
- virtual LRESULT OnNotify(int w_param, LPNMHDR l_param) {
- return 0;
- }
-
- virtual void Layout() {
- NativeControl::Layout();
- ResizeContents(GetNativeControlHWND());
- }
-
- virtual views::RootView* GetContentsRootView() {
- return widget_->GetRootView();
- }
-
- virtual views::FocusTraversable* GetFocusTraversable() {
- return widget_;
- }
-
- virtual void ViewHierarchyChanged(bool is_add, View *parent, View *child) {
- NativeControl::ViewHierarchyChanged(is_add, parent, child);
-
- if (child == this && is_add) {
- // We have been added to a view hierarchy, update the FocusTraversable
- // parent.
- widget_->SetFocusTraversableParent(GetRootView());
- }
- }
-
-private:
- void ResizeContents(HWND tab_control) {
- DCHECK(tab_control);
- CRect content_bounds;
- if (!GetClientRect(tab_control, &content_bounds))
- return;
- TabCtrl_AdjustRect(tab_control, FALSE, &content_bounds);
- widget_->MoveWindow(content_bounds.left, content_bounds.top,
- content_bounds.Width(), content_bounds.Height(),
- TRUE);
- }
-
- View* child_;
- views::WidgetWin* widget_;
-
- DISALLOW_EVIL_CONSTRUCTORS(BorderView);
-};
-
-class TestViewWindow : public views::WidgetWin {
- public:
- explicit TestViewWindow(FocusManagerTest* test);
- ~TestViewWindow() { }
-
- void Init();
-
- views::View* contents() const { return contents_; }
-
-
- // Return the ID of the component that currently has the focus.
- int GetFocusedComponentID();
-
- // Simulate pressing the tab button in the window.
- void PressTab(bool shift_pressed, bool ctrl_pressed);
-
- views::RootView* GetContentsRootView() const {
- return contents_->GetRootView();
- }
-
- views::RootView* GetStyleRootView() const {
- return style_tab_->GetContentsRootView();
- }
-
- views::RootView* GetSearchRootView() const {
- return search_border_view_->GetContentsRootView();
- }
-
- private:
- views::View* contents_;
-
- views::TabbedPane* style_tab_;
- BorderView* search_border_view_;
-
- FocusManagerTest* test_;
-
- DISALLOW_EVIL_CONSTRUCTORS(TestViewWindow);
-};
-
-class FocusManagerTest : public testing::Test {
- public:
- TestViewWindow* GetWindow();
- ~FocusManagerTest();
-
- protected:
- FocusManagerTest();
-
- virtual void SetUp();
- virtual void TearDown();
-
- MessageLoopForUI message_loop_;
- TestViewWindow* test_window_;
-};
-
-////////////////////////////////////////////////////////////////////////////////
-// TestViewWindow
-////////////////////////////////////////////////////////////////////////////////
-
-TestViewWindow::TestViewWindow(FocusManagerTest* test)
- : test_(test),
- contents_(NULL),
- style_tab_(NULL),
- search_border_view_(NULL) {
-}
-
-// Initializes and shows the window with the contents view.
-void TestViewWindow::Init() {
- gfx::Rect bounds(0, 0, 600, 460);
- contents_ = new views::View();
- contents_->set_background(
- views::Background::CreateSolidBackground(255, 255, 255));
-
- WidgetWin::Init(NULL, bounds, true);
- SetContentsView(contents_);
-
- views::Checkbox* cb =
- new views::Checkbox(L"This is a checkbox");
- contents_->AddChildView(cb);
- // In this fast paced world, who really has time for non hard-coded layout?
- cb->SetBounds(10, 10, 200, 20);
- cb->SetID(kTopCheckBoxID);
-
- views::View* left_container = new views::View();
- left_container->set_border(
- views::Border::CreateSolidBorder(1, SK_ColorBLACK));
- left_container->set_background(
- views::Background::CreateSolidBackground(240, 240, 240));
- left_container->SetID(kLeftContainerID);
- contents_->AddChildView(left_container);
- left_container->SetBounds(10, 35, 250, 200);
-
- int label_x = 5;
- int label_width = 50;
- int label_height = 15;
- int text_field_width = 150;
- int y = 10;
- int gap_between_labels = 10;
-
- views::Label* label = new views::Label(L"Apple:");
- label->SetID(kAppleLabelID);
- left_container->AddChildView(label);
- label->SetBounds(label_x, y, label_width, label_height);
-
- views::TextField* text_field = new views::TextField();
- text_field->SetID(kAppleTextFieldID);
- left_container->AddChildView(text_field);
- text_field->SetBounds(label_x + label_width + 5, y,
- text_field_width, label_height);
-
- y += label_height + gap_between_labels;
-
- label = new views::Label(L"Orange:");
- label->SetID(kOrangeLabelID);
- left_container->AddChildView(label);
- label->SetBounds(label_x, y, label_width, label_height);
-
- text_field = new views::TextField();
- text_field->SetID(kOrangeTextFieldID);
- left_container->AddChildView(text_field);
- text_field->SetBounds(label_x + label_width + 5, y,
- text_field_width, label_height);
-
- y += label_height + gap_between_labels;
-
- label = new views::Label(L"Banana:");
- label->SetID(kBananaLabelID);
- left_container->AddChildView(label);
- label->SetBounds(label_x, y, label_width, label_height);
-
- text_field = new views::TextField();
- text_field->SetID(kBananaTextFieldID);
- left_container->AddChildView(text_field);
- text_field->SetBounds(label_x + label_width + 5, y,
- text_field_width, label_height);
-
- y += label_height + gap_between_labels;
-
- label = new views::Label(L"Kiwi:");
- label->SetID(kKiwiLabelID);
- left_container->AddChildView(label);
- label->SetBounds(label_x, y, label_width, label_height);
-
- text_field = new views::TextField();
- text_field->SetID(kKiwiTextFieldID);
- left_container->AddChildView(text_field);
- text_field->SetBounds(label_x + label_width + 5, y,
- text_field_width, label_height);
-
- y += label_height + gap_between_labels;
-
- views::NativeButton* button = new views::NativeButton(NULL, L"Click me");
- button->SetBounds(label_x, y + 10, 50, 20);
- button->SetID(kFruitButtonID);
- left_container->AddChildView(button);
- y += 40;
-
- cb = new views::Checkbox(L"This is another check box");
- cb->SetBounds(label_x + label_width + 5, y, 100, 20);
- cb->SetID(kFruitCheckBoxID);
- left_container->AddChildView(cb);
-
- views::View* right_container = new views::View();
- right_container->set_border(
- views::Border::CreateSolidBorder(1, SK_ColorBLACK));
- right_container->set_background(
- views::Background::CreateSolidBackground(240, 240, 240));
- right_container->SetID(kRightContainerID);
- contents_->AddChildView(right_container);
- right_container->SetBounds(270, 35, 300, 200);
-
- y = 10;
- int radio_button_height = 15;
- int gap_between_radio_buttons = 10;
- views::View* radio_button =
- new views::RadioButton(L"Asparagus", 1);
- radio_button->SetID(kAsparagusButtonID);
- right_container->AddChildView(radio_button);
- radio_button->SetBounds(5, y, 70, radio_button_height);
- radio_button->SetGroup(1);
- y += radio_button_height + gap_between_radio_buttons;
- radio_button = new views::RadioButton(L"Broccoli", 1);
- radio_button->SetID(kBroccoliButtonID);
- right_container->AddChildView(radio_button);
- radio_button->SetBounds(5, y, 70, radio_button_height);
- radio_button->SetGroup(1);
- y += radio_button_height + gap_between_radio_buttons;
- radio_button = new views::RadioButton(L"Cauliflower", 1);
- radio_button->SetID(kCauliflowerButtonID);
- right_container->AddChildView(radio_button);
- radio_button->SetBounds(5, y, 70, radio_button_height);
- radio_button->SetGroup(1);
- y += radio_button_height + gap_between_radio_buttons;
-
- views::View* inner_container = new views::View();
- inner_container->set_border(
- views::Border::CreateSolidBorder(1, SK_ColorBLACK));
- inner_container->set_background(
- views::Background::CreateSolidBackground(230, 230, 230));
- inner_container->SetID(kInnerContainerID);
- right_container->AddChildView(inner_container);
- inner_container->SetBounds(100, 10, 150, 180);
-
- views::ScrollView* scroll_view = new views::ScrollView();
- scroll_view->SetID(kScrollViewID);
- inner_container->AddChildView(scroll_view);
- scroll_view->SetBounds(1, 1, 148, 178);
-
- views::View* scroll_content = new views::View();
- scroll_content->SetBounds(0, 0, 200, 200);
- scroll_content->set_background(
- views::Background::CreateSolidBackground(200, 200, 200));
- scroll_view->SetContents(scroll_content);
-
- static const wchar_t* const kTitles[] = {
- L"Rosetta", L"Stupeur et tremblement", L"The diner game",
- L"Ridicule", L"Le placard", L"Les Visiteurs", L"Amelie",
- L"Joyeux Noel", L"Camping", L"Brice de Nice",
- L"Taxi", L"Asterix"
- };
-
- static const int kIDs[] = {
- kRosettaLinkID, kStupeurEtTremblementLinkID, kDinerGameLinkID,
- kRidiculeLinkID, kClosetLinkID, kVisitingLinkID, kAmelieLinkID,
- kJoyeuxNoelLinkID, kCampingLinkID, kBriceDeNiceLinkID,
- kTaxiLinkID, kAsterixLinkID
- };
-
- DCHECK(arraysize(kTitles) == arraysize(kIDs));
-
- y = 5;
- for (int i = 0; i < arraysize(kTitles); ++i) {
- views::Link* link = new views::Link(kTitles[i]);
- link->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
- link->SetID(kIDs[i]);
- scroll_content->AddChildView(link);
- link->SetBounds(5, y, 300, 15);
- y += 15;
- }
-
- y = 250;
- int width = 50;
- button = new views::NativeButton(NULL, L"OK");
- button->SetID(kOKButtonID);
-
- contents_->AddChildView(button);
- button->SetBounds(150, y, width, 20);
-
- button = new views::NativeButton(NULL, L"Cancel");
- button->SetID(kCancelButtonID);
- contents_->AddChildView(button);
- button->SetBounds(250, y, width, 20);
-
- button = new views::NativeButton(NULL, L"Help");
- button->SetID(kHelpButtonID);
- contents_->AddChildView(button);
- button->SetBounds(350, y, width, 20);
-
- y += 40;
-
- // Left bottom box with style checkboxes.
- views::View* contents = new views::View();
- contents->set_background(
- views::Background::CreateSolidBackground(SK_ColorWHITE));
- cb = new views::Checkbox(L"Bold");
- contents->AddChildView(cb);
- cb->SetBounds(10, 10, 50, 20);
- cb->SetID(kBoldCheckBoxID);
-
- cb = new views::Checkbox(L"Italic");
- contents->AddChildView(cb);
- cb->SetBounds(70, 10, 50, 20);
- cb->SetID(kItalicCheckBoxID);
-
- cb = new views::Checkbox(L"Underlined");
- contents->AddChildView(cb);
- cb->SetBounds(130, 10, 70, 20);
- cb->SetID(kUnderlinedCheckBoxID);
-
- style_tab_ = new views::TabbedPane();
- style_tab_->SetID(kStyleContainerID);
- contents_->AddChildView(style_tab_);
- style_tab_->SetBounds(10, y, 210, 50);
- style_tab_->AddTab(L"Style", contents);
- style_tab_->AddTab(L"Other", new views::View());
-
- // Right bottom box with search.
- contents = new views::View();
- contents->set_background(
- views::Background::CreateSolidBackground(SK_ColorWHITE));
- text_field = new views::TextField();
- contents->AddChildView(text_field);
- text_field->SetBounds(10, 10, 100, 20);
- text_field->SetID(kSearchTextFieldID);
-
- button = new views::NativeButton(NULL, L"Search");
- contents->AddChildView(button);
- button->SetBounds(115, 10, 50, 20);
- button->SetID(kSearchButtonID);
-
- views::Link* link = new views::Link(L"Help");
- link->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
- link->SetID(kHelpLinkID);
- contents->AddChildView(link);
- link->SetBounds(170, 10, 30, 15);
-
- search_border_view_ = new BorderView(contents);
- search_border_view_->SetID(kSearchContainerID);
-
- contents_->AddChildView(search_border_view_);
- search_border_view_->SetBounds(300, y, 200, 50);
-
- y += 60;
-
- contents = new views::View();
- contents->SetFocusable(true);
- contents->set_background(
- views::Background::CreateSolidBackground(SK_ColorBLUE));
- contents->SetID(kThumbnailContainerID);
- button = new views::NativeButton(NULL, L"Star");
- contents->AddChildView(button);
- button->SetBounds(5, 5, 50, 20);
- button->SetID(kThumbnailStarID);
- button = new views::NativeButton(NULL, L"SuperStar");
- contents->AddChildView(button);
- button->SetBounds(60, 5, 100, 20);
- button->SetID(kThumbnailSuperStarID);
-
- contents_->AddChildView(contents);
- contents->SetBounds(200, y, 200, 50);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// FocusManagerTest
-////////////////////////////////////////////////////////////////////////////////
-
-FocusManagerTest::FocusManagerTest() {
-}
-
-FocusManagerTest::~FocusManagerTest() {
-}
-
-TestViewWindow* FocusManagerTest::GetWindow() {
- return test_window_;
-}
-
-void FocusManagerTest::SetUp() {
- OleInitialize(NULL);
- test_window_ = new TestViewWindow(this);
- test_window_->Init();
- ShowWindow(test_window_->GetNativeView(), SW_SHOW);
-}
-
-void FocusManagerTest::TearDown() {
- test_window_->CloseNow();
-
- // Flush the message loop to make Purify happy.
- message_loop_.RunAllPending();
- OleUninitialize();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// The tests
-////////////////////////////////////////////////////////////////////////////////
-
-
-TEST_F(FocusManagerTest, NormalTraversal) {
- const int kTraversalIDs[] = { kTopCheckBoxID, kAppleTextFieldID,
- kOrangeTextFieldID, kBananaTextFieldID, kKiwiTextFieldID,
- kFruitButtonID, kFruitCheckBoxID, kAsparagusButtonID, kRosettaLinkID,
- kStupeurEtTremblementLinkID,
- kDinerGameLinkID, kRidiculeLinkID, kClosetLinkID, kVisitingLinkID,
- kAmelieLinkID, kJoyeuxNoelLinkID, kCampingLinkID, kBriceDeNiceLinkID,
- kTaxiLinkID, kAsterixLinkID, kOKButtonID, kCancelButtonID, kHelpButtonID,
- kStyleContainerID, kBoldCheckBoxID, kItalicCheckBoxID,
- kUnderlinedCheckBoxID, kSearchTextFieldID, kSearchButtonID, kHelpLinkID,
- kThumbnailContainerID, kThumbnailStarID, kThumbnailSuperStarID };
-
- // Uncomment the following line if you want to test manually the UI of this
- // test.
- // MessageLoop::current()->Run(new views::AcceleratorHandler());
-
- views::FocusManager* focus_manager =
- views::FocusManager::GetFocusManager(test_window_->GetNativeView());
- // Let's traverse the whole focus hierarchy (several times, to make sure it
- // loops OK).
- focus_manager->SetFocusedView(NULL);
- for (int i = 0; i < 3; ++i) {
- for (int j = 0; j < arraysize(kTraversalIDs); j++) {
- focus_manager->AdvanceFocus(false);
- views::View* focused_view = focus_manager->GetFocusedView();
- EXPECT_TRUE(focused_view != NULL);
- if (focused_view)
- EXPECT_EQ(kTraversalIDs[j], focused_view->GetID());
- }
- }
-
- // Focus the 1st item.
- views::RootView* root_view = test_window_->GetContentsRootView();
- focus_manager->SetFocusedView(root_view->GetViewByID(kTraversalIDs[0]));
-
- /* BROKEN because of bug #1153276. The reverse order of traversal in Tabbed
- Panes is broken (we go to the tab before going to the content
- // Let's traverse in reverse order.
- for (int i = 0; i < 3; ++i) {
- for (int j = arraysize(kTraversalIDs) - 1; j >= 0; --j) {
- focus_manager->AdvanceFocus(true);
- views::View* focused_view = focus_manager->GetFocusedView();
- EXPECT_TRUE(focused_view != NULL);
- if (focused_view)
- EXPECT_EQ(kTraversalIDs[j], focused_view->GetID());
- }
- }
- */
-}
-
-TEST_F(FocusManagerTest, TraversalWithNonEnabledViews) {
- const int kMainContentsDisabledIDs[] = {
- kBananaTextFieldID, kFruitCheckBoxID, kAsparagusButtonID,
- kCauliflowerButtonID, kClosetLinkID, kVisitingLinkID, kBriceDeNiceLinkID,
- kTaxiLinkID, kAsterixLinkID, kHelpButtonID };
-
- const int kStyleContentsDisabledIDs[] = { kBoldCheckBoxID };
-
- const int kSearchContentsDisabledIDs[] = { kSearchTextFieldID, kHelpLinkID };
-
- const int kTraversalIDs[] = { kTopCheckBoxID, kAppleTextFieldID,
- kOrangeTextFieldID, kKiwiTextFieldID, kFruitButtonID, kBroccoliButtonID,
- kRosettaLinkID, kStupeurEtTremblementLinkID, kDinerGameLinkID,
- kRidiculeLinkID, kAmelieLinkID, kJoyeuxNoelLinkID, kCampingLinkID,
- kOKButtonID, kCancelButtonID, kStyleContainerID,
- kItalicCheckBoxID, kUnderlinedCheckBoxID, kSearchButtonID,
- kThumbnailContainerID, kThumbnailStarID, kThumbnailSuperStarID };
-
- // Let's disable some views.
- views::RootView* root_view = test_window_->GetContentsRootView();
- for (int i = 0; i < arraysize(kMainContentsDisabledIDs); i++) {
- views::View* v = root_view->GetViewByID(kMainContentsDisabledIDs[i]);
- ASSERT_TRUE(v != NULL);
- if (v)
- v->SetEnabled(false);
- }
- root_view = test_window_->GetStyleRootView();
- for (int i = 0; i < arraysize(kStyleContentsDisabledIDs); i++) {
- views::View* v = root_view->GetViewByID(kStyleContentsDisabledIDs[i]);
- ASSERT_TRUE(v != NULL);
- if (v)
- v->SetEnabled(false);
- }
- root_view = test_window_->GetSearchRootView();
- for (int i = 0; i < arraysize(kSearchContentsDisabledIDs); i++) {
- views::View* v =
- root_view->GetViewByID(kSearchContentsDisabledIDs[i]);
- ASSERT_TRUE(v != NULL);
- if (v)
- v->SetEnabled(false);
- }
-
-
- views::FocusManager* focus_manager =
- views::FocusManager::GetFocusManager(test_window_->GetNativeView());
- views::View* focused_view;
- // Let's do one traversal (several times, to make sure it loops ok).
- for (int i = 0; i < 3;++i) {
- for (int j = 0; j < arraysize(kTraversalIDs); j++) {
- focus_manager->AdvanceFocus(false);
- focused_view = focus_manager->GetFocusedView();
- EXPECT_TRUE(focused_view != NULL);
- if (focused_view)
- EXPECT_EQ(kTraversalIDs[j], focused_view->GetID());
- }
- }
-
- // Focus the 1st item.
- focus_manager->AdvanceFocus(false);
- focused_view = focus_manager->GetFocusedView();
- EXPECT_TRUE(focused_view != NULL);
- if (focused_view)
- EXPECT_EQ(kTraversalIDs[0], focused_view->GetID());
-
- // Same thing in reverse.
- /* BROKEN because of bug #1153276. The reverse order of traversal in Tabbed
- Panes is broken (we go to the tab before going to the content
-
- for (int i = 0; i < 3; ++i) {
- for (int j = arraysize(kTraversalIDs) - 1; j >= 0; --j) {
- focus_manager->AdvanceFocus(true);
- focused_view = focus_manager->GetFocusedView();
- EXPECT_TRUE(focused_view != NULL);
- if (focused_view)
- EXPECT_EQ(kTraversalIDs[j], focused_view->GetID());
- }
- }
- */
-}
-
-}
diff --git a/chrome/views/focus/focus_util_win.cc b/chrome/views/focus/focus_util_win.cc
deleted file mode 100644
index bde8d27..0000000
--- a/chrome/views/focus/focus_util_win.cc
+++ /dev/null
@@ -1,118 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/focus/focus_util_win.h"
-
-#include <windowsx.h>
-
-#include "base/win_util.h"
-
-namespace views {
-
-// Property used to indicate the HWND supports having mouse wheel messages
-// rerouted to it.
-static const wchar_t* const kHWNDSupportMouseWheelRerouting =
- L"__HWND_MW_REROUTE_OK";
-
-static bool WindowSupportsRerouteMouseWheel(HWND window) {
- while (GetWindowLong(window, GWL_STYLE) & WS_CHILD) {
- if (!IsWindow(window))
- break;
-
- if (reinterpret_cast<bool>(GetProp(window,
- kHWNDSupportMouseWheelRerouting))) {
- return true;
- }
- window = GetParent(window);
- }
- return false;
-}
-
-static bool IsCompatibleWithMouseWheelRedirection(HWND window) {
- std::wstring class_name = win_util::GetClassName(window);
- // Mousewheel redirection to comboboxes is a surprising and
- // undesireable user behavior.
- return !(class_name == L"ComboBox" ||
- class_name == L"ComboBoxEx32");
-}
-
-static bool CanRedirectMouseWheelFrom(HWND window) {
- std::wstring class_name = win_util::GetClassName(window);
-
- // Older Thinkpad mouse wheel drivers create a window under mouse wheel
- // pointer. Detect if we are dealing with this window. In this case we
- // don't need to do anything as the Thinkpad mouse driver will send
- // mouse wheel messages to the right window.
- if ((class_name == L"Syn Visual Class") ||
- (class_name == L"SynTrackCursorWindowClass"))
- return false;
-
- return true;
-}
-
-void SetWindowSupportsRerouteMouseWheel(HWND hwnd) {
- SetProp(hwnd, kHWNDSupportMouseWheelRerouting,
- reinterpret_cast<HANDLE>(true));
-}
-
-bool RerouteMouseWheel(HWND window, WPARAM w_param, LPARAM l_param) {
- // Since this is called from a subclass for every window, we can get
- // here recursively. This will happen if, for example, a control
- // reflects wheel scroll messages to its parent. Bail out if we got
- // here recursively.
- static bool recursion_break = false;
- if (recursion_break)
- return false;
- // Check if this window's class has a bad interaction with rerouting.
- if (!IsCompatibleWithMouseWheelRedirection(window))
- return false;
-
- DWORD current_process = GetCurrentProcessId();
- POINT wheel_location = { GET_X_LPARAM(l_param), GET_Y_LPARAM(l_param) };
- HWND window_under_wheel = WindowFromPoint(wheel_location);
-
- if (!CanRedirectMouseWheelFrom(window_under_wheel))
- return false;
-
- // Find the lowest Chrome window in the hierarchy that can be the
- // target of mouse wheel redirection.
- while (window != window_under_wheel) {
- // If window_under_wheel is not a valid Chrome window, then return true to
- // suppress further processing of the message.
- if (!::IsWindow(window_under_wheel))
- return true;
- DWORD wheel_window_process = 0;
- GetWindowThreadProcessId(window_under_wheel, &wheel_window_process);
- if (current_process != wheel_window_process) {
- if (IsChild(window, window_under_wheel)) {
- // If this message is reflected from a child window in a different
- // process (happens with out of process windowed plugins) then
- // we don't want to reroute the wheel message.
- return false;
- } else {
- // The wheel is scrolling over an unrelated window. Make sure that we
- // have marked that window as supporting mouse wheel rerouting.
- // Otherwise, we cannot send random WM_MOUSEWHEEL messages to arbitrary
- // windows. So just drop the message.
- if (!WindowSupportsRerouteMouseWheel(window_under_wheel))
- return true;
- }
- }
-
- // window_under_wheel is a Chrome window. If allowed, redirect.
- if (IsCompatibleWithMouseWheelRedirection(window_under_wheel)) {
- recursion_break = true;
- SendMessage(window_under_wheel, WM_MOUSEWHEEL, w_param, l_param);
- recursion_break = false;
- return true;
- }
- // If redirection is disallowed, try the parent.
- window_under_wheel = GetAncestor(window_under_wheel, GA_PARENT);
- }
- // If we traversed back to the starting point, we should process
- // this message normally; return false.
- return false;
-}
-
-} // namespace views
diff --git a/chrome/views/focus/focus_util_win.h b/chrome/views/focus/focus_util_win.h
deleted file mode 100644
index d613e47..0000000
--- a/chrome/views/focus/focus_util_win.h
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_FOCUS_FOCUS_UTIL_WIN_H_
-#define CHROME_VIEWS_FOCUS_FOCUS_UTIL_WIN_H_
-
-#include <windows.h>
-
-namespace views {
-
-// Marks the passed |hwnd| as supporting mouse-wheel message rerouting.
-// We reroute the mouse wheel messages to such HWND when they are under the
-// mouse pointer (but are not the active window)
-void SetWindowSupportsRerouteMouseWheel(HWND hwnd);
-
-// Forwards mouse wheel messages to the window under it.
-// Windows sends mouse wheel messages to the currently active window.
-// This causes a window to scroll even if it is not currently under the mouse
-// wheel. The following code gives mouse wheel messages to the window under the
-// mouse wheel in order to scroll that window. This is arguably a better user
-// experience. The returns value says whether the mouse wheel message was
-// successfully redirected.
-bool RerouteMouseWheel(HWND window, WPARAM w_param, LPARAM l_param);
-
-} // namespace views
-
-#endif // CHROME_VIEWS_FOCUS_FOCUS_UTIL_WIN_H_
diff --git a/chrome/views/focus/view_storage.cc b/chrome/views/focus/view_storage.cc
deleted file mode 100644
index d8196b2..0000000
--- a/chrome/views/focus/view_storage.cc
+++ /dev/null
@@ -1,182 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/focus/view_storage.h"
-
-#include <algorithm>
-
-#include "base/logging.h"
-#include "base/stl_util-inl.h"
-
-namespace views {
-
-// This struct contains the information to locate a specific view.
-// Locating a view is not always straight-forward as a view can be a floating
-// view, or the child of a floating view. Floating views are frequently deleted
-// and recreated (typically when their container is laid out).
-struct ViewLocationInfo {
- // True if the view is floating or the child of a floating view. False
- // otherwise.
- bool is_floating_view;
-
- // If non floating, this is the stored view. If floating, the parent of the
- // floating view.
- View* view;
-
- // The id of the floating view.
- int floating_view_id;
-
- // The path from the floating view to the stored view. The path is composed
- // of the indexes of the views in the hierarchy.
- std::vector<int> floating_view_to_view_path;
-};
-
-// static
-ViewStorage* ViewStorage::GetSharedInstance() {
- return Singleton<ViewStorage>::get();
-}
-
-ViewStorage::ViewStorage() : view_storage_next_id_(0) {
-}
-
-ViewStorage::~ViewStorage() {
- STLDeleteContainerPairSecondPointers(id_to_view_location_.begin(),
- id_to_view_location_.end());
-
- STLDeleteContainerPairSecondPointers(view_to_ids_.begin(),
- view_to_ids_.end());
-}
-
-int ViewStorage::CreateStorageID() {
- return view_storage_next_id_++;
-}
-
-void ViewStorage::StoreView(int storage_id, View* view) {
- DCHECK(view);
- std::map<int, ViewLocationInfo*>::iterator iter =
- id_to_view_location_.find(storage_id);
- DCHECK(iter == id_to_view_location_.end());
-
- if (iter != id_to_view_location_.end())
- RemoveView(storage_id);
-
- ViewLocationInfo* view_location_info = new ViewLocationInfo();
- View* floating_view_parent = view->RetrieveFloatingViewParent();
- if (floating_view_parent) {
- // The view is a floating view or is a child of a floating view.
- view_location_info->is_floating_view = true;
- view_location_info->view = floating_view_parent->GetParent();
- view_location_info->floating_view_id =
- floating_view_parent->GetFloatingViewID();
- // Ley's store the path from the floating view to the actual view so we can
- // locate it when restoring.
- View::GetViewPath(floating_view_parent, view,
- &(view_location_info->floating_view_to_view_path));
- } else {
- // It is a non floating view, it can be stored as is.
- view_location_info->is_floating_view = false;
- view_location_info->view = view;
- }
- id_to_view_location_[storage_id] = view_location_info;
-
- std::vector<int>* ids = NULL;
- std::map<View*, std::vector<int>*>::iterator id_iter =
- view_to_ids_.find(view_location_info->view);
- if (id_iter == view_to_ids_.end()) {
- ids = new std::vector<int>();
- view_to_ids_[view_location_info->view] = ids;
- } else {
- ids = id_iter->second;
- }
- ids->push_back(storage_id);
-}
-
-View* ViewStorage::RetrieveView(int storage_id) {
- std::map<int, ViewLocationInfo*>::iterator iter =
- id_to_view_location_.find(storage_id);
- if (iter == id_to_view_location_.end())
- return NULL;
-
- ViewLocationInfo* view_location_info = iter->second;
- if (view_location_info->is_floating_view) {
- View* floating_view = view_location_info->view->
- RetrieveFloatingViewForID(view_location_info->floating_view_id);
- View* v = NULL;
- if (floating_view) {
- v = View::GetViewForPath(floating_view,
- view_location_info->floating_view_to_view_path);
- }
- if (!v) {
- // If we have not found the view, it means either the floating view with
- // the id we have is gone, or it has changed and the actual child view
- // we have the path for is not accessible. In that case, let's make sure
- // we don't leak the ViewLocationInfo.
- RemoveView(storage_id);
- }
- return v;
- } else {
- return view_location_info->view;
- }
-}
-
-void ViewStorage::RemoveView(int storage_id) {
- EraseView(storage_id, false);
-}
-
-void ViewStorage::ViewRemoved(View* parent, View* removed) {
- // Let's first retrieve the ids for that view.
- std::map<View*, std::vector<int>*>::iterator ids_iter =
- view_to_ids_.find(removed);
-
- if (ids_iter == view_to_ids_.end()) {
- // That view is not in the view storage.
- return;
- }
-
- std::vector<int>* ids = ids_iter->second;
- DCHECK(!ids->empty());
- EraseView((*ids)[0], true);
-}
-
-void ViewStorage::EraseView(int storage_id, bool remove_all_ids) {
- // Remove the view from id_to_view_location_.
- std::map<int, ViewLocationInfo*>::iterator location_iter =
- id_to_view_location_.find(storage_id);
- if (location_iter == id_to_view_location_.end())
- return;
-
- ViewLocationInfo* view_location = location_iter->second;
- View* view = view_location->view;
- delete view_location;
- id_to_view_location_.erase(location_iter);
-
- // Also update view_to_ids_.
- std::map<View*, std::vector<int>*>::iterator ids_iter =
- view_to_ids_.find(view);
- DCHECK(ids_iter != view_to_ids_.end());
- std::vector<int>* ids = ids_iter->second;
-
- if (remove_all_ids) {
- for (size_t i = 0; i < ids->size(); ++i) {
- location_iter = id_to_view_location_.find((*ids)[i]);
- if (location_iter != id_to_view_location_.end()) {
- delete location_iter->second;
- id_to_view_location_.erase(location_iter);
- }
- }
- ids->clear();
- } else {
- std::vector<int>::iterator id_iter =
- std::find(ids->begin(), ids->end(), storage_id);
- DCHECK(id_iter != ids->end());
- ids->erase(id_iter);
- }
-
- if (ids->empty()) {
- delete ids;
- view_to_ids_.erase(ids_iter);
- }
-}
-
-} // namespace views
diff --git a/chrome/views/focus/view_storage.h b/chrome/views/focus/view_storage.h
deleted file mode 100644
index 09bb674..0000000
--- a/chrome/views/focus/view_storage.h
+++ /dev/null
@@ -1,78 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_FOCUS_VIEW_STORAGE_H_
-#define CHROME_VIEWS_FOCUS_VIEW_STORAGE_H_
-
-#include "base/singleton.h"
-#include "chrome/views/view.h"
-
-// This class is a simple storage place for storing/retrieving views. It is
-// used for example in the FocusManager to store/restore focused views when the
-// main window becomes active/inactive. It supports floating views, meaning
-// that when you store a view, it can be retrieved even if it is a floating
-// view or the child of a floating view that has been detached since the view
-// was stored (in which case the floating view is recreated and reattached).
-// It also automatically removes a view from the storage if the view is removed
-// from the tree hierarchy (or in the case of a floating view, if the view
-// containing the floating view is removed).
-//
-// To use it, you first need to create a view storage id that can then be used
-// to store/retrieve views.
-
-namespace views {
-
-struct ViewLocationInfo;
-
-class ViewStorage {
- public:
- // Returns the global ViewStorage instance.
- // It is guaranted to be non NULL.
- static ViewStorage* GetSharedInstance();
-
- // Returns a unique storage id that can be used to store/retrieve views.
- int CreateStorageID();
-
- // Associates |view| with the specified |storage_id|.
- void StoreView(int storage_id, View* view);
-
- // Returns the view associated with |storage_id| if any, NULL otherwise.
- View* RetrieveView(int storage_id);
-
- // Removes the view associated with |storage_id| if any.
- void RemoveView(int storage_id);
-
- // Notifies the ViewStorage that a view was removed from its parent somewhere.
- void ViewRemoved(View* parent, View* removed);
-
-#ifdef UNIT_TEST
- size_t view_count() const { return view_to_ids_.size(); }
-#endif
-
- private:
- friend struct DefaultSingletonTraits<ViewStorage>;
-
- ViewStorage();
- ~ViewStorage();
-
- // Removes the view associated with |storage_id|. If |remove_all_ids| is true,
- // all other mapping pointing to the same view are removed as well.
- void EraseView(int storage_id, bool remove_all_ids);
-
- // Next id for the view storage.
- int view_storage_next_id_;
-
- // The association id to View used for the view storage. The ViewStorage owns
- // the ViewLocationInfo.
- std::map<int, ViewLocationInfo*> id_to_view_location_;
-
- // Association View to id, used to speed up view notification removal.
- std::map<View*, std::vector<int>*> view_to_ids_;
-
- DISALLOW_COPY_AND_ASSIGN(ViewStorage);
-};
-
-} // namespace views
-
-#endif // #ifndef CHROME_VIEWS_VIEW_STORAGE_H_
diff --git a/chrome/views/grid_layout.cc b/chrome/views/grid_layout.cc
deleted file mode 100644
index fe4a0f3..0000000
--- a/chrome/views/grid_layout.cc
+++ /dev/null
@@ -1,1013 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/grid_layout.h"
-
-#include <algorithm>
-
-#include "base/logging.h"
-#include "chrome/views/view.h"
-
-namespace views {
-
-// LayoutElement ------------------------------------------------------
-
-// A LayoutElement has a size and location along one axis. It contains
-// methods that are used along both axis.
-class LayoutElement {
- public:
- // Invokes ResetSize on all the layout elements.
- template <class T>
- static void ResetSizes(std::vector<T*>* elements) {
- // Reset the layout width of each column.
- for (typename std::vector<T*>::iterator i = elements->begin();
- i != elements->end(); ++i) {
- (*i)->ResetSize();
- }
- }
-
- // Sets the location of each element to be the sum of the sizes of the
- // preceding elements.
- template <class T>
- static void CalculateLocationsFromSize(std::vector<T*>* elements) {
- // Reset the layout width of each column.
- int location = 0;
- for (typename std::vector<T*>::iterator i = elements->begin();
- i != elements->end(); ++i) {
- (*i)->SetLocation(location);
- location += (*i)->Size();
- }
- }
-
- // Distributes delta among the resizable elements.
- // Each resizable element is given ResizePercent / total_percent * delta
- // pixels extra of space.
- template <class T>
- static void DistributeDelta(int delta, std::vector<T*>* elements) {
- if (delta == 0)
- return;
-
- float total_percent = 0;
- int resize_count = 0;
- for (typename std::vector<T*>::iterator i = elements->begin();
- i != elements->end(); ++i) {
- total_percent += (*i)->ResizePercent();
- resize_count++;
- }
- if (total_percent == 0) {
- // None of the elements are resizable, return.
- return;
- }
- int remaining = delta;
- int resized = resize_count;
- for (typename std::vector<T*>::iterator i = elements->begin();
- i != elements->end(); ++i) {
- T* element = *i;
- if (element->ResizePercent() > 0) {
- int to_give;
- if (--resized == 0) {
- to_give = remaining;
- } else {
- to_give = static_cast<int>(delta *
- (element->resize_percent_ / total_percent));
- remaining -= to_give;
- }
- element->SetSize(element->Size() + to_give);
- }
- }
- }
-
- // Returns the sum of the size of the elements from start to start + length.
- template <class T>
- static int TotalSize(int start, int length, std::vector<T*>* elements) {
- DCHECK(start >= 0 && length > 0 &&
- start + length <= static_cast<int>(elements->size()));
- int size = 0;
- for (int i = start, max = start + length; i < max; ++i) {
- size += (*elements)[i]->Size();
- }
- return size;
- }
-
- explicit LayoutElement(float resize_percent)
- : resize_percent_(resize_percent) {
- DCHECK(resize_percent >= 0);
- }
-
- virtual ~LayoutElement() {}
-
- void SetLocation(int location) {
- location_ = location;
- }
-
- int Location() {
- return location_;
- }
-
- // Adjusts the size of this LayoutElement to be the max of the current size
- // and the specified size.
- virtual void AdjustSize(int size) {
- size_ = std::max(size_, size);
- }
-
- // Resets the size to the initial size. This sets the size to 0, but
- // subclasses that have a different initial size should override.
- virtual void ResetSize() {
- SetSize(0);
- }
-
- void SetSize(int size) {
- size_ = size;
- }
-
- int Size() {
- return size_;
- }
-
- void SetResizePercent(float percent) {
- resize_percent_ = percent;
- }
-
- float ResizePercent() {
- return resize_percent_;
- }
-
- bool IsResizable() {
- return resize_percent_ > 0;
- }
-
- private:
- float resize_percent_;
- int location_;
- int size_;
-
- DISALLOW_EVIL_CONSTRUCTORS(LayoutElement);
-};
-
-// Column -------------------------------------------------------------
-
-// As the name implies, this represents a Column. Column contains default
-// values for views originating in this column.
-class Column : public LayoutElement {
- public:
- Column(GridLayout::Alignment h_align,
- GridLayout::Alignment v_align,
- float resize_percent,
- GridLayout::SizeType size_type,
- int fixed_width,
- int min_width,
- size_t index,
- bool is_padding)
- : LayoutElement(resize_percent),
- h_align_(h_align),
- v_align_(v_align),
- size_type_(size_type),
- same_size_column_(-1),
- fixed_width_(fixed_width),
- min_width_(min_width),
- index_(index),
- is_padding_(is_padding),
- master_column_(NULL) {}
-
- virtual ~Column() {}
-
- GridLayout::Alignment h_align() { return h_align_; }
- GridLayout::Alignment v_align() { return v_align_; }
-
- virtual void ResetSize();
-
- private:
- friend class ColumnSet;
- friend class GridLayout;
-
- Column* GetLastMasterColumn();
-
- // Determines the max size of all linked columns, and sets each column
- // to that size. This should only be used for the master column.
- void UnifySameSizedColumnSizes();
-
- virtual void AdjustSize(int size);
-
- const GridLayout::Alignment h_align_;
- const GridLayout::Alignment v_align_;
- const GridLayout::SizeType size_type_;
- int same_size_column_;
- const int fixed_width_;
- const int min_width_;
-
- // Index of this column in the ColumnSet.
- const size_t index_;
-
- const bool is_padding_;
-
- // If multiple columns have their sizes linked, one is the
- // master column. The master column is identified by the
- // master_column field being equal to itself. The master columns
- // same_size_columns field contains the set of Columns with the
- // the same size. Columns who are linked to other columns, but
- // are not the master column have their master_column pointing to
- // one of the other linked columns. Use the method GetLastMasterColumn
- // to resolve the true master column.
- std::vector<Column*> same_size_columns_;
- Column* master_column_;
-
- DISALLOW_EVIL_CONSTRUCTORS(Column);
-};
-
-void Column::ResetSize() {
- if (size_type_ == GridLayout::FIXED) {
- SetSize(fixed_width_);
- } else {
- SetSize(min_width_);
- }
-}
-
-Column* Column::GetLastMasterColumn() {
- if (master_column_ == NULL) {
- return NULL;
- }
- if (master_column_ == this) {
- return this;
- }
- return master_column_->GetLastMasterColumn();
-}
-
-void Column::UnifySameSizedColumnSizes() {
- DCHECK(master_column_ == this);
-
- // Accumulate the size first.
- int size = 0;
- for (std::vector<Column*>::iterator i = same_size_columns_.begin();
- i != same_size_columns_.end(); ++i) {
- size = std::max(size, (*i)->Size());
- }
-
- // Then apply it.
- for (std::vector<Column*>::iterator i = same_size_columns_.begin();
- i != same_size_columns_.end(); ++i) {
- (*i)->SetSize(size);
- }
-}
-
-void Column::AdjustSize(int size) {
- if (size_type_ == GridLayout::USE_PREF)
- LayoutElement::AdjustSize(size);
-}
-
-// Row -------------------------------------------------------------
-
-class Row : public LayoutElement {
- public:
- Row(bool fixed_height, int height, float resize_percent,
- ColumnSet* column_set)
- : LayoutElement(resize_percent),
- fixed_height_(fixed_height),
- height_(height),
- column_set_(column_set) {
- }
-
- virtual ~Row() {}
-
- virtual void ResetSize() {
- SetSize(height_);
- }
-
- ColumnSet* column_set() {
- return column_set_;
- }
-
- private:
- const bool fixed_height_;
- const int height_;
- // The column set used for this row; null for padding rows.
- ColumnSet* column_set_;
-
- DISALLOW_EVIL_CONSTRUCTORS(Row);
-};
-
-// ViewState -------------------------------------------------------------
-
-// Identifies the location in the grid of a particular view, along with
-// placement information and size information.
-struct ViewState {
- ViewState(ColumnSet* column_set, View* view, int start_col, int start_row,
- int col_span, int row_span, GridLayout::Alignment h_align,
- GridLayout::Alignment v_align, int pref_width, int pref_height)
- : column_set(column_set),
- view(view),
- start_col(start_col),
- start_row(start_row),
- col_span(col_span),
- row_span(row_span),
- h_align(h_align),
- v_align(v_align),
- pref_width_fixed(pref_width > 0),
- pref_height_fixed(pref_height > 0),
- pref_width(pref_width),
- pref_height(pref_height),
- remaining_width(0),
- remaining_height(0) {
- DCHECK(view && start_col >= 0 && start_row >= 0 && col_span > 0 &&
- row_span > 0 && start_col < column_set->num_columns() &&
- (start_col + col_span) <= column_set->num_columns());
- }
-
- ColumnSet* const column_set;
- View* const view;
- const int start_col;
- const int start_row;
- const int col_span;
- const int row_span;
- const GridLayout::Alignment h_align;
- const GridLayout::Alignment v_align;
-
- // If true, the pref_width/pref_height were explicitly set and the view's
- // preferred size is ignored.
- const bool pref_width_fixed;
- const bool pref_height_fixed;
-
- // The preferred width/height. These are reset during the layout process.
- int pref_width;
- int pref_height;
-
- // Used during layout. Gives how much width/height has not yet been
- // distributed to the columns/rows the view is in.
- int remaining_width;
- int remaining_height;
-};
-
-static bool CompareByColumnSpan(const ViewState* v1, const ViewState* v2) {
- return v1->col_span < v2->col_span;
-}
-
-static bool CompareByRowSpan(const ViewState* v1, const ViewState* v2) {
- return v1->row_span < v2->row_span;
-}
-
-// ColumnSet -------------------------------------------------------------
-
-ColumnSet::ColumnSet(int id) : id_(id) {
-}
-
-ColumnSet::~ColumnSet() {
- for (std::vector<Column*>::iterator i = columns_.begin();
- i != columns_.end(); ++i) {
- delete *i;
- }
-}
-
-void ColumnSet::AddPaddingColumn(float resize_percent, int width) {
- AddColumn(GridLayout::FILL, GridLayout::FILL, resize_percent,
- GridLayout::FIXED, width, width, true);
-}
-
-void ColumnSet::AddColumn(GridLayout::Alignment h_align,
- GridLayout::Alignment v_align,
- float resize_percent,
- GridLayout::SizeType size_type,
- int fixed_width,
- int min_width) {
- AddColumn(h_align, v_align, resize_percent, size_type, fixed_width,
- min_width, false);
-}
-
-
-void ColumnSet::LinkColumnSizes(int first, ...) {
- va_list marker;
- va_start(marker, first);
- DCHECK(first >= 0 && first < num_columns());
- for (int last = first, next = va_arg(marker, int); next != -1;
- next = va_arg(marker, int)) {
- DCHECK(next >= 0 && next < num_columns());
- columns_[last]->same_size_column_ = next;
- last = next;
- }
- va_end(marker);
-}
-
-void ColumnSet::AddColumn(GridLayout::Alignment h_align,
- GridLayout::Alignment v_align,
- float resize_percent,
- GridLayout::SizeType size_type,
- int fixed_width,
- int min_width,
- bool is_padding) {
- Column* column = new Column(h_align, v_align, resize_percent, size_type,
- fixed_width, min_width, columns_.size(),
- is_padding);
- columns_.push_back(column);
-}
-
-void ColumnSet::AddViewState(ViewState* view_state) {
- // view_states are ordered by column_span (in ascending order).
- std::vector<ViewState*>::iterator i = lower_bound(view_states_.begin(),
- view_states_.end(),
- view_state,
- CompareByColumnSpan);
- view_states_.insert(i, view_state);
-}
-
-void ColumnSet::CalculateMasterColumns() {
- for (std::vector<Column*>::iterator i = columns_.begin();
- i != columns_.end(); ++i) {
- Column* column = *i;
- int same_size_column_index = column->same_size_column_;
- if (same_size_column_index != -1) {
- DCHECK(same_size_column_index >= 0 &&
- same_size_column_index < static_cast<int>(columns_.size()));
- Column* master_column = column->master_column_;
- Column* same_size_column = columns_[same_size_column_index];
- Column* same_size_column_master = same_size_column->master_column_;
- if (master_column == NULL) {
- // Current column is not linked to any other column.
- if (same_size_column_master == NULL) {
- // Both columns are not linked.
- column->master_column_ = column;
- same_size_column->master_column_ = column;
- column->same_size_columns_.push_back(same_size_column);
- column->same_size_columns_.push_back(column);
- } else {
- // Column to link to is linked with other columns.
- // Add current column to list of linked columns in other columns
- // master column.
- same_size_column->GetLastMasterColumn()->
- same_size_columns_.push_back(column);
- // And update the master column for the current column to that
- // of the same sized column.
- column->master_column_ = same_size_column;
- }
- } else {
- // Current column is already linked with another column.
- if (same_size_column_master == NULL) {
- // Column to link with is not linked to any other columns.
- // Update it's master_column.
- same_size_column->master_column_ = column;
- // Add linked column to list of linked column.
- column->GetLastMasterColumn()->same_size_columns_.
- push_back(same_size_column);
- } else if (column->GetLastMasterColumn() !=
- same_size_column->GetLastMasterColumn()) {
- // The two columns are already linked with other columns.
- std::vector<Column*>* same_size_columns =
- &(column->GetLastMasterColumn()->same_size_columns_);
- std::vector<Column*>* other_same_size_columns =
- &(same_size_column->GetLastMasterColumn()->same_size_columns_);
- // Add all the columns from the others master to current columns
- // master.
- same_size_columns->insert(same_size_columns->end(),
- other_same_size_columns->begin(),
- other_same_size_columns->end());
- // The other master is no longer a master, clear its vector of
- // linked columns, and reset its master_column.
- other_same_size_columns->clear();
- same_size_column->GetLastMasterColumn()->master_column_ = column;
- }
- }
- }
- }
- AccumulateMasterColumns();
-}
-
-void ColumnSet::AccumulateMasterColumns() {
- DCHECK(master_columns_.empty());
- for (std::vector<Column*>::iterator i = columns_.begin();
- i != columns_.end(); ++i) {
- Column* column = *i;
- Column* master_column = column->GetLastMasterColumn();
- if (master_column &&
- find(master_columns_.begin(), master_columns_.end(),
- master_column) == master_columns_.end()) {
- master_columns_.push_back(master_column);
- }
- // At this point, GetLastMasterColumn may not == master_column
- // (may have to go through a few Columns)_. Reset master_column to
- // avoid hops.
- column->master_column_ = master_column;
- }
-}
-
-void ColumnSet::UnifySameSizedColumnSizes() {
- for (std::vector<Column*>::iterator i = master_columns_.begin();
- i != master_columns_.end(); ++i) {
- (*i)->UnifySameSizedColumnSizes();
- }
-}
-
-void ColumnSet::UpdateRemainingWidth(ViewState* view_state) {
- for (int i = view_state->start_col; i < view_state->col_span; ++i) {
- view_state->remaining_width -= columns_[i]->Size();
- }
-}
-
-void ColumnSet::DistributeRemainingWidth(ViewState* view_state) {
- // This is nearly the same as that for rows, but differs in so far as how
- // Rows and Columns are treated. Rows have two states, resizable or not.
- // Columns have three, resizable, USE_PREF or not resizable. This results
- // in slightly different handling for distributing unaccounted size.
- int width = view_state->remaining_width;
- if (width <= 0) {
- // The columns this view is in are big enough to accommodate it.
- return;
- }
-
- // Determine which columns are resizable, and which have a size type
- // of USE_PREF.
- int resizable_columns = 0;
- int pref_size_columns = 0;
- int start_col = view_state->start_col;
- int max_col = view_state->start_col + view_state->col_span;
- for (int i = start_col; i < max_col; ++i) {
- if (columns_[i]->IsResizable()) {
- resizable_columns++;
- } else if (columns_[i]->size_type_ == GridLayout::USE_PREF) {
- pref_size_columns++;
- }
- }
-
- if (resizable_columns > 0) {
- // There are resizable columns, give the remaining width to them.
- int to_distribute = width / resizable_columns;
- for (int i = start_col; i < max_col; ++i) {
- if (columns_[i]->IsResizable()) {
- width -= to_distribute;
- if (width < to_distribute) {
- // Give all slop to the last column.
- to_distribute += width;
- }
- columns_[i]->SetSize(columns_[i]->Size() + to_distribute);
- }
- }
- } else if (pref_size_columns > 0) {
- // None of the columns are resizable, distribute the width among those
- // that use the preferred size.
- int to_distribute = width / pref_size_columns;
- for (int i = start_col; i < max_col; ++i) {
- if (columns_[i]->size_type_ == GridLayout::USE_PREF) {
- width -= to_distribute;
- if (width < to_distribute)
- to_distribute += width;
- columns_[i]->SetSize(columns_[i]->Size() + to_distribute);
- }
- }
- }
-}
-
-int ColumnSet::LayoutWidth() {
- int width = 0;
- for (std::vector<Column*>::iterator i = columns_.begin();
- i != columns_.end(); ++i) {
- width += (*i)->Size();
- }
- return width;
-}
-
-int ColumnSet::GetColumnWidth(int start_col, int col_span) {
- return LayoutElement::TotalSize(start_col, col_span, &columns_);
-}
-
-void ColumnSet::ResetColumnXCoordinates() {
- LayoutElement::CalculateLocationsFromSize(&columns_);
-}
-
-void ColumnSet::CalculateSize() {
- gfx::Size pref;
- // Reset the preferred and remaining sizes.
- for (std::vector<ViewState*>::iterator i = view_states_.begin();
- i != view_states_.end(); ++i) {
- ViewState* view_state = *i;
- if (!view_state->pref_width_fixed || !view_state->pref_height_fixed) {
- pref = view_state->view->GetPreferredSize();
- if (!view_state->pref_width_fixed)
- view_state->pref_width = pref.width();
- if (!view_state->pref_height_fixed)
- view_state->pref_height = pref.height();
- }
- view_state->remaining_width = pref.width();
- view_state->remaining_height = pref.height();
- }
-
- // Let layout element reset the sizes for us.
- LayoutElement::ResetSizes(&columns_);
-
- // Distribute the size of each view with a col span == 1.
- std::vector<ViewState*>::iterator view_state_iterator =
- view_states_.begin();
- for (; view_state_iterator != view_states_.end() &&
- (*view_state_iterator)->col_span == 1; ++view_state_iterator) {
- ViewState* view_state = *view_state_iterator;
- Column* column = columns_[view_state->start_col];
- column->AdjustSize(view_state->pref_width);
- view_state->remaining_width -= column->Size();
- }
-
- // Make sure all linked columns have the same size.
- UnifySameSizedColumnSizes();
-
- // Distribute the size of each view with a column span > 1.
- for (; view_state_iterator != view_states_.end(); ++view_state_iterator) {
- ViewState* view_state = *view_state_iterator;
-
- // Update the remaining_width from columns this view_state touches.
- UpdateRemainingWidth(view_state);
-
- // Distribute the remaining width.
- DistributeRemainingWidth(view_state);
-
- // Update the size of linked columns.
- // This may need to be combined with previous step.
- UnifySameSizedColumnSizes();
- }
-}
-
-void ColumnSet::Resize(int delta) {
- LayoutElement::DistributeDelta(delta, &columns_);
-}
-
-// GridLayout -------------------------------------------------------------
-
-GridLayout::GridLayout(View* host)
- : host_(host),
- calculated_master_columns_(false),
- remaining_row_span_(0),
- current_row_(-1),
- next_column_(0),
- current_row_col_set_(NULL),
- top_inset_(0),
- bottom_inset_(0),
- left_inset_(0),
- right_inset_(0),
- adding_view_(false) {
- DCHECK(host);
-}
-
-GridLayout::~GridLayout() {
- for (std::vector<ColumnSet*>::iterator i = column_sets_.begin();
- i != column_sets_.end(); ++i) {
- delete *i;
- }
- for (std::vector<ViewState*>::iterator i = view_states_.begin();
- i != view_states_.end(); ++i) {
- delete *i;
- }
- for (std::vector<Row*>::iterator i = rows_.begin();
- i != rows_.end(); ++i) {
- delete *i;
- }
-}
-
-void GridLayout::SetInsets(int top, int left, int bottom, int right) {
- top_inset_ = top;
- bottom_inset_ = bottom;
- left_inset_ = left;
- right_inset_ = right;
-}
-
-ColumnSet* GridLayout::AddColumnSet(int id) {
- DCHECK(GetColumnSet(id) == NULL);
- ColumnSet* column_set = new ColumnSet(id);
- column_sets_.push_back(column_set);
- return column_set;
-}
-
-void GridLayout::StartRowWithPadding(float vertical_resize, int column_set_id,
- float padding_resize, int padding) {
- AddPaddingRow(padding_resize, padding);
- StartRow(vertical_resize, column_set_id);
-}
-
-void GridLayout::StartRow(float vertical_resize, int column_set_id) {
- ColumnSet* column_set = GetColumnSet(column_set_id);
- DCHECK(column_set);
- AddRow(new Row(false, 0, vertical_resize, column_set));
-}
-
-void GridLayout::AddPaddingRow(float vertical_resize, int pixel_count) {
- AddRow(new Row(true, pixel_count, vertical_resize, NULL));
-}
-
-void GridLayout::SkipColumns(int col_count) {
- DCHECK(col_count > 0);
- next_column_ += col_count;
- DCHECK(current_row_col_set_ &&
- next_column_ <= current_row_col_set_->num_columns());
- SkipPaddingColumns();
-}
-
-void GridLayout::AddView(View* view) {
- AddView(view, 1, 1);
-}
-
-void GridLayout::AddView(View* view, int col_span, int row_span) {
- DCHECK(current_row_col_set_ &&
- next_column_ < current_row_col_set_->num_columns());
- Column* column = current_row_col_set_->columns_[next_column_];
- AddView(view, col_span, row_span, column->h_align(), column->v_align());
-}
-
-void GridLayout::AddView(View* view, int col_span, int row_span,
- Alignment h_align, Alignment v_align) {
- AddView(view, col_span, row_span, h_align, v_align, 0, 0);
-}
-
-void GridLayout::AddView(View* view, int col_span, int row_span,
- Alignment h_align, Alignment v_align,
- int pref_width, int pref_height) {
- DCHECK(current_row_col_set_ && col_span > 0 && row_span > 0 &&
- (next_column_ + col_span) <= current_row_col_set_->num_columns());
- ViewState* state =
- new ViewState(current_row_col_set_, view, next_column_, current_row_,
- col_span, row_span, h_align, v_align, pref_width,
- pref_height);
- AddViewState(state);
-}
-
-static void CalculateSize(int pref_size, GridLayout::Alignment alignment,
- int* location, int* size) {
- if (alignment != GridLayout::FILL) {
- int available_size = *size;
- *size = std::min(*size, pref_size);
- switch (alignment) {
- case GridLayout::LEADING:
- // Nothing to do, location already points to start.
- break;
- case GridLayout::CENTER:
- *location += (available_size - *size) / 2;
- break;
- case GridLayout::TRAILING:
- *location = *location + available_size - *size;
- break;
- default:
- NOTREACHED();
- }
- }
-}
-
-void GridLayout::Installed(View* host) {
- DCHECK(host_ == host);
-}
-
-void GridLayout::Uninstalled(View* host) {
- DCHECK(host_ == host);
-}
-
-void GridLayout::ViewAdded(View* host, View* view) {
- DCHECK(host_ == host && adding_view_);
-}
-
-void GridLayout::ViewRemoved(View* host, View* view) {
- DCHECK(host_ == host);
-}
-
-void GridLayout::Layout(View* host) {
- DCHECK(host_ == host);
- // SizeRowsAndColumns sets the size and location of each row/column, but
- // not of the views.
- gfx::Size pref;
- SizeRowsAndColumns(true, host_->width(), host_->height(), &pref);
-
- // Size each view.
- for (std::vector<ViewState*>::iterator i = view_states_.begin();
- i != view_states_.end(); ++i) {
- ViewState* view_state = *i;
- ColumnSet* column_set = view_state->column_set;
- View* view = (*i)->view;
- DCHECK(view);
- int x = column_set->columns_[view_state->start_col]->Location() +
- left_inset_;
- int width = column_set->GetColumnWidth(view_state->start_col,
- view_state->col_span);
- CalculateSize(view_state->pref_width, view_state->h_align,
- &x, &width);
- int y = rows_[view_state->start_row]->Location() + top_inset_;
- int height = LayoutElement::TotalSize(view_state->start_row,
- view_state->row_span, &rows_);
- CalculateSize(view_state->pref_height, view_state->v_align,
- &y, &height);
- view->SetBounds(x, y, width, height);
- }
-}
-
-gfx::Size GridLayout::GetPreferredSize(View* host) {
- DCHECK(host_ == host);
- gfx::Size out;
- SizeRowsAndColumns(false, 0, 0, &out);
- return out;
-}
-
-int GridLayout::GetPreferredHeightForWidth(View* host, int width) {
- DCHECK(host_ == host);
- gfx::Size pref;
- SizeRowsAndColumns(false, width, 0, &pref);
- return pref.height();
-}
-
-void GridLayout::SizeRowsAndColumns(bool layout, int width, int height,
- gfx::Size* pref) {
- // Make sure the master columns have been calculated.
- CalculateMasterColumnsIfNecessary();
- pref->SetSize(0, 0);
- if (rows_.empty())
- return;
-
- // Calculate the size of each of the columns. Some views preferred heights are
- // derived from their width, as such we need to calculate the size of the
- // columns first.
- for (std::vector<ColumnSet*>::iterator i = column_sets_.begin();
- i != column_sets_.end(); ++i) {
- (*i)->CalculateSize();
- if (layout || width > 0) {
- // We're doing a layout, divy up any extra space.
- (*i)->Resize(width - (*i)->LayoutWidth() - left_inset_ - right_inset_);
- // And reset the x coordinates.
- (*i)->ResetColumnXCoordinates();
- }
- pref->set_width(std::max(pref->width(), (*i)->LayoutWidth()));
- }
- pref->set_width(pref->width() + left_inset_ + right_inset_);
-
- // Reset the height of each row.
- LayoutElement::ResetSizes(&rows_);
-
- // Do two things:
- // . Reset the remaining_height of each view state.
- // . If the width the view will be given is different than it's pref, ask
- // for the height given a particularly width.
- for (std::vector<ViewState*>::iterator i= view_states_.begin();
- i != view_states_.end() ; ++i) {
- ViewState* view_state = *i;
- view_state->remaining_height = view_state->pref_height;
- if (view_state->h_align == FILL) {
- // The view is resizable. As the pref height may vary with the width,
- // ask for the pref again.
- int actual_width =
- view_state->column_set->GetColumnWidth(view_state->start_col,
- view_state->col_span);
- if (actual_width != view_state->pref_width &&
- !view_state->pref_height_fixed) {
- // The width this view will get differs from it's preferred. Some Views
- // pref height varies with it's width; ask for the preferred again.
- view_state->pref_height =
- view_state->view->GetHeightForWidth(actual_width);
- view_state->remaining_height = view_state->pref_height;
- }
- }
- }
-
- // Update the height of each row from the views.
- std::vector<ViewState*>::iterator view_states_iterator = view_states_.begin();
- for (; view_states_iterator != view_states_.end() &&
- (*view_states_iterator)->row_span == 1; ++view_states_iterator) {
- ViewState* view_state = *view_states_iterator;
- Row* row = rows_[view_state->start_row];
- row->AdjustSize(view_state->remaining_height);
- view_state->remaining_height = 0;
- }
-
- // Distribute the height of each view with a row span > 1.
- for (; view_states_iterator != view_states_.end(); ++view_states_iterator) {
- ViewState* view_state = *view_states_iterator;
-
- // Update the remaining_width from columns this view_state touches.
- UpdateRemainingHeightFromRows(view_state);
-
- // Distribute the remaining height.
- DistributeRemainingHeight(view_state);
- }
-
- // Update the location of each of the rows.
- LayoutElement::CalculateLocationsFromSize(&rows_);
-
- // We now know the preferred height, set it here.
- pref->set_height(rows_[rows_.size() - 1]->Location() +
- rows_[rows_.size() - 1]->Size() + top_inset_ + bottom_inset_);
-
- if (layout && height != pref->height()) {
- // We're doing a layout, and the height differs from the preferred height,
- // divy up the extra space.
- LayoutElement::DistributeDelta(height - pref->height(), &rows_);
-
- // Reset y locations.
- LayoutElement::CalculateLocationsFromSize(&rows_);
- }
-}
-
-void GridLayout::CalculateMasterColumnsIfNecessary() {
- if (!calculated_master_columns_) {
- calculated_master_columns_ = true;
- for (std::vector<ColumnSet*>::iterator i = column_sets_.begin();
- i != column_sets_.end(); ++i) {
- (*i)->CalculateMasterColumns();
- }
- }
-}
-
-void GridLayout::AddViewState(ViewState* view_state) {
- DCHECK(view_state->view && (view_state->view->GetParent() == NULL ||
- view_state->view->GetParent() == host_));
- if (!view_state->view->GetParent()) {
- adding_view_ = true;
- host_->AddChildView(view_state->view);
- adding_view_ = false;
- }
- remaining_row_span_ = std::max(remaining_row_span_, view_state->row_span);
- next_column_ += view_state->col_span;
- current_row_col_set_->AddViewState(view_state);
- // view_states are ordered by row_span (in ascending order).
- std::vector<ViewState*>::iterator i = lower_bound(view_states_.begin(),
- view_states_.end(),
- view_state,
- CompareByRowSpan);
- view_states_.insert(i, view_state);
- SkipPaddingColumns();
-}
-
-ColumnSet* GridLayout::GetColumnSet(int id) {
- for (std::vector<ColumnSet*>::iterator i = column_sets_.begin();
- i != column_sets_.end(); ++i) {
- if ((*i)->id_ == id) {
- return *i;
- }
- }
- return NULL;
-}
-
-void GridLayout::AddRow(Row* row) {
- current_row_++;
- remaining_row_span_--;
- DCHECK(remaining_row_span_ <= 0 ||
- row->column_set() == NULL ||
- row->column_set() == GetLastValidColumnSet());
- next_column_ = 0;
- rows_.push_back(row);
- current_row_col_set_ = row->column_set();
- SkipPaddingColumns();
-}
-
-void GridLayout::UpdateRemainingHeightFromRows(ViewState* view_state) {
- for (int i = 0, start_row = view_state->start_row;
- i < view_state->row_span; ++i) {
- view_state->remaining_height -= rows_[i + start_row]->Size();
- }
-}
-
-void GridLayout::DistributeRemainingHeight(ViewState* view_state) {
- int height = view_state->remaining_height;
- if (height <= 0)
- return;
-
- // Determine the number of resizable rows the view touches.
- int resizable_rows = 0;
- int start_row = view_state->start_row;
- int max_row = view_state->start_row + view_state->row_span;
- for (int i = start_row; i < max_row; ++i) {
- if (rows_[i]->IsResizable()) {
- resizable_rows++;
- }
- }
-
- if (resizable_rows > 0) {
- // There are resizable rows, give the remaining height to them.
- int to_distribute = height / resizable_rows;
- for (int i = start_row; i < max_row; ++i) {
- if (rows_[i]->IsResizable()) {
- height -= to_distribute;
- if (height < to_distribute) {
- // Give all slop to the last column.
- to_distribute += height;
- }
- rows_[i]->SetSize(rows_[i]->Size() + to_distribute);
- }
- }
- } else {
- // None of the rows are resizable, divy the remaining height up equally
- // among all rows the view touches.
- int each_row_height = height / view_state->row_span;
- for (int i = start_row; i < max_row; ++i) {
- height -= each_row_height;
- if (height < each_row_height)
- each_row_height += height;
- rows_[i]->SetSize(rows_[i]->Size() + each_row_height);
- }
- view_state->remaining_height = 0;
- }
-}
-
-void GridLayout::SkipPaddingColumns() {
- if (!current_row_col_set_)
- return;
- while (next_column_ < current_row_col_set_->num_columns() &&
- current_row_col_set_->columns_[next_column_]->is_padding_) {
- next_column_++;
- }
-}
-
-ColumnSet* GridLayout::GetLastValidColumnSet() {
- for (int i = current_row_ - 1; i >= 0; --i) {
- if (rows_[i]->column_set())
- return rows_[i]->column_set();
- }
- return NULL;
-}
-
-} // namespace views
diff --git a/chrome/views/grid_layout.h b/chrome/views/grid_layout.h
deleted file mode 100644
index 9cddd95..0000000
--- a/chrome/views/grid_layout.h
+++ /dev/null
@@ -1,354 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_GRID_LAYOUT_H_
-#define CHROME_VIEWS_GRID_LAYOUT_H_
-
-#include <string>
-#include <vector>
-
-#include "chrome/views/layout_manager.h"
-#include "chrome/views/view.h"
-
-// GridLayout is a LayoutManager that positions child Views in a grid. You
-// define the structure of the Grid first, then add the Views.
-// The following creates a trivial grid with two columns separated by
-// a column with padding:
-// ColumnSet* columns = layout->AddColumnSet(0); // Give this column an
-// // identifier of 0.
-// columns->AddColumn(FILL, // Views are horizontally resized to fill column.
-// FILL, // Views starting in this column are vertically
-// // resized.
-// 1, // This column has a resize weight of 1.
-// USE_PREF, // Use the preferred size of the view.
-// 0, // Ignored for USE_PREF.
-// 0); // A minimum width of 0.
-// columns->AddPaddingColumn(0, // The padding column is not resizable.
-// 10); // And has a width of 10 pixels.
-// columns->AddColumn(FILL, FILL, 0, USE_PREF, 0, 0);
-// Now add the views:
-// // First start a row.
-// layout->StartRow(0, // This row isn't vertically resizable.
-// 0); // The column set to use for this row.
-// layout->AddView(v1);
-// Notice you need not skip over padding columns, that's done for you.
-// layout->AddView(v2);
-//
-// When adding a Column you give it the default alignment for all views
-// originating in that column. You can override this for specific views
-// when adding them. For example, the following forces a View to have
-// a horizontal and vertical alignment of leading regardless of that defined
-// for the column:
-// layout->AddView(v1, 1, 1, LEADING, LEADING);
-//
-// If the View using GridLayout is given a size bigger than the preferred,
-// columns and rows with a resize percent > 0 are resized. Each column/row
-// is given resize_percent / total_resize_percent * extra_pixels extra
-// pixels. Only Views with an Alignment of FILL are given extra space, others
-// are aligned in the provided space.
-//
-// GridLayout allows you to define multiple column sets. When you start a
-// new row you specify the id of the column set the row is to use.
-//
-// GridLayout allows you to force columns to have the same width. This is
-// done using the LinkColumnSizes method.
-//
-// AddView takes care of adding the View to the View the GridLayout was
-// created with.
-namespace views {
-
-class Column;
-class ColumnSet;
-class Row;
-class View;
-
-struct ViewState;
-
-class GridLayout : public LayoutManager {
- public:
- // An enumeration of the possible alignments supported by GridLayout.
- enum Alignment {
- // Leading equates to left along the horizontal axis, and top along the
- // vertical axis.
- LEADING,
-
- // Centers the view along the axis.
- CENTER,
-
- // Trailing equals to right along the horizontal axis, and bottom along
- // the vertical axis.
- TRAILING,
-
- // The view is resized to fill the space.
- FILL
- };
-
- // An enumeration of the possible ways the size of a column may be obtained.
- enum SizeType {
- // The column size is fixed.
- FIXED,
-
- // The preferred size of the view is used to determine the column size.
- USE_PREF
- };
-
- explicit GridLayout(View* host);
- virtual ~GridLayout();
-
- // Sets the insets. All views are placed relative to these offsets.
- void SetInsets(int top, int left, int bottom, int right);
-
- // Creates a new column set with the specified id and returns it.
- // The id is later used when starting a new row.
- // GridLayout takes ownership of the ColumnSet and will delete it when
- // the GridLayout is deleted.
- ColumnSet* AddColumnSet(int id);
-
- // Adds a padding row. Padding rows typically don't have any views, and
- // but are used to provide vertical white space between views.
- // Size specifies the height of the row.
- void AddPaddingRow(float vertical_resize, int size);
-
- // A convenience for AddPaddingRow followed by StartRow.
- void StartRowWithPadding(float vertical_resize, int column_set_id,
- float padding_resize, int padding);
-
- // Starts a new row with the specified column set.
- void StartRow(float vertical_resize, int column_set_id);
-
- // Advances past columns. Use this when the current column should not
- // contain any views.
- void SkipColumns(int col_count);
-
- // Adds a view using the default alignment from the column. The added
- // view has a column and row span of 1.
- // As a convenience this adds the view to the host. The view becomes owned
- // by the host, and NOT this GridLayout.
- void AddView(View* view);
-
- // Adds a view using the default alignment from the column.
- // As a convenience this adds the view to the host. The view becomes owned
- // by the host, and NOT this GridLayout.
- void AddView(View* view, int col_span, int row_span);
-
- // Adds a view with the specified alignment and spans.
- // As a convenience this adds the view to the host. The view becomes owned
- // by the host, and NOT this GridLayout.
- void AddView(View* view, int col_span, int row_span, Alignment h_align,
- Alignment v_align);
-
- // Adds a view with the specified alignment and spans. If
- // pref_width/pref_height is > 0 then the preferred width/height of the view
- // is fixed to the specified value.
- // As a convenience this adds the view to the host. The view becomes owned
- // by the host, and NOT this GridLayout.
- void AddView(View* view, int col_span, int row_span,
- Alignment h_align, Alignment v_align,
- int pref_width, int pref_height);
-
- // Notification we've been installed on a particular host. Checks that host
- // is the same as the View supplied in the constructor.
- virtual void Installed(View* host);
-
- // Notification we've been uninstalled on a particular host. Checks that host
- // is the same as the View supplied in the constructor.
- virtual void Uninstalled(View* host);
-
- // Notification that a view has been added.
- virtual void ViewAdded(View* host, View* view);
-
- // Notification that a view has been removed.
- virtual void ViewRemoved(View* host, View* view);
-
- // Layouts out the components.
- virtual void Layout(View* host);
-
- // Returns the preferred size for the GridLayout.
- virtual gfx::Size GetPreferredSize(View* host);
-
- virtual int GetPreferredHeightForWidth(View* host, int width);
-
- private:
- // As both Layout and GetPreferredSize need to do nearly the same thing,
- // they both call into this method. This sizes the Columns/Rows as
- // appropriate. If layout is true, width/height give the width/height the
- // of the host, otherwise they are ignored.
- void SizeRowsAndColumns(bool layout, int width, int height,
- gfx::Size* pref);
-
- // Calculates the master columns of all the column sets. See Column for
- // a description of what a master column is.
- void CalculateMasterColumnsIfNecessary();
-
- // This is called internally from AddView. It adds the ViewState to the
- // appropriate structures, and updates internal fields such as next_column_.
- void AddViewState(ViewState* view_state);
-
- // Returns the column set for the specified id, or NULL if one doesn't exist.
- ColumnSet* GetColumnSet(int id);
-
- // Adds the Row to rows_, as well as updating next_column_,
- // current_row_col_set ...
- void AddRow(Row* row);
-
- // As the name says, updates the remaining_height of the ViewState for
- // all Rows the supplied ViewState touches.
- void UpdateRemainingHeightFromRows(ViewState* state);
-
- // If the view state's remaining height is > 0, it is distributed among
- // the rows the view state touches. This is used during layout to make
- // sure the Rows can accommodate a view.
- void DistributeRemainingHeight(ViewState* state);
-
- // Advances next_column_ past any padding columns.
- void SkipPaddingColumns();
-
- // Returns the column set of the last non-padding row.
- ColumnSet* GetLastValidColumnSet();
-
- // The view we were created with. We don't own this.
- View* const host_;
-
- // Whether or not we've calculated the master/linked columns.
- bool calculated_master_columns_;
-
- // Used to verify a view isn't added with a row span that expands into
- // another column structure.
- int remaining_row_span_;
-
- // Current row.
- int current_row_;
-
- // Current column.
- int next_column_;
-
- // Column set for the current row. This is null for padding rows.
- ColumnSet* current_row_col_set_;
-
- // Insets.
- int top_inset_;
- int bottom_inset_;
- int left_inset_;
- int right_inset_;
-
- // Set to true when adding a View.
- bool adding_view_;
-
- // ViewStates. This is ordered by row_span in ascending order.
- std::vector<ViewState*> view_states_;
-
- // ColumnSets.
- std::vector<ColumnSet*> column_sets_;
-
- // Rows.
- std::vector<Row*> rows_;
-
- DISALLOW_EVIL_CONSTRUCTORS(GridLayout);
-};
-
-// ColumnSet is used to define a set of columns. GridLayout may have any
-// number of ColumnSets. You don't create a ColumnSet directly, instead
-// use the AddColumnSet method of GridLayout.
-class ColumnSet {
- public:
- ~ColumnSet();
-
- // Adds a column for padding. When adding views, padding columns are
- // automatically skipped. For example, if you create a column set with
- // two columns separated by a padding column, the first AddView automatically
- // skips past the padding column. That is, to add two views, do:
- // layout->AddView(v1); layout->AddView(v2);, not:
- // layout->AddView(v1); layout->SkipColumns(1); layout->AddView(v2);
- void AddPaddingColumn(float resize_percent, int width);
-
- // Adds a column. The alignment gives the default alignment for views added
- // with no explicit alignment. fixed_width gives a specific width for the
- // column, and is only used if size_type == FIXED. min_width gives the
- // minimum width for the column.
- void AddColumn(GridLayout::Alignment h_align,
- GridLayout::Alignment v_align,
- float resize_percent,
- GridLayout::SizeType size_type,
- int fixed_width,
- int min_width);
-
- // Forces the specified columns to have the same size. The size of
- // linked columns is that of the max of the specified columns. This
- // must end with -1. For example, the following forces the first and
- // second column to have the same size:
- // LinkColumnSizes(0, 1, -1);
- void LinkColumnSizes(int first, ...);
-
- // ID of this ColumnSet.
- int id() const { return id_; }
-
- int num_columns() { return static_cast<int>(columns_.size()); }
-
- private:
- friend class GridLayout;
-
- explicit ColumnSet(int id);
-
- void AddColumn(GridLayout::Alignment h_align,
- GridLayout::Alignment v_align,
- float resize_percent,
- GridLayout::SizeType size_type,
- int fixed_width,
- int min_width,
- bool is_padding);
-
- void AddViewState(ViewState* view_state);
-
- // Set description of these.
- void CalculateMasterColumns();
- void AccumulateMasterColumns();
-
- // Sets the size of each linked column to be the same.
- void UnifySameSizedColumnSizes();
-
- // Updates the remaining width field of the ViewState from that of the
- // columns the view spans.
- void UpdateRemainingWidth(ViewState* view_state);
-
- // Makes sure the columns touched by view state are big enough for the
- // view.
- void DistributeRemainingWidth(ViewState* view_state);
-
- // Returns the total size needed for this ColumnSet.
- int LayoutWidth();
-
- // Returns the width of the specified columns.
- int GetColumnWidth(int start_col, int col_span);
-
- // Updates the x coordinate of each column from the previous ones.
- // NOTE: this doesn't include the insets.
- void ResetColumnXCoordinates();
-
- // Calculate the preferred width of each view in this column set, as well
- // as updating the remaining_width.
- void CalculateSize();
-
- // Distributes delta amoung the resizable columns.
- void Resize(int delta);
-
- // ID for this columnset.
- const int id_;
-
- // The columns.
- std::vector<Column*> columns_;
-
- // The ViewStates. This is sorted based on column_span in ascending
- // order.
- std::vector<ViewState*> view_states_;
-
- // The master column of those columns that are linked. See Column
- // for a description of what the master column is.
- std::vector<Column*> master_columns_;
-
- DISALLOW_EVIL_CONSTRUCTORS(ColumnSet);
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_GRID_LAYOUT_H_
diff --git a/chrome/views/grid_layout_unittest.cc b/chrome/views/grid_layout_unittest.cc
deleted file mode 100644
index ed52ed0..0000000
--- a/chrome/views/grid_layout_unittest.cc
+++ /dev/null
@@ -1,515 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/grid_layout.h"
-#include "chrome/views/view.h"
-
-#include "testing/gtest/include/gtest/gtest.h"
-
-using views::ColumnSet;
-using views::GridLayout;
-using views::View;
-
-static void ExpectViewBoundsEquals(int x, int y, int w, int h,
- const View* view) {
- EXPECT_EQ(x, view->x());
- EXPECT_EQ(y, view->y());
- EXPECT_EQ(w, view->width());
- EXPECT_EQ(h, view->height());
-}
-
-class SettableSizeView : public View {
- public:
- explicit SettableSizeView(const gfx::Size& pref) {
- pref_ = pref;
- }
-
- virtual gfx::Size GetPreferredSize() {
- return pref_;
- }
-
- private:
- gfx::Size pref_;
-};
-
-class GridLayoutTest : public testing::Test {
- public:
- virtual void SetUp() {
- layout = new GridLayout(&host);
- }
-
- virtual void TearDown() {
- delete layout;
- }
-
- virtual void RemoveAll() {
- for (int i = host.GetChildViewCount() - 1; i >= 0; i--) {
- host.RemoveChildView(host.GetChildViewAt(i));
- }
- }
-
- void GetPreferredSize() {
- pref = layout->GetPreferredSize(&host);
- }
-
- gfx::Size pref;
- CRect bounds;
- View host;
- GridLayout* layout;
-};
-
-class GridLayoutAlignmentTest : public testing::Test {
- public:
- GridLayoutAlignmentTest() :
- host(),
- v1(gfx::Size(10, 20)),
- layout(new GridLayout(&host)) {}
-
- virtual void SetUp() {
- }
-
- virtual void TearDown() {
- delete layout;
- }
-
- virtual void RemoveAll() {
- for (int i = host.GetChildViewCount() - 1; i >= 0; i--) {
- host.RemoveChildView(host.GetChildViewAt(i));
- }
- }
-
- void TestAlignment(GridLayout::Alignment alignment, CRect* bounds) {
- ColumnSet* c1 = layout->AddColumnSet(0);
- c1->AddColumn(alignment, alignment, 1, GridLayout::USE_PREF, 0, 0);
- layout->StartRow(1, 0);
- layout->AddView(&v1);
- gfx::Size pref = layout->GetPreferredSize(&host);
- EXPECT_TRUE(gfx::Size(10, 20) == pref);
- host.SetBounds(0, 0, 100, 100);
- layout->Layout(&host);
- *bounds = v1.bounds().ToRECT();
- RemoveAll();
- }
-
- View host;
- SettableSizeView v1;
- GridLayout* layout;
-};
-
-TEST_F(GridLayoutAlignmentTest, Fill) {
- CRect bounds;
- TestAlignment(GridLayout::FILL, &bounds);
- EXPECT_TRUE(CRect(0, 0, 100, 100) == bounds);
-}
-
-TEST_F(GridLayoutAlignmentTest, Leading) {
- CRect bounds;
- TestAlignment(GridLayout::LEADING, &bounds);
- EXPECT_TRUE(CRect(0, 0, 10, 20) == bounds);
-}
-
-TEST_F(GridLayoutAlignmentTest, Center) {
- CRect bounds;
- TestAlignment(GridLayout::CENTER, &bounds);
- EXPECT_TRUE(CRect(45, 40, 55, 60) == bounds);
-}
-
-TEST_F(GridLayoutAlignmentTest, Trailing) {
- CRect bounds;
- TestAlignment(GridLayout::TRAILING, &bounds);
- EXPECT_TRUE(CRect(90, 80, 100, 100) == bounds);
-}
-
-TEST_F(GridLayoutTest, TwoColumns) {
- SettableSizeView v1(gfx::Size(10, 20));
- SettableSizeView v2(gfx::Size(20, 20));
- ColumnSet* c1 = layout->AddColumnSet(0);
- c1->AddColumn(GridLayout::LEADING, GridLayout::LEADING,
- 0, GridLayout::USE_PREF, 0, 0);
- c1->AddColumn(GridLayout::LEADING, GridLayout::LEADING,
- 0, GridLayout::USE_PREF, 0, 0);
- layout->StartRow(0, 0);
- layout->AddView(&v1);
- layout->AddView(&v2);
-
- GetPreferredSize();
- EXPECT_TRUE(gfx::Size(30, 20) == pref);
-
- host.SetBounds(0, 0, pref.width(), pref.height());
- layout->Layout(&host);
- ExpectViewBoundsEquals(0, 0, 10, 20, &v1);
- ExpectViewBoundsEquals(10, 0, 20, 20, &v2);
-
- RemoveAll();
-}
-
-TEST_F(GridLayoutTest, ColSpan1) {
- SettableSizeView v1(gfx::Size(100, 20));
- SettableSizeView v2(gfx::Size(10, 40));
- ColumnSet* c1 = layout->AddColumnSet(0);
- c1->AddColumn(GridLayout::LEADING, GridLayout::LEADING,
- 0, GridLayout::USE_PREF, 0, 0);
- c1->AddColumn(GridLayout::LEADING, GridLayout::LEADING,
- 1, GridLayout::USE_PREF, 0, 0);
- layout->StartRow(0, 0);
- layout->AddView(&v1, 2, 1);
- layout->StartRow(0, 0);
- layout->AddView(&v2);
-
- GetPreferredSize();
- EXPECT_TRUE(gfx::Size(100, 60) == pref);
-
- host.SetBounds(0, 0, pref.width(), pref.height());
- layout->Layout(&host);
- ExpectViewBoundsEquals(0, 0, 100, 20, &v1);
- ExpectViewBoundsEquals(0, 20, 10, 40, &v2);
-
- RemoveAll();
-}
-
-TEST_F(GridLayoutTest, ColSpan2) {
- SettableSizeView v1(gfx::Size(100, 20));
- SettableSizeView v2(gfx::Size(10, 20));
- ColumnSet* c1 = layout->AddColumnSet(0);
- c1->AddColumn(GridLayout::LEADING, GridLayout::LEADING,
- 1, GridLayout::USE_PREF, 0, 0);
- c1->AddColumn(GridLayout::LEADING, GridLayout::LEADING,
- 0, GridLayout::USE_PREF, 0, 0);
- layout->StartRow(0, 0);
- layout->AddView(&v1, 2, 1);
- layout->StartRow(0, 0);
- layout->SkipColumns(1);
- layout->AddView(&v2);
-
- GetPreferredSize();
- EXPECT_TRUE(gfx::Size(100, 40) == pref);
-
- host.SetBounds(0, 0, pref.width(), pref.height());
- layout->Layout(&host);
- ExpectViewBoundsEquals(0, 0, 100, 20, &v1);
- ExpectViewBoundsEquals(90, 20, 10, 20, &v2);
-
- RemoveAll();
-}
-
-TEST_F(GridLayoutTest, ColSpan3) {
- SettableSizeView v1(gfx::Size(100, 20));
- SettableSizeView v2(gfx::Size(10, 20));
- SettableSizeView v3(gfx::Size(10, 20));
- ColumnSet* c1 = layout->AddColumnSet(0);
- c1->AddColumn(GridLayout::LEADING, GridLayout::LEADING,
- 0, GridLayout::USE_PREF, 0, 0);
- c1->AddColumn(GridLayout::LEADING, GridLayout::LEADING,
- 0, GridLayout::USE_PREF, 0, 0);
- layout->StartRow(0, 0);
- layout->AddView(&v1, 2, 1);
- layout->StartRow(0, 0);
- layout->AddView(&v2);
- layout->AddView(&v3);
-
- GetPreferredSize();
- EXPECT_TRUE(gfx::Size(100, 40) == pref);
-
- host.SetBounds(0, 0, pref.width(), pref.height());
- layout->Layout(&host);
- ExpectViewBoundsEquals(0, 0, 100, 20, &v1);
- ExpectViewBoundsEquals(0, 20, 10, 20, &v2);
- ExpectViewBoundsEquals(50, 20, 10, 20, &v3);
-
- RemoveAll();
-}
-
-
-TEST_F(GridLayoutTest, ColSpan4) {
- views::ColumnSet* set = layout->AddColumnSet(0);
-
- set->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 0,
- GridLayout::USE_PREF, 0, 0);
- set->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 0,
- GridLayout::USE_PREF, 0, 0);
-
- SettableSizeView v1(gfx::Size(10, 10));
- SettableSizeView v2(gfx::Size(10, 10));
- SettableSizeView v3(gfx::Size(25, 20));
- layout->StartRow(0, 0);
- layout->AddView(&v1);
- layout->AddView(&v2);
- layout->StartRow(0, 0);
- layout->AddView(&v3, 2, 1);
-
- GetPreferredSize();
- EXPECT_TRUE(gfx::Size(25, 30) == pref);
-
- host.SetBounds(0, 0, pref.width(), pref.height());
- layout->Layout(&host);
- ExpectViewBoundsEquals(0, 0, 10, 10, &v1);
- ExpectViewBoundsEquals(12, 0, 10, 10, &v2);
- ExpectViewBoundsEquals(0, 10, 25, 20, &v3);
-
- RemoveAll();
-}
-
-TEST_F(GridLayoutTest, SameSizeColumns) {
- SettableSizeView v1(gfx::Size(50, 20));
- SettableSizeView v2(gfx::Size(10, 10));
- ColumnSet* c1 = layout->AddColumnSet(0);
- c1->AddColumn(GridLayout::LEADING, GridLayout::LEADING,
- 0, GridLayout::USE_PREF, 0, 0);
- c1->AddColumn(GridLayout::LEADING, GridLayout::LEADING,
- 0, GridLayout::USE_PREF, 0, 0);
- c1->LinkColumnSizes(0, 1, -1);
- layout->StartRow(0, 0);
- layout->AddView(&v1);
- layout->AddView(&v2);
-
- gfx::Size pref = layout->GetPreferredSize(&host);
- EXPECT_TRUE(gfx::Size(100, 20) == pref);
-
- host.SetBounds(0, 0, pref.width(), pref.height());
- layout->Layout(&host);
- ExpectViewBoundsEquals(0, 0, 50, 20, &v1);
- ExpectViewBoundsEquals(50, 0, 10, 10, &v2);
-
- RemoveAll();
-}
-
-TEST_F(GridLayoutTest, HorizontalResizeTest1) {
- SettableSizeView v1(gfx::Size(50, 20));
- SettableSizeView v2(gfx::Size(10, 10));
- ColumnSet* c1 = layout->AddColumnSet(0);
- c1->AddColumn(GridLayout::FILL, GridLayout::LEADING,
- 1, GridLayout::USE_PREF, 0, 0);
- c1->AddColumn(GridLayout::LEADING, GridLayout::LEADING,
- 0, GridLayout::USE_PREF, 0, 0);
- layout->StartRow(0, 0);
- layout->AddView(&v1);
- layout->AddView(&v2);
-
- host.SetBounds(0, 0, 110, 20);
- layout->Layout(&host);
- ExpectViewBoundsEquals(0, 0, 100, 20, &v1);
- ExpectViewBoundsEquals(100, 0, 10, 10, &v2);
-
- RemoveAll();
-}
-
-TEST_F(GridLayoutTest, HorizontalResizeTest2) {
- SettableSizeView v1(gfx::Size(50, 20));
- SettableSizeView v2(gfx::Size(10, 10));
- ColumnSet* c1 = layout->AddColumnSet(0);
- c1->AddColumn(GridLayout::FILL, GridLayout::LEADING,
- 1, GridLayout::USE_PREF, 0, 0);
- c1->AddColumn(GridLayout::TRAILING, GridLayout::LEADING,
- 1, GridLayout::USE_PREF, 0, 0);
- layout->StartRow(0, 0);
- layout->AddView(&v1);
- layout->AddView(&v2);
-
- host.SetBounds(0, 0, 120, 20);
- layout->Layout(&host);
- ExpectViewBoundsEquals(0, 0, 80, 20, &v1);
- ExpectViewBoundsEquals(110, 0, 10, 10, &v2);
-
- RemoveAll();
-}
-
-TEST_F(GridLayoutTest, TestVerticalResize1) {
- SettableSizeView v1(gfx::Size(50, 20));
- SettableSizeView v2(gfx::Size(10, 10));
- ColumnSet* c1 = layout->AddColumnSet(0);
- c1->AddColumn(GridLayout::FILL, GridLayout::FILL,
- 1, GridLayout::USE_PREF, 0, 0);
- layout->StartRow(1, 0);
- layout->AddView(&v1);
- layout->StartRow(0, 0);
- layout->AddView(&v2);
-
- GetPreferredSize();
- EXPECT_TRUE(gfx::Size(50, 30) == pref);
-
- host.SetBounds(0, 0, 50, 100);
- layout->Layout(&host);
- ExpectViewBoundsEquals(0, 0, 50, 90, &v1);
- ExpectViewBoundsEquals(0, 90, 50, 10, &v2);
-
- RemoveAll();
-}
-
-TEST_F(GridLayoutTest, Insets) {
- SettableSizeView v1(gfx::Size(10, 20));
- ColumnSet* c1 = layout->AddColumnSet(0);
- layout->SetInsets(1, 2, 3, 4);
- c1->AddColumn(GridLayout::LEADING, GridLayout::LEADING,
- 0, GridLayout::USE_PREF, 0, 0);
- layout->StartRow(0, 0);
- layout->AddView(&v1);
-
- GetPreferredSize();
- EXPECT_TRUE(gfx::Size(16, 24) == pref);
-
- host.SetBounds(0, 0, pref.width(), pref.height());
- layout->Layout(&host);
- ExpectViewBoundsEquals(2, 1, 10, 20, &v1);
-
- RemoveAll();
-}
-
-TEST_F(GridLayoutTest, FixedSize) {
- layout->SetInsets(2, 2, 2, 2);
-
- views::ColumnSet* set = layout->AddColumnSet(0);
-
- int column_count = 4;
- int title_width = 100;
- int row_count = 2;
- int pref_width = 10;
- int pref_height = 20;
-
- for (int i = 0; i < column_count; ++i) {
- set->AddColumn(views::GridLayout::CENTER,
- views::GridLayout::CENTER,
- 0,
- views::GridLayout::FIXED,
- title_width,
- title_width);
- }
-
- for (int row = 0; row < row_count; ++row) {
- layout->StartRow(0, 0);
- for (int col = 0; col < column_count; ++col) {
- layout->AddView(new SettableSizeView(gfx::Size(pref_width, pref_height)));
- }
- }
-
- layout->Layout(&host);
-
- for (int i = 0; i < column_count; ++i) {
- for (int row = 0; row < row_count; ++row) {
- View* view = host.GetChildViewAt(row * column_count + i);
- ExpectViewBoundsEquals(
- 2 + title_width * i + (title_width - pref_width) / 2,
- 2 + pref_height * row,
- pref_width,
- pref_height, view);
- }
- }
-
- GetPreferredSize();
- EXPECT_TRUE(gfx::Size(column_count * title_width + 4,
- row_count * pref_height + 4) == pref);
-}
-
-TEST_F(GridLayoutTest, RowSpanWithPaddingRow) {
- views::ColumnSet* set = layout->AddColumnSet(0);
-
- set->AddColumn(views::GridLayout::CENTER,
- views::GridLayout::CENTER,
- 0,
- views::GridLayout::FIXED,
- 10,
- 10);
-
- layout->StartRow(0, 0);
- layout->AddView(new SettableSizeView(gfx::Size(10, 10)), 1, 2);
- layout->AddPaddingRow(0, 10);
-}
-
-TEST_F(GridLayoutTest, RowSpan) {
- views::ColumnSet* set = layout->AddColumnSet(0);
-
- set->AddColumn(views::GridLayout::LEADING,
- views::GridLayout::LEADING,
- 0,
- views::GridLayout::USE_PREF,
- 0,
- 0);
- set->AddColumn(views::GridLayout::LEADING,
- views::GridLayout::LEADING,
- 0,
- views::GridLayout::USE_PREF,
- 0,
- 0);
-
- layout->StartRow(0, 0);
- layout->AddView(new SettableSizeView(gfx::Size(20, 10)));
- layout->AddView(new SettableSizeView(gfx::Size(20, 40)), 1, 2);
- layout->StartRow(1, 0);
- views::View* s3 = new SettableSizeView(gfx::Size(20, 10));
- layout->AddView(s3);
-
- GetPreferredSize();
- EXPECT_TRUE(gfx::Size(40, 40) == pref);
-
- host.SetBounds(0, 0, pref.width(), pref.height());
- layout->Layout(&host);
- ExpectViewBoundsEquals(0, 10, 20, 10, s3);
-}
-
-TEST_F(GridLayoutTest, RowSpan2) {
- views::ColumnSet* set = layout->AddColumnSet(0);
-
- set->AddColumn(GridLayout::LEADING, GridLayout::LEADING,
- 0, GridLayout::USE_PREF, 0, 0);
- set->AddColumn(GridLayout::LEADING, GridLayout::LEADING,
- 0,GridLayout::USE_PREF, 0, 0);
-
- layout->StartRow(0, 0);
- layout->AddView(new SettableSizeView(gfx::Size(20, 20)));
- views::View* s3 = new SettableSizeView(gfx::Size(64, 64));
- layout->AddView(s3, 1, 3);
-
- layout->AddPaddingRow(0, 10);
-
- layout->StartRow(0, 0);
- layout->AddView(new SettableSizeView(gfx::Size(10, 20)));
-
- GetPreferredSize();
- EXPECT_TRUE(gfx::Size(84, 64) == pref);
-
- host.SetBounds(0, 0, pref.width(), pref.height());
- layout->Layout(&host);
- ExpectViewBoundsEquals(20, 0, 64, 64, s3);
-}
-
-TEST_F(GridLayoutTest, FixedViewWidth) {
- views::ColumnSet* set = layout->AddColumnSet(0);
-
- set->AddColumn(GridLayout::LEADING, GridLayout::LEADING,
- 0, GridLayout::USE_PREF, 0, 0);
- set->AddColumn(GridLayout::LEADING, GridLayout::LEADING,
- 0,GridLayout::USE_PREF, 0, 0);
-
- layout->StartRow(0, 0);
- View* view = new SettableSizeView(gfx::Size(30, 40));
- layout->AddView(view, 1, 1, GridLayout::LEADING, GridLayout::LEADING, 10, 0);
-
- GetPreferredSize();
- EXPECT_EQ(10, pref.width());
- EXPECT_EQ(40, pref.height());
-
- host.SetBounds(0, 0, pref.width(), pref.height());
- layout->Layout(&host);
- ExpectViewBoundsEquals(0, 0, 10, 40, view);
-}
-
-TEST_F(GridLayoutTest, FixedViewHeight) {
- views::ColumnSet* set = layout->AddColumnSet(0);
-
- set->AddColumn(GridLayout::LEADING, GridLayout::LEADING,
- 0, GridLayout::USE_PREF, 0, 0);
- set->AddColumn(GridLayout::LEADING, GridLayout::LEADING,
- 0,GridLayout::USE_PREF, 0, 0);
-
- layout->StartRow(0, 0);
- View* view = new SettableSizeView(gfx::Size(30, 40));
- layout->AddView(view, 1, 1, GridLayout::LEADING, GridLayout::LEADING, 0, 10);
-
- GetPreferredSize();
- EXPECT_EQ(30, pref.width());
- EXPECT_EQ(10, pref.height());
-
- host.SetBounds(0, 0, pref.width(), pref.height());
- layout->Layout(&host);
- ExpectViewBoundsEquals(0, 0, 30, 10, view);
-}
diff --git a/chrome/views/layout_manager.cc b/chrome/views/layout_manager.cc
deleted file mode 100644
index 35028432..0000000
--- a/chrome/views/layout_manager.cc
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/layout_manager.h"
-
-#include "chrome/views/view.h"
-
-namespace views {
-
-int LayoutManager::GetPreferredHeightForWidth(View* host, int width) {
- return GetPreferredSize(host).height();
-}
-
-} // namespace views
diff --git a/chrome/views/layout_manager.h b/chrome/views/layout_manager.h
deleted file mode 100644
index 5b8eaf1..0000000
--- a/chrome/views/layout_manager.h
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_LAYOUT_MANAGER_H_
-#define CHROME_VIEWS_LAYOUT_MANAGER_H_
-
-#include "chrome/views/view.h"
-
-namespace gfx {
-class Size;
-}
-
-namespace views {
-
-class View;
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// LayoutManager interface
-//
-// The LayoutManager interface provides methods to handle the sizing of
-// the children of a View according to implementation-specific heuristics.
-//
-/////////////////////////////////////////////////////////////////////////////
-class LayoutManager {
- public:
- virtual ~LayoutManager() {}
-
- // Notification that this LayoutManager has been installed on a particular
- // host.
- virtual void Installed(View* host) {}
-
- // Notification that this LayoutManager has been uninstalled on a particular
- // host.
- virtual void Uninstalled(View* host) {}
-
- // Lay out the children of |host| according to implementation-specific
- // heuristics. The graphics used during painting is provided to allow for
- // string sizing.
- virtual void Layout(View* host) = 0;
-
- // Return the preferred size which is the size required to give each
- // children their respective preferred size.
- virtual gfx::Size GetPreferredSize(View* host) = 0;
-
- // Returns the preferred height for the specified width. The default
- // implementation returns the value from GetPreferredSize.
- virtual int GetPreferredHeightForWidth(View* host, int width);
-
- // Notification that a view has been added.
- virtual void ViewAdded(View* host, View* view) {}
-
- // Notification that a view has been removed.
- virtual void ViewRemoved(View* host, View* view) {}
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_LAYOUT_MANAGER_H_
diff --git a/chrome/views/painter.cc b/chrome/views/painter.cc
deleted file mode 100644
index 464bba4..0000000
--- a/chrome/views/painter.cc
+++ /dev/null
@@ -1,165 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/painter.h"
-
-#include "app/gfx/chrome_canvas.h"
-#include "app/resource_bundle.h"
-#include "base/logging.h"
-#include "skia/include/SkBitmap.h"
-#include "skia/include/SkGradientShader.h"
-
-namespace views {
-
-namespace {
-
-class GradientPainter : public Painter {
- public:
- GradientPainter(bool horizontal, const SkColor& top, const SkColor& bottom)
- : horizontal_(horizontal) {
- colors_[0] = top;
- colors_[1] = bottom;
- }
-
- virtual ~GradientPainter() {
- }
-
- void Paint(int w, int h, ChromeCanvas* canvas) {
- SkPaint paint;
- SkPoint p[2];
- p[0].set(SkIntToScalar(0), SkIntToScalar(0));
- if (horizontal_)
- p[1].set(SkIntToScalar(w), SkIntToScalar(0));
- else
- p[1].set(SkIntToScalar(0), SkIntToScalar(h));
-
- SkShader* s =
- SkGradientShader::CreateLinear(p, colors_, NULL, 2,
- SkShader::kClamp_TileMode, NULL);
- paint.setStyle(SkPaint::kFill_Style);
- paint.setShader(s);
- // Need to unref shader, otherwise never deleted.
- s->unref();
-
- canvas->drawRectCoords(SkIntToScalar(0), SkIntToScalar(0),
- SkIntToScalar(w), SkIntToScalar(h), paint);
- }
-
- private:
- bool horizontal_;
- SkColor colors_[2];
-
- DISALLOW_EVIL_CONSTRUCTORS(GradientPainter);
-};
-
-
-}
-
-// static
-void Painter::PaintPainterAt(int x, int y, int w, int h,
- ChromeCanvas* canvas, Painter* painter) {
- DCHECK(canvas && painter);
- if (w < 0 || h < 0)
- return;
- canvas->save();
- canvas->TranslateInt(x, y);
- painter->Paint(w, h, canvas);
- canvas->restore();
-}
-
-ImagePainter::ImagePainter(const int image_resource_names[],
- bool draw_center)
- : draw_center_(draw_center) {
- DCHECK(image_resource_names);
- ResourceBundle& rb = ResourceBundle::GetSharedInstance();
- for (int i = 0, max = draw_center ? 9 : 8; i < max; ++i)
- images_.push_back(rb.GetBitmapNamed(image_resource_names[i]));
-}
-
-void ImagePainter::Paint(int w, int h, ChromeCanvas* canvas) {
- canvas->DrawBitmapInt(*images_[BORDER_TOP_LEFT], 0, 0);
- canvas->TileImageInt(*images_[BORDER_TOP],
- images_[BORDER_TOP_LEFT]->width(),
- 0,
- w - images_[BORDER_TOP_LEFT]->width() -
- images_[BORDER_TOP_RIGHT]->width(),
- images_[BORDER_TOP_LEFT]->height());
- canvas->DrawBitmapInt(*images_[BORDER_TOP_RIGHT],
- w - images_[BORDER_TOP_RIGHT]->width(),
- 0);
- canvas->TileImageInt(*images_[BORDER_RIGHT],
- w - images_[BORDER_RIGHT]->width(),
- images_[BORDER_TOP_RIGHT]->height(),
- images_[BORDER_RIGHT]->width(),
- h - images_[BORDER_TOP_RIGHT]->height() -
- images_[BORDER_BOTTOM_RIGHT]->height());
- canvas->DrawBitmapInt(*images_[BORDER_BOTTOM_RIGHT],
- w - images_[BORDER_BOTTOM_RIGHT]->width(),
- h - images_[BORDER_BOTTOM_RIGHT]->height());
- canvas->TileImageInt(*images_[BORDER_BOTTOM],
- images_[BORDER_BOTTOM_LEFT]->width(),
- h - images_[BORDER_BOTTOM]->height(),
- w - images_[BORDER_BOTTOM_LEFT]->width() -
- images_[BORDER_BOTTOM_RIGHT]->width(),
- images_[BORDER_BOTTOM]->height());
- canvas->DrawBitmapInt(*images_[BORDER_BOTTOM_LEFT],
- 0,
- h - images_[BORDER_BOTTOM_LEFT]->height());
- canvas->TileImageInt(*images_[BORDER_LEFT],
- 0,
- images_[BORDER_TOP_LEFT]->height(),
- images_[BORDER_LEFT]->width(),
- h - images_[BORDER_TOP_LEFT]->height() -
- images_[BORDER_BOTTOM_LEFT]->height());
- if (draw_center_) {
- canvas->DrawBitmapInt(*images_[BORDER_CENTER],
- 0,
- 0,
- images_[BORDER_CENTER]->width(),
- images_[BORDER_CENTER]->height(),
- images_[BORDER_TOP_LEFT]->width(),
- images_[BORDER_TOP_LEFT]->height(),
- w - images_[BORDER_TOP_LEFT]->width() -
- images_[BORDER_TOP_RIGHT]->width(),
- h - images_[BORDER_TOP_LEFT]->height() -
- images_[BORDER_TOP_RIGHT]->height(),
- false);
- }
-}
-
-// static
-Painter* Painter::CreateHorizontalGradient(SkColor c1, SkColor c2) {
- return new GradientPainter(true, c1, c2);
-}
-
-// static
-Painter* Painter::CreateVerticalGradient(SkColor c1, SkColor c2) {
- return new GradientPainter(false, c1, c2);
-}
-
-HorizontalPainter::HorizontalPainter(const int image_resource_names[]) {
- ResourceBundle& rb = ResourceBundle::GetSharedInstance();
- for (int i = 0; i < 3; ++i)
- images_[i] = rb.GetBitmapNamed(image_resource_names[i]);
- height_ = images_[LEFT]->height();
- DCHECK(images_[LEFT]->height() == images_[RIGHT]->height() &&
- images_[LEFT]->height() == images_[CENTER]->height());
-}
-
-void HorizontalPainter::Paint(int w, int h, ChromeCanvas* canvas) {
- if (w < (images_[LEFT]->width() + images_[CENTER]->width() +
- images_[RIGHT]->width())) {
- // No room to paint.
- return;
- }
- canvas->DrawBitmapInt(*images_[LEFT], 0, 0);
- canvas->DrawBitmapInt(*images_[RIGHT], w - images_[RIGHT]->width(), 0);
- canvas->TileImageInt(*images_[CENTER],
- images_[LEFT]->width(),
- 0,
- w - images_[LEFT]->width() - images_[RIGHT]->width(),
- height_);
-}
-
-} // namespace views
diff --git a/chrome/views/painter.h b/chrome/views/painter.h
deleted file mode 100644
index 37edd64..0000000
--- a/chrome/views/painter.h
+++ /dev/null
@@ -1,120 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_PAINTER_H_
-#define CHROME_VIEWS_PAINTER_H_
-
-#include <vector>
-
-#include "base/basictypes.h"
-#include "skia/include/SkColor.h"
-
-class ChromeCanvas;
-class SkBitmap;
-
-namespace views {
-
-// Painter, as the name implies, is responsible for painting in a particular
-// region. Think of Painter as a Border or Background that can be painted
-// in any region of a View.
-class Painter {
- public:
- // A convenience method for painting a Painter in a particular region.
- // This translates the canvas to x/y and paints the painter.
- static void PaintPainterAt(int x, int y, int w, int h,
- ChromeCanvas* canvas, Painter* painter);
-
- // Creates a painter that draws a gradient between the two colors.
- static Painter* CreateHorizontalGradient(SkColor c1, SkColor c2);
- static Painter* CreateVerticalGradient(SkColor c1, SkColor c2);
-
- virtual ~Painter() {}
-
- // Paints the painter in the specified region.
- virtual void Paint(int w, int h, ChromeCanvas* canvas) = 0;
-};
-
-// ImagePainter paints 8 (or 9) images into a box. The four corner
-// images are drawn at the size of the image, the top/left/bottom/right
-// images are tiled to fit the area, and the center (if rendered) is
-// stretched.
-class ImagePainter : public Painter {
- public:
- enum BorderElements {
- BORDER_TOP_LEFT = 0,
- BORDER_TOP,
- BORDER_TOP_RIGHT,
- BORDER_RIGHT,
- BORDER_BOTTOM_RIGHT,
- BORDER_BOTTOM,
- BORDER_BOTTOM_LEFT,
- BORDER_LEFT,
- BORDER_CENTER
- };
-
- // Constructs a new ImagePainter loading the specified image names.
- // The images must be in the order defined by the BorderElements.
- // If draw_center is false, there must be 8 image names, if draw_center
- // is true, there must be 9 image names with the last giving the name
- // of the center image.
- ImagePainter(const int image_resource_names[],
- bool draw_center);
-
- virtual ~ImagePainter() {}
-
- // Paints the images.
- virtual void Paint(int w, int h, ChromeCanvas* canvas);
-
- // Returns the specified image. The returned image should NOT be deleted.
- SkBitmap* GetImage(BorderElements element) {
- return images_[element];
- }
-
- private:
- bool tile_;
- bool draw_center_;
- bool tile_center_;
- // NOTE: the images are owned by ResourceBundle. Don't free them.
- std::vector<SkBitmap*> images_;
-
- DISALLOW_EVIL_CONSTRUCTORS(ImagePainter);
-};
-
-// HorizontalPainter paints 3 images into a box: left, center and right. The
-// left and right images are drawn to size at the left/right edges of the
-// region. The center is tiled in the remaining space. All images must have the
-// same height.
-class HorizontalPainter : public Painter {
- public:
- // Constructs a new HorizontalPainter loading the specified image names.
- // The images must be in the order left, right and center.
- explicit HorizontalPainter(const int image_resource_names[]);
-
- virtual ~HorizontalPainter() {}
-
- // Paints the images.
- virtual void Paint(int w, int h, ChromeCanvas* canvas);
-
- // Height of the images.
- int height() const { return height_; }
-
- private:
- // The image chunks.
- enum BorderElements {
- LEFT,
- CENTER,
- RIGHT
- };
-
- // The height.
- int height_;
- // NOTE: the images are owned by ResourceBundle. Don't free them.
- SkBitmap* images_[3];
-
- DISALLOW_EVIL_CONSTRUCTORS(HorizontalPainter);
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_PAINTER_H_
diff --git a/chrome/views/repeat_controller.cc b/chrome/views/repeat_controller.cc
deleted file mode 100644
index 2d52783..0000000
--- a/chrome/views/repeat_controller.cc
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/repeat_controller.h"
-
-using base::TimeDelta;
-
-namespace views {
-
-// The delay before the first and then subsequent repeats. Values taken from
-// XUL code: http://mxr.mozilla.org/seamonkey/source/layout/xul/base/src/nsRepeatService.cpp#52
-static const int kInitialRepeatDelay = 250;
-static const int kRepeatDelay = 50;
-
-///////////////////////////////////////////////////////////////////////////////
-// RepeatController, public:
-
-RepeatController::RepeatController(RepeatCallback* callback)
- : callback_(callback) {
-}
-
-RepeatController::~RepeatController() {
-}
-
-void RepeatController::Start() {
- // The first timer is slightly longer than subsequent repeats.
- timer_.Start(TimeDelta::FromMilliseconds(kInitialRepeatDelay), this,
- &RepeatController::Run);
-}
-
-void RepeatController::Stop() {
- timer_.Stop();
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// RepeatController, private:
-
-void RepeatController::Run() {
- timer_.Start(TimeDelta::FromMilliseconds(kRepeatDelay), this,
- &RepeatController::Run);
- callback_->Run();
-}
-
-} // namespace views
diff --git a/chrome/views/repeat_controller.h b/chrome/views/repeat_controller.h
deleted file mode 100644
index b7712d0..0000000
--- a/chrome/views/repeat_controller.h
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_REPEAT_CONTROLLER_H_
-#define CHROME_VIEWS_REPEAT_CONTROLLER_H_
-
-#include "base/scoped_ptr.h"
-#include "base/timer.h"
-
-namespace views {
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// RepeatController
-//
-// An object that handles auto-repeating UI actions. There is a longer initial
-// delay after which point repeats become constant. Users provide a callback
-// that is notified when each repeat occurs so that they can perform the
-// associated action.
-//
-///////////////////////////////////////////////////////////////////////////////
-class RepeatController {
- public:
- typedef Callback0::Type RepeatCallback;
-
- // The RepeatController takes ownership of this callback object.
- explicit RepeatController(RepeatCallback* callback);
- virtual ~RepeatController();
-
- // Start repeating.
- void Start();
-
- // Stop repeating.
- void Stop();
-
- private:
- RepeatController();
-
- // Called when the timer expires.
- void Run();
-
- // The current timer.
- base::OneShotTimer<RepeatController> timer_;
-
- scoped_ptr<RepeatCallback> callback_;
-
- DISALLOW_COPY_AND_ASSIGN(RepeatController);
-};
-
-} // namespace views
-
-#endif // #ifndef CHROME_VIEWS_REPEAT_CONTROLLER_H_
diff --git a/chrome/views/view.cc b/chrome/views/view.cc
deleted file mode 100644
index 8c2a888..0000000
--- a/chrome/views/view.cc
+++ /dev/null
@@ -1,1643 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/view.h"
-
-#include <algorithm>
-#ifndef NDEBUG
-#include <iostream>
-#endif
-
-#include "app/drag_drop_types.h"
-#include "app/gfx/chrome_canvas.h"
-#include "app/l10n_util.h"
-#include "base/logging.h"
-#include "base/message_loop.h"
-#include "base/scoped_handle.h"
-#include "base/string_util.h"
-#include "chrome/views/background.h"
-#include "chrome/views/layout_manager.h"
-#include "chrome/views/widget/root_view.h"
-#include "chrome/views/widget/widget.h"
-#include "chrome/views/window/window.h"
-#if defined(OS_WIN)
-#include "chrome/views/widget/tooltip_manager.h"
-#include "chrome/views/accessibility/view_accessibility_wrapper.h"
-#endif
-#include "SkShader.h"
-
-namespace views {
-
-// static
-char View::kViewClassName[] = "chrome/views/View";
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// A task used to automatically restore focus on the last focused floating view
-//
-////////////////////////////////////////////////////////////////////////////////
-
-class RestoreFocusTask : public Task {
- public:
- explicit RestoreFocusTask(View* target) : view_(target) {
- }
-
- ~RestoreFocusTask() {}
-
- void Cancel() {
- view_ = NULL;
- }
-
- void Run() {
- if (view_)
- view_->RestoreFloatingViewFocus();
- }
- private:
- // The target view.
- View* view_;
-
- DISALLOW_COPY_AND_ASSIGN(RestoreFocusTask);
-};
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// View - constructors, destructors, initialization
-//
-/////////////////////////////////////////////////////////////////////////////
-
-View::View()
- : id_(0),
- group_(-1),
- enabled_(true),
- focusable_(false),
- bounds_(0, 0, 0, 0),
- parent_(NULL),
- should_restore_focus_(false),
- is_visible_(true),
- is_parent_owned_(true),
- notify_when_visible_bounds_in_root_changes_(false),
- registered_for_visible_bounds_notification_(false),
- next_focusable_view_(NULL),
- previous_focusable_view_(NULL),
- restore_focus_view_task_(NULL),
- context_menu_controller_(NULL),
-#if defined(OS_WIN)
- accessibility_(NULL),
-#endif
- drag_controller_(NULL),
- ui_mirroring_is_enabled_for_rtl_languages_(true),
- flip_canvas_on_paint_for_rtl_ui_(false) {
-}
-
-View::~View() {
- if (restore_focus_view_task_)
- restore_focus_view_task_->Cancel();
-
- int c = static_cast<int>(child_views_.size());
- while (--c >= 0) {
- if (child_views_[c]->IsParentOwned())
- delete child_views_[c];
- else
- child_views_[c]->SetParent(NULL);
- }
-}
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// View - sizing
-//
-/////////////////////////////////////////////////////////////////////////////
-
-gfx::Rect View::GetBounds(PositionMirroringSettings settings) const {
- gfx::Rect bounds(bounds_);
-
- // If the parent uses an RTL UI layout and if we are asked to transform the
- // bounds to their mirrored position if necessary, then we should shift the
- // rectangle appropriately.
- if (settings == APPLY_MIRRORING_TRANSFORMATION)
- bounds.set_x(MirroredX());
-
- return bounds;
-}
-
-// y(), width() and height() are agnostic to the RTL UI layout of the
-// parent view. x(), on the other hand, is not.
-int View::GetX(PositionMirroringSettings settings) const {
- return settings == IGNORE_MIRRORING_TRANSFORMATION ? x() : MirroredX();
-}
-
-void View::SetBounds(const gfx::Rect& bounds) {
- if (bounds == bounds_)
- return;
-
- gfx::Rect prev = bounds_;
- bounds_ = bounds;
- DidChangeBounds(prev, bounds_);
-
- RootView* root = GetRootView();
- if (root) {
- bool size_changed = prev.size() != bounds_.size();
- bool position_changed = prev.origin() != bounds_.origin();
- if (size_changed || position_changed)
- root->ViewBoundsChanged(this, size_changed, position_changed);
- }
-}
-
-gfx::Rect View::GetLocalBounds(bool include_border) const {
- if (include_border || !border_.get())
- return gfx::Rect(0, 0, width(), height());
-
- gfx::Insets insets;
- border_->GetInsets(&insets);
- return gfx::Rect(insets.left(), insets.top(),
- std::max(0, width() - insets.width()),
- std::max(0, height() - insets.height()));
-}
-
-gfx::Point View::GetPosition() const {
- return gfx::Point(GetX(APPLY_MIRRORING_TRANSFORMATION), y());
-}
-
-gfx::Size View::GetPreferredSize() {
- if (layout_manager_.get())
- return layout_manager_->GetPreferredSize(this);
- return gfx::Size();
-}
-
-void View::SizeToPreferredSize() {
- gfx::Size prefsize = GetPreferredSize();
- if ((prefsize.width() != width()) || (prefsize.height() != height()))
- SetBounds(x(), y(), prefsize.width(), prefsize.height());
-}
-
-gfx::Size View::GetMinimumSize() {
- return GetPreferredSize();
-}
-
-int View::GetHeightForWidth(int w) {
- if (layout_manager_.get())
- return layout_manager_->GetPreferredHeightForWidth(this, w);
- return GetPreferredSize().height();
-}
-
-void View::DidChangeBounds(const gfx::Rect& previous,
- const gfx::Rect& current) {
- Layout();
-}
-
-void View::ScrollRectToVisible(int x, int y, int width, int height) {
- View* parent = GetParent();
-
- // We must take RTL UI mirroring into account when adjusting the position of
- // the region.
- if (parent)
- parent->ScrollRectToVisible(
- GetX(APPLY_MIRRORING_TRANSFORMATION) + x, View::y() + y, width, height);
-}
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// View - layout
-//
-/////////////////////////////////////////////////////////////////////////////
-
-void View::Layout() {
- // Layout child Views
- if (layout_manager_.get()) {
- layout_manager_->Layout(this);
- SchedulePaint();
- // TODO(beng): We believe the right thing to do here is return since the
- // layout manager should be handling things, but it causes
- // regressions (missing options from Options dialog and a hang
- // in interactive_ui_tests).
- }
-
- // Lay out contents of child Views
- int child_count = GetChildViewCount();
- for (int i = 0; i < child_count; ++i) {
- View* child = GetChildViewAt(i);
- child->Layout();
- }
-}
-
-LayoutManager* View::GetLayoutManager() const {
- return layout_manager_.get();
-}
-
-void View::SetLayoutManager(LayoutManager* layout_manager) {
- if (layout_manager_.get()) {
- layout_manager_->Uninstalled(this);
- }
- layout_manager_.reset(layout_manager);
- if (layout_manager_.get()) {
- layout_manager_->Installed(this);
- }
-}
-
-bool View::UILayoutIsRightToLeft() const {
- return (ui_mirroring_is_enabled_for_rtl_languages_ &&
- l10n_util::GetTextDirection() == l10n_util::RIGHT_TO_LEFT);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// View - Right-to-left UI layout
-//
-////////////////////////////////////////////////////////////////////////////////
-
-inline int View::MirroredX() const {
- // TODO(beng): reimplement in terms of MirroredLeftPointForRect.
- View* parent = GetParent();
- if (parent && parent->UILayoutIsRightToLeft())
- return parent->width() - x() - width();
- return x();
-}
-
-int View::MirroredLeftPointForRect(const gfx::Rect& bounds) const {
- if (!UILayoutIsRightToLeft()) {
- return bounds.x();
- }
- return width() - bounds.x() - bounds.width();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// View - states
-//
-////////////////////////////////////////////////////////////////////////////////
-
-bool View::IsEnabled() const {
- return enabled_;
-}
-
-void View::SetEnabled(bool state) {
- if (enabled_ != state) {
- enabled_ = state;
- SchedulePaint();
- }
-}
-
-bool View::IsFocusable() const {
- return focusable_ && enabled_ && is_visible_;
-}
-
-void View::SetFocusable(bool focusable) {
- focusable_ = focusable;
-}
-
-bool View::HasFocus() {
- FocusManager* focus_manager = GetFocusManager();
- if (focus_manager)
- return focus_manager->GetFocusedView() == this;
- return false;
-}
-
-void View::SetHotTracked(bool flag) {
-}
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// View - painting
-//
-/////////////////////////////////////////////////////////////////////////////
-
-void View::SchedulePaint(const gfx::Rect& r, bool urgent) {
- if (!IsVisible())
- return;
-
- if (parent_) {
- // Translate the requested paint rect to the parent's coordinate system
- // then pass this notification up to the parent.
- gfx::Rect paint_rect = r;
- paint_rect.Offset(GetPosition());
- parent_->SchedulePaint(paint_rect, urgent);
- }
-}
-
-void View::SchedulePaint() {
- SchedulePaint(GetLocalBounds(true), false);
-}
-
-void View::SchedulePaint(int x, int y, int w, int h) {
- SchedulePaint(gfx::Rect(x, y, w, h), false);
-}
-
-void View::Paint(ChromeCanvas* canvas) {
- PaintBackground(canvas);
- PaintFocusBorder(canvas);
- PaintBorder(canvas);
-}
-
-void View::PaintBackground(ChromeCanvas* canvas) {
- if (background_.get())
- background_->Paint(canvas, this);
-}
-
-void View::PaintBorder(ChromeCanvas* canvas) {
- if (border_.get())
- border_->Paint(*this, canvas);
-}
-
-void View::PaintFocusBorder(ChromeCanvas* canvas) {
- if (HasFocus() && IsFocusable())
- canvas->DrawFocusRect(0, 0, width(), height());
-}
-
-void View::PaintChildren(ChromeCanvas* canvas) {
- int i, c;
- for (i = 0, c = GetChildViewCount(); i < c; ++i) {
- View* child = GetChildViewAt(i);
- if (!child) {
- NOTREACHED() << "Should not have a NULL child View for index in bounds";
- continue;
- }
- child->ProcessPaint(canvas);
- }
-}
-
-void View::ProcessPaint(ChromeCanvas* canvas) {
- if (!IsVisible()) {
- return;
- }
-
- // We're going to modify the canvas, save it's state first.
- canvas->save();
-
- // Paint this View and its children, setting the clip rect to the bounds
- // of this View and translating the origin to the local bounds' top left
- // point.
- //
- // Note that the X (or left) position we pass to ClipRectInt takes into
- // consideration whether or not the view uses a right-to-left layout so that
- // we paint our view in its mirrored position if need be.
- if (canvas->ClipRectInt(MirroredX(), y(), width(), height())) {
- // Non-empty clip, translate the graphics such that 0,0 corresponds to
- // where this view is located (related to its parent).
- canvas->TranslateInt(MirroredX(), y());
-
- // Save the state again, so that any changes don't effect PaintChildren.
- canvas->save();
-
- // If the View we are about to paint requested the canvas to be flipped, we
- // should change the transform appropriately.
- bool flip_canvas = FlipCanvasOnPaintForRTLUI();
- if (flip_canvas) {
- canvas->TranslateInt(width(), 0);
- canvas->ScaleInt(-1, 1);
- canvas->save();
- }
-
- Paint(canvas);
-
- // We must undo the canvas mirroring once the View is done painting so that
- // we don't pass the canvas with the mirrored transform to Views that
- // didn't request the canvas to be flipped.
- if (flip_canvas) {
- canvas->restore();
- }
- canvas->restore();
- PaintChildren(canvas);
- }
-
- // Restore the canvas's original transform.
- canvas->restore();
-}
-
-void View::PaintNow() {
- if (!IsVisible()) {
- return;
- }
-
- View* view = GetParent();
- if (view)
- view->PaintNow();
-}
-
-void View::PaintFloatingView(ChromeCanvas* canvas, View* view,
- int x, int y, int w, int h) {
- if (should_restore_focus_ && ShouldRestoreFloatingViewFocus()) {
- // We are painting again a floating view, this is a good time to restore the
- // focus to the last focused floating view if any.
- should_restore_focus_ = false;
- restore_focus_view_task_ = new RestoreFocusTask(this);
- MessageLoop::current()->PostTask(FROM_HERE, restore_focus_view_task_);
- }
- View* saved_parent = view->GetParent();
- view->SetParent(this);
- view->SetBounds(x, y, w, h);
- view->Layout();
- view->ProcessPaint(canvas);
- view->SetParent(saved_parent);
-}
-
-gfx::Insets View::GetInsets() const {
- gfx::Insets insets;
- if (border_.get())
- border_->GetInsets(&insets);
- return insets;
-}
-
-void View::SetContextMenuController(ContextMenuController* menu_controller) {
- context_menu_controller_ = menu_controller;
-}
-
-void View::ShowContextMenu(int x, int y, bool is_mouse_gesture) {
- if (!context_menu_controller_)
- return;
-
- context_menu_controller_->ShowContextMenu(this, x, y, is_mouse_gesture);
-}
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// View - tree
-//
-/////////////////////////////////////////////////////////////////////////////
-
-bool View::ProcessMousePressed(const MouseEvent& e, DragInfo* drag_info) {
- const bool enabled = enabled_;
- int drag_operations;
- if (enabled && e.IsOnlyLeftMouseButton() && HitTest(e.location()))
- drag_operations = GetDragOperations(e.x(), e.y());
- else
- drag_operations = 0;
- ContextMenuController* context_menu_controller =
- e.IsRightMouseButton() ? context_menu_controller_ : 0;
-
- const bool result = OnMousePressed(e);
- // WARNING: we may have been deleted, don't use any View variables;
-
- if (!enabled)
- return result;
-
- if (drag_operations != DragDropTypes::DRAG_NONE) {
- drag_info->PossibleDrag(e.x(), e.y());
- return true;
- }
- return !!context_menu_controller || result;
-}
-
-bool View::ProcessMouseDragged(const MouseEvent& e, DragInfo* drag_info) {
- // Copy the field, that way if we're deleted after drag and drop no harm is
- // done.
- ContextMenuController* context_menu_controller = context_menu_controller_;
- const bool possible_drag = drag_info->possible_drag;
- if (possible_drag && ExceededDragThreshold(drag_info->start_x - e.x(),
- drag_info->start_y - e.y())) {
- DoDrag(e, drag_info->start_x, drag_info->start_y);
- } else {
- if (OnMouseDragged(e))
- return true;
- // Fall through to return value based on context menu controller.
- }
- // WARNING: we may have been deleted.
- return (context_menu_controller != NULL) || possible_drag;
-}
-
-void View::ProcessMouseReleased(const MouseEvent& e, bool canceled) {
- if (!canceled && context_menu_controller_ && e.IsOnlyRightMouseButton()) {
- // Assume that if there is a context menu controller we won't be deleted
- // from mouse released.
- gfx::Point location(e.location());
- OnMouseReleased(e, canceled);
- if (HitTest(location)) {
- ConvertPointToScreen(this, &location);
- ShowContextMenu(location.x(), location.y(), true);
- }
- } else {
- OnMouseReleased(e, canceled);
- }
- // WARNING: we may have been deleted.
-}
-
-void View::AddChildView(View* v) {
- AddChildView(static_cast<int>(child_views_.size()), v, false);
-}
-
-void View::AddChildView(int index, View* v) {
- AddChildView(index, v, false);
-}
-
-void View::AddChildView(int index, View* v, bool floating_view) {
- // Remove the view from its current parent if any.
- if (v->GetParent())
- v->GetParent()->RemoveChildView(v);
-
- if (!floating_view) {
- // Sets the prev/next focus views.
- InitFocusSiblings(v, index);
- }
-
- // Let's insert the view.
- child_views_.insert(child_views_.begin() + index, v);
- v->SetParent(this);
-
- for (View* p = this; p; p = p->GetParent()) {
- p->ViewHierarchyChangedImpl(false, true, this, v);
- }
- v->PropagateAddNotifications(this, v);
- UpdateTooltip();
- RootView* root = GetRootView();
- if (root)
- RegisterChildrenForVisibleBoundsNotification(root, v);
-
- if (layout_manager_.get())
- layout_manager_->ViewAdded(this, v);
-}
-
-View* View::GetChildViewAt(int index) const {
- return index < GetChildViewCount() ? child_views_[index] : NULL;
-}
-
-int View::GetChildViewCount() const {
- return static_cast<int>(child_views_.size());
-}
-
-void View::RemoveChildView(View* a_view) {
- DoRemoveChildView(a_view, true, true, false);
-}
-
-void View::RemoveAllChildViews(bool delete_views) {
- ViewList::iterator iter;
- while ((iter = child_views_.begin()) != child_views_.end()) {
- DoRemoveChildView(*iter, false, false, delete_views);
- }
- UpdateTooltip();
-}
-
-void View::DoRemoveChildView(View* a_view,
- bool update_focus_cycle,
- bool update_tool_tip,
- bool delete_removed_view) {
-#ifndef NDEBUG
- DCHECK(!IsProcessingPaint()) << "Should not be removing a child view " <<
- "during a paint, this will seriously " <<
- "mess things up!";
-#endif
- DCHECK(a_view);
- const ViewList::iterator i = find(child_views_.begin(),
- child_views_.end(),
- a_view);
- if (i != child_views_.end()) {
- if (update_focus_cycle && !a_view->IsFloatingView()) {
- // Let's remove the view from the focus traversal.
- View* next_focusable = a_view->next_focusable_view_;
- View* prev_focusable = a_view->previous_focusable_view_;
- if (prev_focusable)
- prev_focusable->next_focusable_view_ = next_focusable;
- if (next_focusable)
- next_focusable->previous_focusable_view_ = prev_focusable;
- }
-
- RootView* root = GetRootView();
- if (root)
- UnregisterChildrenForVisibleBoundsNotification(root, a_view);
- a_view->PropagateRemoveNotifications(this);
- a_view->SetParent(NULL);
-
- if (delete_removed_view && a_view->IsParentOwned())
- delete a_view;
-
- child_views_.erase(i);
- }
-
- if (update_tool_tip)
- UpdateTooltip();
-
- if (layout_manager_.get())
- layout_manager_->ViewRemoved(this, a_view);
-}
-
-void View::PropagateRemoveNotifications(View* parent) {
- int i, c;
- for (i = 0, c = GetChildViewCount(); i < c; ++i) {
- GetChildViewAt(i)->PropagateRemoveNotifications(parent);
- }
-
- View *t;
- for (t = this; t; t = t->GetParent()) {
- t->ViewHierarchyChangedImpl(true, false, parent, this);
- }
-}
-
-void View::PropagateAddNotifications(View* parent, View* child) {
- int i, c;
- for (i = 0, c = GetChildViewCount(); i < c; ++i) {
- GetChildViewAt(i)->PropagateAddNotifications(parent, child);
- }
- ViewHierarchyChangedImpl(true, true, parent, child);
-}
-
-void View::ThemeChanged() {
- int c = GetChildViewCount();
- for (int i = c - 1; i >= 0; --i)
- GetChildViewAt(i)->ThemeChanged();
-}
-
-#ifndef NDEBUG
-bool View::IsProcessingPaint() const {
- return GetParent() && GetParent()->IsProcessingPaint();
-}
-#endif
-
-gfx::Point View::GetKeyboardContextMenuLocation() {
- gfx::Rect vis_bounds = GetVisibleBounds();
- gfx::Point screen_point(vis_bounds.x() + vis_bounds.width() / 2,
- vis_bounds.y() + vis_bounds.height() / 2);
- ConvertPointToScreen(this, &screen_point);
- return screen_point;
-}
-
-bool View::HasHitTestMask() const {
- return false;
-}
-
-void View::GetHitTestMask(gfx::Path* mask) const {
- DCHECK(mask);
-}
-
-void View::ViewHierarchyChanged(bool is_add,
- View* parent,
- View* child) {
-}
-
-void View::ViewHierarchyChangedImpl(bool register_accelerators,
- bool is_add,
- View* parent,
- View* child) {
- if (register_accelerators) {
- if (is_add) {
- // If you get this registration, you are part of a subtree that has been
- // added to the view hierarchy.
- RegisterAccelerators();
- } else {
- if (child == this)
- UnregisterAccelerators();
- }
- }
-
- ViewHierarchyChanged(is_add, parent, child);
-}
-
-void View::PropagateVisibilityNotifications(View* start, bool is_visible) {
- int i, c;
- for (i = 0, c = GetChildViewCount(); i < c; ++i) {
- GetChildViewAt(i)->PropagateVisibilityNotifications(start, is_visible);
- }
- VisibilityChanged(start, is_visible);
-}
-
-void View::VisibilityChanged(View* starting_from, bool is_visible) {
-}
-
-View* View::GetViewForPoint(const gfx::Point& point) {
- return GetViewForPoint(point, true);
-}
-
-void View::SetNotifyWhenVisibleBoundsInRootChanges(bool value) {
- if (notify_when_visible_bounds_in_root_changes_ == value)
- return;
- notify_when_visible_bounds_in_root_changes_ = value;
- RootView* root = GetRootView();
- if (root) {
- if (value)
- root->RegisterViewForVisibleBoundsNotification(this);
- else
- root->UnregisterViewForVisibleBoundsNotification(this);
- }
-}
-
-bool View::GetNotifyWhenVisibleBoundsInRootChanges() {
- return notify_when_visible_bounds_in_root_changes_;
-}
-
-View* View::GetViewForPoint(const gfx::Point& point,
- bool can_create_floating) {
- // Walk the child Views recursively looking for the View that most
- // tightly encloses the specified point.
- for (int i = GetChildViewCount() - 1 ; i >= 0 ; --i) {
- View* child = GetChildViewAt(i);
- if (!child->IsVisible())
- continue;
-
- gfx::Point point_in_child_coords(point);
- View::ConvertPointToView(this, child, &point_in_child_coords);
- if (child->HitTest(point_in_child_coords))
- return child->GetViewForPoint(point_in_child_coords, true);
- }
-
- // We haven't found a view for the point. Try to create floating views
- // and try again if one was created.
- // can_create_floating makes sure we don't try forever even if
- // GetFloatingViewIDForPoint lies or if RetrieveFloatingViewForID creates a
- // view which doesn't contain the provided point
- int id;
- if (can_create_floating &&
- GetFloatingViewIDForPoint(point.x(), point.y(), &id)) {
- RetrieveFloatingViewForID(id); // This creates the floating view.
- return GetViewForPoint(point, false);
- }
- return this;
-}
-
-Widget* View::GetWidget() const {
- // The root view holds a reference to this view hierarchy's Widget.
- return parent_ ? parent_->GetWidget() : NULL;
-}
-
-Window* View::GetWindow() const {
- Widget* widget = GetWidget();
- return widget ? widget->GetWindow() : NULL;
-}
-
-// Get the containing RootView
-RootView* View::GetRootView() {
- Widget* widget = GetWidget();
- return widget ? widget->GetRootView() : NULL;
-}
-
-View* View::GetViewByID(int id) const {
- if (id == id_)
- return const_cast<View*>(this);
-
- int view_count = GetChildViewCount();
- for (int i = 0; i < view_count; ++i) {
- View* child = GetChildViewAt(i);
- View* view = child->GetViewByID(id);
- if (view)
- return view;
- }
- return NULL;
-}
-
-void View::GetViewsWithGroup(int group_id, std::vector<View*>* out) {
- if (group_ == group_id)
- out->push_back(this);
-
- int view_count = GetChildViewCount();
- for (int i = 0; i < view_count; ++i)
- GetChildViewAt(i)->GetViewsWithGroup(group_id, out);
-}
-
-View* View::GetSelectedViewForGroup(int group_id) {
- std::vector<View*> views;
- GetRootView()->GetViewsWithGroup(group_id, &views);
- if (views.size() > 0)
- return views[0];
- else
- return NULL;
-}
-
-void View::SetID(int id) {
- id_ = id;
-}
-
-int View::GetID() const {
- return id_;
-}
-
-void View::SetGroup(int gid) {
- group_ = gid;
-}
-
-int View::GetGroup() const {
- return group_;
-}
-
-void View::SetParent(View* parent) {
- if (parent != parent_) {
- parent_ = parent;
- }
-}
-
-bool View::IsParentOf(View* v) const {
- DCHECK(v);
- View* parent = v->GetParent();
- while (parent) {
- if (this == parent)
- return true;
- parent = parent->GetParent();
- }
- return false;
-}
-
-int View::GetChildIndex(View* v) const {
- for (int i = 0; i < GetChildViewCount(); i++) {
- if (v == GetChildViewAt(i))
- return i;
- }
- return -1;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// View - focus
-//
-///////////////////////////////////////////////////////////////////////////////
-
-View* View::GetNextFocusableView() {
- return next_focusable_view_;
-}
-
-View* View::GetPreviousFocusableView() {
- return previous_focusable_view_;
-}
-
-void View::SetNextFocusableView(View* view) {
- view->previous_focusable_view_ = this;
- next_focusable_view_ = view;
-}
-
-void View::InitFocusSiblings(View* v, int index) {
- int child_count = static_cast<int>(child_views_.size());
-
- if (child_count == 0) {
- v->next_focusable_view_ = NULL;
- v->previous_focusable_view_ = NULL;
- } else {
- if (index == child_count) {
- // We are inserting at the end, but the end of the child list may not be
- // the last focusable element. Let's try to find an element with no next
- // focusable element to link to.
- View* last_focusable_view = NULL;
- for (std::vector<View*>::iterator iter = child_views_.begin();
- iter != child_views_.end(); ++iter) {
- if (!(*iter)->next_focusable_view_) {
- last_focusable_view = *iter;
- break;
- }
- }
- if (last_focusable_view == NULL) {
- // Hum... there is a cycle in the focus list. Let's just insert ourself
- // after the last child.
- View* prev = child_views_[index - 1];
- v->previous_focusable_view_ = prev;
- v->next_focusable_view_ = prev->next_focusable_view_;
- prev->next_focusable_view_->previous_focusable_view_ = v;
- prev->next_focusable_view_ = v;
- } else {
- last_focusable_view->next_focusable_view_ = v;
- v->next_focusable_view_ = NULL;
- v->previous_focusable_view_ = last_focusable_view;
- }
- } else {
- View* prev = child_views_[index]->GetPreviousFocusableView();
- v->previous_focusable_view_ = prev;
- v->next_focusable_view_ = child_views_[index];
- if (prev)
- prev->next_focusable_view_ = v;
- child_views_[index]->previous_focusable_view_ = v;
- }
- }
-}
-
-#ifndef NDEBUG
-void View::PrintViewHierarchy() {
- PrintViewHierarchyImp(0);
-}
-
-void View::PrintViewHierarchyImp(int indent) {
- std::wostringstream buf;
- int ind = indent;
- while (ind-- > 0)
- buf << L' ';
- buf << UTF8ToWide(GetClassName());
- buf << L' ';
- buf << GetID();
- buf << L' ';
- buf << bounds_.x() << L"," << bounds_.y() << L",";
- buf << bounds_.right() << L"," << bounds_.bottom();
- buf << L' ';
- buf << this;
-
- LOG(INFO) << buf.str();
- std::cout << buf.str() << std::endl;
-
- for (int i = 0; i < GetChildViewCount(); ++i) {
- GetChildViewAt(i)->PrintViewHierarchyImp(indent + 2);
- }
-}
-
-
-void View::PrintFocusHierarchy() {
- PrintFocusHierarchyImp(0);
-}
-
-void View::PrintFocusHierarchyImp(int indent) {
- std::wostringstream buf;
- int ind = indent;
- while (ind-- > 0)
- buf << L' ';
- buf << UTF8ToWide(GetClassName());
- buf << L' ';
- buf << GetID();
- buf << L' ';
- buf << GetClassName().c_str();
- buf << L' ';
- buf << this;
-
- LOG(INFO) << buf.str();
- std::cout << buf.str() << std::endl;
-
- if (GetChildViewCount() > 0)
- GetChildViewAt(0)->PrintFocusHierarchyImp(indent + 2);
-
- View* v = GetNextFocusableView();
- if (v)
- v->PrintFocusHierarchyImp(indent);
-}
-#endif
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// View - accelerators
-//
-////////////////////////////////////////////////////////////////////////////////
-
-void View::AddAccelerator(const Accelerator& accelerator) {
- if (!accelerators_.get())
- accelerators_.reset(new std::vector<Accelerator>());
- accelerators_->push_back(accelerator);
- RegisterAccelerators();
-}
-
-void View::RemoveAccelerator(const Accelerator& accelerator) {
- std::vector<Accelerator>::iterator iter;
- if (!accelerators_.get() ||
- ((iter = std::find(accelerators_->begin(), accelerators_->end(),
- accelerator)) == accelerators_->end())) {
- NOTREACHED() << "Removing non-existing accelerator";
- return;
- }
-
- accelerators_->erase(iter);
- RootView* root_view = GetRootView();
- if (!root_view) {
- // We are not part of a view hierarchy, so there is nothing to do as we
- // removed ourselves from accelerators_, we won't be registered when added
- // to one.
- return;
- }
-
- // TODO(port): Fix this once we have a FocusManger for Linux.
-#if defined(OS_WIN)
- FocusManager* focus_manager = GetFocusManager();
- if (focus_manager) {
- // We may not have a FocusManager if the window containing us is being
- // closed, in which case the FocusManager is being deleted so there is
- // nothing to unregister.
- focus_manager->UnregisterAccelerator(accelerator, this);
- }
-#endif
-}
-
-void View::ResetAccelerators() {
- if (accelerators_.get()) {
- UnregisterAccelerators();
- accelerators_->clear();
- accelerators_.reset();
- }
-}
-
-void View::RegisterAccelerators() {
- if (!accelerators_.get())
- return;
-
- RootView* root_view = GetRootView();
- if (!root_view) {
- // We are not yet part of a view hierarchy, we'll register ourselves once
- // added to one.
- return;
- }
-
- // TODO(port): Fix this once we have a FocusManger for Linux.
-#if defined(OS_WIN)
- FocusManager* focus_manager = GetFocusManager();
- if (!focus_manager) {
- // Some crash reports seem to show that we may get cases where we have no
- // focus manager (see bug #1291225). This should never be the case, just
- // making sure we don't crash.
- NOTREACHED();
- return;
- }
- for (std::vector<Accelerator>::const_iterator iter = accelerators_->begin();
- iter != accelerators_->end(); ++iter) {
- focus_manager->RegisterAccelerator(*iter, this);
- }
-#endif
-}
-
-void View::UnregisterAccelerators() {
- if (!accelerators_.get())
- return;
-
- RootView* root_view = GetRootView();
- if (root_view) {
- // TODO(port): Fix this once we have a FocusManger for Linux.
-#if defined(OS_WIN)
- FocusManager* focus_manager = GetFocusManager();
- if (focus_manager) {
- // We may not have a FocusManager if the window containing us is being
- // closed, in which case the FocusManager is being deleted so there is
- // nothing to unregister.
- focus_manager->UnregisterAccelerators(this);
- }
-#endif
- }
-}
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// View - floating views
-//
-/////////////////////////////////////////////////////////////////////////////
-
-bool View::IsFloatingView() {
- if (!parent_)
- return false;
-
- return parent_->floating_views_ids_.find(this) !=
- parent_->floating_views_ids_.end();
-}
-
-// default implementation does nothing
-bool View::GetFloatingViewIDForPoint(int x, int y, int* id) {
- return false;
-}
-
-int View::GetFloatingViewCount() const {
- return static_cast<int>(floating_views_.size());
-}
-
-View* View::RetrieveFloatingViewParent() {
- View* v = this;
- while (v) {
- if (v->IsFloatingView())
- return v;
- v = v->GetParent();
- }
- return NULL;
-}
-
-bool View::EnumerateFloatingViews(FloatingViewPosition position,
- int starting_id, int* id) {
- return false;
-}
-
-int View::GetDragOperations(int press_x, int press_y) {
- if (!drag_controller_)
- return DragDropTypes::DRAG_NONE;
- return drag_controller_->GetDragOperations(this, press_x, press_y);
-}
-
-void View::WriteDragData(int press_x, int press_y, OSExchangeData* data) {
- DCHECK(drag_controller_);
- drag_controller_->WriteDragData(this, press_x, press_y, data);
-}
-
-void View::OnDragDone() {
-}
-
-bool View::InDrag() {
- RootView* root_view = GetRootView();
- return root_view ? (root_view->GetDragView() == this) : false;
-}
-
-View* View::ValidateFloatingViewForID(int id) {
- return NULL;
-}
-
-bool View::ShouldRestoreFloatingViewFocus() {
- return true;
-}
-
-void View::AttachFloatingView(View* v, int id) {
- floating_views_.push_back(v);
- floating_views_ids_[v] = id;
- AddChildView(static_cast<int>(child_views_.size()), v, true);
-}
-
-bool View::HasFloatingViewForPoint(int x, int y) {
- int i, c;
- View* v;
- gfx::Rect r;
-
- for (i = 0, c = static_cast<int>(floating_views_.size()); i < c; ++i) {
- v = floating_views_[i];
- r.SetRect(v->GetX(APPLY_MIRRORING_TRANSFORMATION), v->y(),
- v->width(), v->height());
- if (r.Contains(x, y))
- return true;
- }
- return false;
-}
-
-void View::DetachAllFloatingViews() {
- RootView* root_view = GetRootView();
- View* focused_view = NULL;
- FocusManager* focus_manager = NULL;
- if (root_view) {
- // We may be called when we are not attached to a root view in which case
- // there is nothing to do for focus.
- focus_manager = GetFocusManager();
- if (focus_manager) {
- // We may not have a focus manager (if we are detached from a top window).
- focused_view = focus_manager->GetFocusedView();
- }
- }
-
- int c = static_cast<int>(floating_views_.size());
- while (--c >= 0) {
- // If the focused view is a floating view or a floating view's children,
- // use the focus manager to store it.
- int tmp_id;
- if (focused_view &&
- ((focused_view == floating_views_[c]) ||
- floating_views_[c]->IsParentOf(focused_view))) {
- // We call EnumerateFloatingView to make sure the floating view is still
- // valid: the model may have changed and could not know anything about
- // that floating view anymore.
- if (EnumerateFloatingViews(CURRENT,
- floating_views_[c]->GetFloatingViewID(),
- &tmp_id)) {
- // TODO(port): Fix this once we have a FocusManger for Linux.
-#if defined(OS_WIN)
- focus_manager->StoreFocusedView();
-#endif
- should_restore_focus_ = true;
- }
- focused_view = NULL;
- }
-
- RemoveChildView(floating_views_[c]);
- delete floating_views_[c];
- }
- floating_views_.clear();
- floating_views_ids_.clear();
-}
-
-int View::GetFloatingViewID() {
- DCHECK(IsFloatingView());
- std::map<View*, int>::iterator iter = parent_->floating_views_ids_.find(this);
- DCHECK(iter != parent_->floating_views_ids_.end());
- return iter->second;
-}
-
-View* View::RetrieveFloatingViewForID(int id) {
- for (ViewList::const_iterator iter = floating_views_.begin();
- iter != floating_views_.end(); ++iter) {
- if ((*iter)->GetFloatingViewID() == id)
- return *iter;
- }
- return ValidateFloatingViewForID(id);
-}
-
-void View::RestoreFloatingViewFocus() {
- // Clear the reference to the task as if we have been triggered by it, it will
- // soon be invalid.
- restore_focus_view_task_ = NULL;
- should_restore_focus_ = false;
-
- // TODO(port): Fix this once we have a FocusManger for Linux.
-#if defined(OS_WIN)
- FocusManager* focus_manager = GetFocusManager();
- DCHECK(focus_manager);
- if (focus_manager)
- focus_manager->RestoreFocusedView();
-#endif
-}
-
-// static
-bool View::EnumerateFloatingViewsForInterval(int low_bound, int high_bound,
- bool ascending_order,
- FloatingViewPosition position,
- int starting_id,
- int* id) {
- DCHECK(low_bound <= high_bound);
- if (low_bound >= high_bound)
- return false;
-
- switch (position) {
- case CURRENT:
- if ((starting_id >= low_bound) && (starting_id < high_bound)) {
- *id = starting_id;
- return true;
- }
- return false;
- case FIRST:
- *id = ascending_order ? low_bound : high_bound - 1;
- return true;
- case LAST:
- *id = ascending_order ? high_bound - 1 : low_bound;
- return true;
- case NEXT:
- case PREVIOUS:
- if (((position == NEXT) && ascending_order) ||
- ((position == PREVIOUS) && !ascending_order)) {
- starting_id++;
- if (starting_id < high_bound) {
- *id = starting_id;
- return true;
- }
- return false;
- }
- DCHECK(((position == NEXT) && !ascending_order) ||
- ((position == PREVIOUS) && ascending_order));
- starting_id--;
- if (starting_id >= low_bound) {
- *id = starting_id;
- return true;
- }
- return false;
- default:
- NOTREACHED();
- }
- return false;
-}
-
-// static
-void View::ConvertPointToView(const View* src,
- const View* dst,
- gfx::Point* point) {
- ConvertPointToView(src, dst, point, true);
-}
-
-// static
-void View::ConvertPointToView(const View* src,
- const View* dst,
- gfx::Point* point,
- bool try_other_direction) {
- // src can be NULL
- DCHECK(dst);
- DCHECK(point);
-
- const View* v;
- gfx::Point offset;
-
- for (v = dst; v && v != src; v = v->GetParent()) {
- offset.SetPoint(offset.x() + v->GetX(APPLY_MIRRORING_TRANSFORMATION),
- offset.y() + v->y());
- }
-
- // The source was not found. The caller wants a conversion
- // from a view to a transitive parent.
- if (src && v == NULL && try_other_direction) {
- gfx::Point p;
- // note: try_other_direction is force to FALSE so we don't
- // end up in an infinite recursion should both src and dst
- // are not parented.
- ConvertPointToView(dst, src, &p, false);
- // since the src and dst are inverted, p should also be negated
- point->SetPoint(point->x() - p.x(), point->y() - p.y());
- } else {
- point->SetPoint(point->x() - offset.x(), point->y() - offset.y());
-
- // If src is NULL, sp is in the screen coordinate system
- if (src == NULL) {
- Widget* widget = dst->GetWidget();
- if (widget) {
- gfx::Rect b;
- widget->GetBounds(&b, false);
- point->SetPoint(point->x() - b.x(), point->y() - b.y());
- }
- }
- }
-}
-
-// static
-void View::ConvertPointToWidget(const View* src, gfx::Point* p) {
- DCHECK(src);
- DCHECK(p);
-
- gfx::Point offset;
- for (const View* v = src; v; v = v->GetParent()) {
- offset.set_x(offset.x() + v->GetX(APPLY_MIRRORING_TRANSFORMATION));
- offset.set_y(offset.y() + v->y());
- }
- p->SetPoint(p->x() + offset.x(), p->y() + offset.y());
-}
-
-// static
-void View::ConvertPointFromWidget(const View* dest, gfx::Point* p) {
- gfx::Point t;
- ConvertPointToWidget(dest, &t);
- p->SetPoint(p->x() - t.x(), p->y() - t.y());
-}
-
-// static
-void View::ConvertPointToScreen(const View* src, gfx::Point* p) {
- DCHECK(src);
- DCHECK(p);
-
- // If the view is not connected to a tree, there's nothing we can do.
- Widget* widget = src->GetWidget();
- if (widget) {
- ConvertPointToWidget(src, p);
- gfx::Rect r;
- widget->GetBounds(&r, false);
- p->SetPoint(p->x() + r.x(), p->y() + r.y());
- }
-}
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// View - event handlers
-//
-/////////////////////////////////////////////////////////////////////////////
-
-bool View::OnMousePressed(const MouseEvent& e) {
- return false;
-}
-
-bool View::OnMouseDragged(const MouseEvent& e) {
- return false;
-}
-
-void View::OnMouseReleased(const MouseEvent& e, bool canceled) {
-}
-
-void View::OnMouseMoved(const MouseEvent& e) {
-}
-
-void View::OnMouseEntered(const MouseEvent& e) {
-}
-
-void View::OnMouseExited(const MouseEvent& e) {
-}
-
-void View::SetMouseHandler(View *new_mouse_handler) {
- // It is valid for new_mouse_handler to be NULL
- if (parent_) {
- parent_->SetMouseHandler(new_mouse_handler);
- }
-}
-
-void View::SetVisible(bool flag) {
- if (flag != is_visible_) {
- // If the tab is currently visible, schedule paint to
- // refresh parent
- if (IsVisible()) {
- SchedulePaint();
- }
-
- is_visible_ = flag;
-
- // This notifies all subviews recursively.
- PropagateVisibilityNotifications(this, flag);
-
- // If we are newly visible, schedule paint.
- if (IsVisible()) {
- SchedulePaint();
- }
- }
-}
-
-bool View::IsVisibleInRootView() const {
- View* parent = GetParent();
- if (IsVisible() && parent)
- return parent->IsVisibleInRootView();
- else
- return false;
-}
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// View - keyboard and focus
-//
-/////////////////////////////////////////////////////////////////////////////
-
-void View::RequestFocus() {
- RootView* rv = GetRootView();
- if (rv && IsFocusable())
- rv->FocusView(this);
-}
-
-void View::WillGainFocus() {
-}
-
-void View::DidGainFocus() {
-}
-
-void View::WillLoseFocus() {
-}
-
-bool View::OnKeyPressed(const KeyEvent& e) {
- return false;
-}
-
-bool View::OnKeyReleased(const KeyEvent& e) {
- return false;
-}
-
-bool View::OnMouseWheel(const MouseWheelEvent& e) {
- return false;
-}
-
-void View::SetDragController(DragController* drag_controller) {
- drag_controller_ = drag_controller;
-}
-
-DragController* View::GetDragController() {
- return drag_controller_;
-}
-
-bool View::CanDrop(const OSExchangeData& data) {
- return false;
-}
-
-void View::OnDragEntered(const DropTargetEvent& event) {
-}
-
-int View::OnDragUpdated(const DropTargetEvent& event) {
- return DragDropTypes::DRAG_NONE;
-}
-
-void View::OnDragExited() {
-}
-
-int View::OnPerformDrop(const DropTargetEvent& event) {
- return DragDropTypes::DRAG_NONE;
-}
-
-// static
-bool View::ExceededDragThreshold(int delta_x, int delta_y) {
- return (abs(delta_x) > GetHorizontalDragThreshold() ||
- abs(delta_y) > GetVerticalDragThreshold());
-}
-
-bool View::CanProcessTabKeyEvents() {
- return false;
-}
-
-// Tooltips -----------------------------------------------------------------
-bool View::GetTooltipText(int x, int y, std::wstring* tooltip) {
- return false;
-}
-
-bool View::GetTooltipTextOrigin(int x, int y, gfx::Point* loc) {
- return false;
-}
-
-void View::TooltipTextChanged() {
-#if defined(OS_WIN)
- Widget* widget = GetWidget();
- if (widget && widget->GetTooltipManager())
- widget->GetTooltipManager()->TooltipTextChanged(this);
-#else
- // TODO(port): Not actually windows specific; I just haven't ported this part
- // yet.
- NOTIMPLEMENTED();
-#endif
-}
-
-void View::UpdateTooltip() {
-#if defined(OS_WIN)
- Widget* widget = GetWidget();
- if (widget && widget->GetTooltipManager())
- widget->GetTooltipManager()->UpdateTooltip();
-#else
- // TODO(port): Not actually windows specific; I just haven't ported this part
- // yet.
- NOTIMPLEMENTED();
-#endif
-}
-
-void View::SetParentOwned(bool f) {
- is_parent_owned_ = f;
-}
-
-bool View::IsParentOwned() const {
- return is_parent_owned_;
-}
-
-std::string View::GetClassName() const {
- return kViewClassName;
-}
-
-View* View::GetAncestorWithClassName(const std::string& name) {
- for (View* view = this; view; view = view->GetParent()) {
- if (view->GetClassName() == name)
- return view;
- }
- return NULL;
-}
-
-gfx::Rect View::GetVisibleBounds() {
- if (!IsVisibleInRootView())
- return gfx::Rect();
- gfx::Rect vis_bounds(0, 0, width(), height());
- gfx::Rect ancestor_bounds;
- View* view = this;
- int root_x = 0;
- int root_y = 0;
- while (view != NULL && !vis_bounds.IsEmpty()) {
- root_x += view->GetX(APPLY_MIRRORING_TRANSFORMATION);
- root_y += view->y();
- vis_bounds.Offset(view->GetX(APPLY_MIRRORING_TRANSFORMATION), view->y());
- View* ancestor = view->GetParent();
- if (ancestor != NULL) {
- ancestor_bounds.SetRect(0, 0, ancestor->width(),
- ancestor->height());
- vis_bounds = vis_bounds.Intersect(ancestor_bounds);
- } else if (!view->GetWidget()) {
- // If the view has no Widget, we're not visible. Return an empty rect.
- return gfx::Rect();
- }
- view = ancestor;
- }
- if (vis_bounds.IsEmpty())
- return vis_bounds;
- // Convert back to this views coordinate system.
- vis_bounds.Offset(-root_x, -root_y);
- return vis_bounds;
-}
-
-int View::GetPageScrollIncrement(ScrollView* scroll_view,
- bool is_horizontal, bool is_positive) {
- return 0;
-}
-
-int View::GetLineScrollIncrement(ScrollView* scroll_view,
- bool is_horizontal, bool is_positive) {
- return 0;
-}
-
-// static
-void View::RegisterChildrenForVisibleBoundsNotification(
- RootView* root, View* view) {
- DCHECK(root && view);
- if (view->GetNotifyWhenVisibleBoundsInRootChanges())
- root->RegisterViewForVisibleBoundsNotification(view);
- for (int i = 0; i < view->GetChildViewCount(); ++i)
- RegisterChildrenForVisibleBoundsNotification(root, view->GetChildViewAt(i));
-}
-
-// static
-void View::UnregisterChildrenForVisibleBoundsNotification(
- RootView* root, View* view) {
- DCHECK(root && view);
- if (view->GetNotifyWhenVisibleBoundsInRootChanges())
- root->UnregisterViewForVisibleBoundsNotification(view);
- for (int i = 0; i < view->GetChildViewCount(); ++i)
- UnregisterChildrenForVisibleBoundsNotification(root,
- view->GetChildViewAt(i));
-}
-
-void View::AddDescendantToNotify(View* view) {
- DCHECK(view);
- if (!descendants_to_notify_.get())
- descendants_to_notify_.reset(new ViewList());
- descendants_to_notify_->push_back(view);
-}
-
-void View::RemoveDescendantToNotify(View* view) {
- DCHECK(view && descendants_to_notify_.get());
- ViewList::iterator i = find(descendants_to_notify_->begin(),
- descendants_to_notify_->end(),
- view);
- DCHECK(i != descendants_to_notify_->end());
- descendants_to_notify_->erase(i);
- if (descendants_to_notify_->empty())
- descendants_to_notify_.reset();
-}
-
-// static
-bool View::GetViewPath(View* start, View* end, std::vector<int>* path) {
- while (end && (end != start)) {
- View* parent = end->GetParent();
- if (!parent)
- return false;
- path->insert(path->begin(), parent->GetChildIndex(end));
- end = parent;
- }
- return end == start;
-}
-
-// static
-View* View::GetViewForPath(View* start, const std::vector<int>& path) {
- View* v = start;
- for (std::vector<int>::const_iterator iter = path.begin();
- iter != path.end(); ++iter) {
- int index = *iter;
- if (index >= v->GetChildViewCount())
- return NULL;
- v = v->GetChildViewAt(index);
- }
- return v;
-}
-
-// DropInfo --------------------------------------------------------------------
-
-void View::DragInfo::Reset() {
- possible_drag = false;
- start_x = start_y = 0;
-}
-
-void View::DragInfo::PossibleDrag(int x, int y) {
- possible_drag = true;
- start_x = x;
- start_y = y;
-}
-
-} // namespace
diff --git a/chrome/views/view.h b/chrome/views/view.h
deleted file mode 100644
index 98f143c..0000000
--- a/chrome/views/view.h
+++ /dev/null
@@ -1,1351 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_VIEW_H_
-#define CHROME_VIEWS_VIEW_H_
-
-#include "build/build_config.h"
-
-#if defined(OS_WIN)
-#include <atlbase.h>
-#include <atlapp.h>
-#include <atlmisc.h>
-#endif // defined(OS_WIN)
-
-#include <algorithm>
-#include <map>
-#include <string>
-#include <vector>
-
-#include "base/gfx/rect.h"
-#include "base/scoped_ptr.h"
-#include "chrome/common/accessibility_types.h"
-#include "chrome/views/accelerator.h"
-#include "chrome/views/background.h"
-#include "chrome/views/border.h"
-
-namespace gfx {
-class Insets;
-class Path;
-}
-
-class ChromeCanvas;
-class OSExchangeData;
-class ViewAccessibilityWrapper;
-
-namespace views {
-
-class Background;
-class Border;
-class FocusManager;
-class FocusTraversable;
-class LayoutManager;
-class RestoreFocusTask;
-class RootView;
-class ScrollView;
-class Widget;
-class Window;
-
-// ContextMenuController is responsible for showing the context menu for a
-// View. To use a ContextMenuController invoke SetContextMenuController on a
-// View. When the appropriate user gesture occurs ShowContextMenu is invoked
-// on the ContextMenuController.
-//
-// Setting a ContextMenuController on a view makes the view process mouse
-// events.
-//
-// It is up to subclasses that do their own mouse processing to invoke
-// the appropriate ContextMenuController method, typically by invoking super's
-// implementation for mouse processing.
-//
-class ContextMenuController {
- public:
- // Invoked to show the context menu for the source view. If is_mouse_gesture
- // is true, the x/y coordinate are the location of the mouse. If
- // is_mouse_gesture is false, this method was not invoked by a mouse gesture
- // and x/y is the recommended location to show the menu at.
- //
- // x/y is in screen coordinates.
- virtual void ShowContextMenu(View* source,
- int x,
- int y,
- bool is_mouse_gesture) = 0;
-};
-
-// DragController is responsible for writing drag data for a view, as well as
-// supplying the supported drag operations. Use DragController if you don't
-// want to subclass.
-
-class DragController {
- public:
- // Writes the data for the drag.
- virtual void WriteDragData(View* sender,
- int press_x,
- int press_y,
- OSExchangeData* data) = 0;
-
- // Returns the supported drag operations (see DragDropTypes for possible
- // values). A drag is only started if this returns a non-zero value.
- virtual int GetDragOperations(View* sender, int x, int y) = 0;
-};
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// View class
-//
-// A View is a rectangle within the views View hierarchy. It is the base
-// class for all Views.
-//
-// A View is a container of other Views (there is no such thing as a Leaf
-// View - makes code simpler, reduces type conversion headaches, design
-// mistakes etc)
-//
-// The View contains basic properties for sizing (bounds), layout (flex,
-// orientation, etc), painting of children and event dispatch.
-//
-// The View also uses a simple Box Layout Manager similar to XUL's
-// SprocketLayout system. Alternative Layout Managers implementing the
-// LayoutManager interface can be used to lay out children if required.
-//
-// It is up to the subclass to implement Painting and storage of subclass -
-// specific properties and functionality.
-//
-/////////////////////////////////////////////////////////////////////////////
-class View : public AcceleratorTarget {
- public:
-
- // Used in EnumerateFloatingViews() to specify which floating view to
- // retrieve.
- enum FloatingViewPosition {
- FIRST = 0,
- NEXT,
- PREVIOUS,
- LAST,
- CURRENT
- };
-
- // Used in the versions of GetBounds() and x() that take a transformation
- // parameter in order to determine whether or not to take into account the
- // mirroring setting of the View when returning bounds positions.
- enum PositionMirroringSettings {
- IGNORE_MIRRORING_TRANSFORMATION = 0,
- APPLY_MIRRORING_TRANSFORMATION
- };
-
- // The view class name.
- static char kViewClassName[];
-
- View();
- virtual ~View();
-
- // Sizing functions
-
- // Get the bounds of the View, relative to the parent. Essentially, this
- // function returns the bounds_ rectangle.
- //
- // This is the function subclasses should use whenever they need to obtain
- // the bounds of one of their child views (for example, when implementing
- // View::Layout()).
- // TODO(beng): Convert |bounds_| to a gfx::Rect.
- gfx::Rect bounds() const { return bounds_; }
-
- // Get the size of the View.
- gfx::Size size() const { return bounds_.size(); }
-
- // Return the bounds of the View, relative to the parent. If
- // |settings| is IGNORE_MIRRORING_TRANSFORMATION, the function returns the
- // bounds_ rectangle. If |settings| is APPLY_MIRRORING_SETTINGS AND the
- // parent View is using a right-to-left UI layout, then the function returns
- // a shifted version of the bounds_ rectangle that represents the mirrored
- // View bounds.
- //
- // NOTE: in the vast majority of the cases, the mirroring implementation is
- // transparent to the View subclasses and therefore you should use the
- // version of GetBounds() which does not take a transformation settings
- // parameter.
- gfx::Rect GetBounds(PositionMirroringSettings settings) const;
-
- // Set the bounds in the parent's coordinate system.
- void SetBounds(const gfx::Rect& bounds);
- void SetBounds(int x, int y, int width, int height) {
- SetBounds(gfx::Rect(x, y, std::max(0, width), std::max(0, height)));
- }
- void SetX(int x) { SetBounds(x, y(), width(), height()); }
- void SetY(int y) { SetBounds(x(), y, width(), height()); }
-
- // Returns the left coordinate of the View, relative to the parent View,
- // which is the value of bounds_.x().
- //
- // This is the function subclasses should use whenever they need to obtain
- // the left position of one of their child views (for example, when
- // implementing View::Layout()).
- // This is equivalent to GetX(IGNORE_MIRRORING_TRANSFORMATION), but
- // inlinable.
- int x() const { return bounds_.x(); }
- int y() const { return bounds_.y(); }
- int width() const { return bounds_.width(); }
- int height() const { return bounds_.height(); }
-
- // Return the left coordinate of the View, relative to the parent. If
- // |settings| is IGNORE_MIRRORING_SETTINGS, the function returns the value of
- // bounds_.x(). If |settings| is APPLY_MIRRORING_SETTINGS AND the parent
- // View is using a right-to-left UI layout, then the function returns the
- // mirrored value of bounds_.x().
- //
- // NOTE: in the vast majority of the cases, the mirroring implementation is
- // transparent to the View subclasses and therefore you should use the
- // paremeterless version of x() when you need to get the X
- // coordinate of a child View.
- int GetX(PositionMirroringSettings settings) const;
-
- // Return this control local bounds. If include_border is true, local bounds
- // is the rectangle {0, 0, width(), height()}, otherwise, it does not
- // include the area where the border (if any) is painted.
- gfx::Rect GetLocalBounds(bool include_border) const;
-
- // Get the position of the View, relative to the parent.
- //
- // Note that if the parent uses right-to-left UI layout, then the mirrored
- // position of this View is returned. Use x()/y() if you want to ignore
- // mirroring.
- gfx::Point GetPosition() const;
-
- // Get the size the View would like to be, if enough space were available.
- virtual gfx::Size GetPreferredSize();
-
- // Convenience method that sizes this view to its preferred size.
- void SizeToPreferredSize();
-
- // Gets the minimum size of the view. View's implementation invokes
- // GetPreferredSize.
- virtual gfx::Size GetMinimumSize();
-
- // Return the height necessary to display this view with the provided width.
- // View's implementation returns the value from getPreferredSize.cy.
- // Override if your View's preferred height depends upon the width (such
- // as with Labels).
- virtual int GetHeightForWidth(int w);
-
- // This method is invoked when this object size or position changes.
- // The default implementation does nothing.
- virtual void DidChangeBounds(const gfx::Rect& previous,
- const gfx::Rect& current);
-
- // Set whether the receiving view is visible. Painting is scheduled as needed
- virtual void SetVisible(bool flag);
-
- // Return whether a view is visible
- virtual bool IsVisible() const { return is_visible_; }
-
- // Return whether a view and its ancestors are visible. Returns true if the
- // path from this view to the root view is visible.
- virtual bool IsVisibleInRootView() const;
-
- // Set whether this view is enabled. A disabled view does not receive keyboard
- // or mouse inputs. If flag differs from the current value, SchedulePaint is
- // invoked.
- virtual void SetEnabled(bool flag);
-
- // Returns whether the view is enabled.
- virtual bool IsEnabled() const;
-
- // Set whether this view is hottracked. A disabled view cannot be hottracked.
- // If flag differs from the current value, SchedulePaint is invoked.
- virtual void SetHotTracked(bool flag);
-
- // Returns whether the view is hot-tracked.
- virtual bool IsHotTracked() const { return false; }
-
- // Returns whether the view is pushed.
- virtual bool IsPushed() const { return false; }
-
- // Scrolls the specified region, in this View's coordinate system, to be
- // visible. View's implementation passes the call onto the parent View (after
- // adjusting the coordinates). It is up to views that only show a portion of
- // the child view, such as Viewport, to override appropriately.
- virtual void ScrollRectToVisible(int x, int y, int width, int height);
-
- // Layout functions
-
- // Lay out the child Views (set their bounds based on sizing heuristics
- // specific to the current Layout Manager)
- virtual void Layout();
-
- // Gets/Sets the Layout Manager used by this view to size and place its
- // children.
- // The LayoutManager is owned by the View and is deleted when the view is
- // deleted, or when a new LayoutManager is installed.
- LayoutManager* GetLayoutManager() const;
- void SetLayoutManager(LayoutManager* layout);
-
- // Right-to-left UI layout functions
-
- // Indicates whether the UI layout for this view is right-to-left. The view
- // has an RTL UI layout if RTL hasn't been disabled for the view and if the
- // locale's language is an RTL language.
- bool UILayoutIsRightToLeft() const;
-
- // Enables or disables the right-to-left layout for the view. If |enable| is
- // true, the layout will become right-to-left only if the locale's language
- // is right-to-left.
- //
- // By default, right-to-left UI layout is enabled for the view and therefore
- // this function must be called (with false as the |enable| parameter) in
- // order to disable the right-to-left layout property for a specific instance
- // of the view. Disabling the right-to-left UI layout is necessary in case a
- // UI element will not appear correctly when mirrored.
- void EnableUIMirroringForRTLLanguages(bool enable) {
- ui_mirroring_is_enabled_for_rtl_languages_ = enable;
- }
-
- // This method determines whether the ChromeCanvas object passed to
- // View::Paint() needs to be transformed such that anything drawn on the
- // canvas object during View::Paint() is flipped horizontally.
- //
- // By default, this function returns false (which is the initial value of
- // |flip_canvas_on_paint_for_rtl_ui_|). View subclasses that need to paint on
- // a flipped ChromeCanvas when the UI layout is right-to-left need to call
- // EnableCanvasFlippingForRTLUI().
- bool FlipCanvasOnPaintForRTLUI() const {
- return flip_canvas_on_paint_for_rtl_ui_ ? UILayoutIsRightToLeft() : false;
- }
-
- // Enables or disables flipping of the ChromeCanvas during View::Paint().
- // Note that if canvas flipping is enabled, the canvas will be flipped only
- // if the UI layout is right-to-left; that is, the canvas will be flipped
- // only if UILayoutIsRightToLeft() returns true.
- //
- // Enabling canvas flipping is useful for leaf views that draw a bitmap that
- // needs to be flipped horizontally when the UI layout is right-to-left
- // (views::Button, for example). This method is helpful for such classes
- // because their drawing logic stays the same and they can become agnostic to
- // the UI directionality.
- void EnableCanvasFlippingForRTLUI(bool enable) {
- flip_canvas_on_paint_for_rtl_ui_ = enable;
- }
-
- // Returns the mirrored X position for the view, relative to the parent. If
- // the parent view is not mirrored, this function returns bound_.left.
- //
- // UI mirroring is transparent to most View subclasses and therefore there is
- // no need to call this routine from anywhere within your subclass
- // implementation.
- int MirroredX() const;
-
- // Given a rectangle specified in this View's coordinate system, the function
- // computes the 'left' value for the mirrored rectangle within this View. If
- // the View's UI layout is not right-to-left, then bounds.x() is returned.
- //
- // UI mirroring is transparent to most View subclasses and therefore there is
- // no need to call this routine from anywhere within your subclass
- // implementation.
- int MirroredLeftPointForRect(const gfx::Rect& rect) const;
-
- // Given the X coordinate of a point inside the View, this function returns
- // the mirrored X coordinate of the point if the View's UI layout is
- // right-to-left. If the layout is left-to-right, the same X coordinate is
- // returned.
- //
- // Following are a few examples of the values returned by this function for
- // a View with the bounds {0, 0, 100, 100} and a right-to-left layout:
- //
- // MirroredXCoordinateInsideView(0) -> 100
- // MirroredXCoordinateInsideView(20) -> 80
- // MirroredXCoordinateInsideView(99) -> 1
- int MirroredXCoordinateInsideView(int x) const {
- return UILayoutIsRightToLeft() ? width() - x : x;
- }
-
- // Painting functions
-
- // Mark the specified rectangle as dirty (needing repaint). If |urgent| is
- // true, the view will be repainted when the current event processing is
- // done. Otherwise, painting will take place as soon as possible.
- virtual void SchedulePaint(const gfx::Rect& r, bool urgent);
-
- // Mark the entire View's bounds as dirty. Painting will occur as soon as
- // possible.
- virtual void SchedulePaint();
-
- // Convenience to schedule a paint given some ints. Painting will occur as
- // soon as possible.
- virtual void SchedulePaint(int x, int y, int w, int h);
-
- // Paint the receiving view. g is prepared such as it is in
- // receiver's coordinate system. g's state is restored after this
- // call so your implementation can change the graphics configuration
- //
- // Default implementation paints the background if it is defined
- //
- // Override this method when implementing a new control.
- virtual void Paint(ChromeCanvas* canvas);
-
- // Paint the background if any. This method is called by Paint() and
- // should rarely be invoked directly.
- virtual void PaintBackground(ChromeCanvas* canvas);
-
- // Paint the border if any. This method is called by Paint() and
- // should rarely be invoked directly.
- virtual void PaintBorder(ChromeCanvas* canvas);
-
- // Paints the focus border (only if the view has the focus).
- // This method is called by Paint() and should rarely be invoked directly.
- // The default implementation paints a gray border around the view. Override
- // it for custom focus effects.
- virtual void PaintFocusBorder(ChromeCanvas* canvas);
-
- // Paint this View immediately.
- virtual void PaintNow();
-
- // Paint a view without attaching it to this view hierarchy.
- // Any view can be painted that way.
- // This method set bounds, calls layout and handles clipping properly. The
- // provided view can be attached to a parent. The parent will be saved and
- // restored. (x, y, width, height) define the floating view bounds
- void PaintFloatingView(ChromeCanvas* canvas, View* view,
- int x, int y, int w, int h);
-
- // Tree functions
-
- // Add a child View.
- void AddChildView(View* v);
-
- // Adds a child View at the specified position.
- void AddChildView(int index, View* v);
-
- // Get the child View at the specified index.
- View* GetChildViewAt(int index) const;
-
- // Remove a child view from this view. v's parent will change to NULL
- void RemoveChildView(View *v);
-
- // Remove all child view from this view. If |delete_views| is true, the views
- // are deleted, unless marked as not parent owned.
- void RemoveAllChildViews(bool delete_views);
-
- // Get the number of child Views.
- int GetChildViewCount() const;
-
- // Get the child View at the specified point.
- virtual View* GetViewForPoint(const gfx::Point& point);
-
- // Get the Widget that hosts this View, if any.
- virtual Widget* GetWidget() const;
-
- // Gets the Widget that most closely contains this View, if any.
- virtual Window* GetWindow() const;
-
- // Get the containing RootView
- virtual RootView* GetRootView();
-
- // Get the parent View
- View* GetParent() const { return parent_; }
-
- // Returns the index of the specified |view| in this view's children, or -1
- // if the specified view is not a child of this view.
- int GetChildIndex(View* v) const;
-
- // Returns true if the specified view is a direct or indirect child of this
- // view.
- bool IsParentOf(View* v) const;
-
- // Recursively descends the view tree starting at this view, and returns
- // the first child that it encounters that has the given ID.
- // Returns NULL if no matching child view is found.
- virtual View* GetViewByID(int id) const;
-
- // Sets and gets the ID for this view. ID should be unique within the subtree
- // that you intend to search for it. 0 is the default ID for views.
- void SetID(int id);
- int GetID() const;
-
- // A group id is used to tag views which are part of the same logical group.
- // Focus can be moved between views with the same group using the arrow keys.
- // Groups are currently used to implement radio button mutual exclusion.
- void SetGroup(int gid);
- int GetGroup() const;
-
- // If this returns true, the views from the same group can each be focused
- // when moving focus with the Tab/Shift-Tab key. If this returns false,
- // only the selected view from the group (obtained with
- // GetSelectedViewForGroup()) is focused.
- virtual bool IsGroupFocusTraversable() const { return true; }
-
- // Fills the provided vector with all the available views which belong to the
- // provided group.
- void GetViewsWithGroup(int group_id, std::vector<View*>* out);
-
- // Return the View that is currently selected in the specified group.
- // The default implementation simply returns the first View found for that
- // group.
- virtual View* GetSelectedViewForGroup(int group_id);
-
- // Focus support
- //
- // Returns the view that should be selected next when pressing Tab.
- View* GetNextFocusableView();
-
- // Returns the view that should be selected next when pressing Shift-Tab.
- View* GetPreviousFocusableView();
-
- // Sets the component that should be selected next when pressing Tab, and
- // makes the current view the precedent view of the specified one.
- // Note that by default views are linked in the order they have been added to
- // their container. Use this method if you want to modify the order.
- // IMPORTANT NOTE: loops in the focus hierarchy are not supported.
- void SetNextFocusableView(View* view);
-
- // Return whether this view can accept the focus.
- virtual bool IsFocusable() const;
-
- // Sets whether this view can accept the focus.
- // Note that this is false by default so that a view used as a container does
- // not get the focus.
- virtual void SetFocusable(bool focusable);
-
- // Convenience method to retrieve the FocusManager associated with the
- // Widget that contains this view. This can return NULL if this view is not
- // part of a view hierarchy with a Widget.
- virtual FocusManager* GetFocusManager();
-
- // Sets a keyboard accelerator for that view. When the user presses the
- // accelerator key combination, the AcceleratorPressed method is invoked.
- // Note that you can set multiple accelerators for a view by invoking this
- // method several times.
- virtual void AddAccelerator(const Accelerator& accelerator);
-
- // Removes the specified accelerator for this view.
- virtual void RemoveAccelerator(const Accelerator& accelerator);
-
- // Removes all the keyboard accelerators for this view.
- virtual void ResetAccelerators();
-
- // Called when a keyboard accelerator is pressed.
- // Derived classes should implement desired behavior and return true if they
- // handled the accelerator.
- virtual bool AcceleratorPressed(const Accelerator& accelerator) {
- return false;
- }
-
- // Called on a view (if it is has focus) before an Accelerator is processed.
- // Views that want to override an accelerator should override this method to
- // perform the required action and return true, to indicate that the
- // accelerator should not be processed any further.
- virtual bool OverrideAccelerator(const Accelerator& accelerator) {
- return false;
- }
-
- // Returns whether this view currently has the focus.
- virtual bool HasFocus();
-
- // Accessibility support
- // TODO(klink): Move all this out to a AccessibleInfo wrapper class.
- //
- // Returns the MSAA default action of the current view. The string returned
- // describes the default action that will occur when executing
- // IAccessible::DoDefaultAction. For instance, default action of a button is
- // 'Press'. Sets the input string appropriately, and returns true if
- // successful.
- virtual bool GetAccessibleDefaultAction(std::wstring* action) {
- return false;
- }
-
- // Returns a string containing the mnemonic, or the keyboard shortcut, for a
- // given control. Sets the input string appropriately, and returns true if
- // successful.
- virtual bool GetAccessibleKeyboardShortcut(std::wstring* shortcut) {
- return false;
- }
-
- // Returns a brief, identifying string, containing a unique, readable name of
- // a given control. Sets the input string appropriately, and returns true if
- // successful.
- virtual bool GetAccessibleName(std::wstring* name) { return false; }
-
- // Returns the accessibility role of the current view. The role is what
- // assistive technologies (ATs) use to determine what behavior to expect from
- // a given control. Sets the input Role appropriately, and returns true if
- // successful.
- virtual bool GetAccessibleRole(AccessibilityTypes::Role* role) {
- return false;
- }
-
- // Returns the accessibility state of the current view. Sets the input State
- // appropriately, and returns true if successful.
- virtual bool GetAccessibleState(AccessibilityTypes::State* state) {
- return false;
- }
-
- // Assigns a keyboard shortcut string description to the given control. Needed
- // as a View does not know which shortcut will be associated with it until it
- // is created to be a certain type.
- virtual void SetAccessibleKeyboardShortcut(const std::wstring& shortcut) {}
-
- // Assigns a string name to the given control. Needed as a View does not know
- // which name will be associated with it until it is created to be a
- // certain type.
- virtual void SetAccessibleName(const std::wstring& name) {}
-
- // Returns an instance of a wrapper class implementing the (platform-specific)
- // accessibility interface for a given View. If one exists, it will be
- // re-used, otherwise a new instance will be created.
- ViewAccessibilityWrapper* GetViewAccessibilityWrapper();
-
- // Accessor used to determine if a child view (leaf) has accessibility focus.
- // Returns NULL if there are no children, or if none of the children has
- // accessibility focus.
- virtual View* GetAccFocusedChildView() { return NULL; }
-
- // Floating views
- //
- // A floating view is a view that is used to paint a cell within a parent view
- // Floating Views are painted using PaintFloatingView() above.
- //
- // Floating views can also be lazily created and attached to the view
- // hierarchy to process events. To make this possible, each view is given an
- // opportunity to create and attach a floating view right before an mouse
- // event is processed.
-
- // Retrieves the id for the floating view at the specified coordinates if any.
- // Derived classes that use floating views should implement this method and
- // return true if a view has been found and its id set in |id|.
- virtual bool GetFloatingViewIDForPoint(int x, int y, int* id);
-
- // Retrieves the ID of the floating view at the specified |position| and sets
- // it in |id|.
- // For positions NEXT and PREVIOUS, the specified |starting_id| is used as
- // the origin, it is ignored for FIRST and LAST.
- // Returns true if an ID was found, false otherwise.
- // For CURRENT, the |starting_id| should be set in |id| and true returned if
- // the |starting_id| is a valid floating view id.
- // Derived classes that use floating views should implement this method and
- // return a unique ID for each floating view.
- // The default implementation always returns false.
- virtual bool EnumerateFloatingViews(FloatingViewPosition position,
- int starting_id,
- int* id);
-
- // Creates and attaches the floating view with the specified |id| to this view
- // hierarchy and returns it.
- // Derived classes that use floating views should implement this method.
- //
- // NOTE: subclasses implementing this should return NULL if passed an invalid
- // id. An invalid ID may be passed in by the focus manager when attempting
- // to restore focus.
- virtual View* ValidateFloatingViewForID(int id);
-
- // Whether the focus should automatically be restored to the last focused
- // view. Default implementation returns true.
- // Derived classes that want to restore focus themselves should override this
- // method and return false.
- virtual bool ShouldRestoreFloatingViewFocus();
-
- // Attach a floating view to the receiving view. The view is inserted
- // in the child view list and will behave like a normal view. |id| is the
- // floating view id for that view.
- void AttachFloatingView(View* v, int id);
-
- // Return whether a view already has a floating view which bounds intersects
- // the provided point.
- //
- // If the View uses right-to-left UI layout, then the given point is checked
- // against the mirrored position of each floating View.
- bool HasFloatingViewForPoint(int x, int y);
-
- // Detach and delete all floating views. Call this method when your model
- // or layout changes.
- void DetachAllFloatingViews();
-
- // Returns the view with the specified |id|, by calling
- // ValidateFloatingViewForID if that view has not yet been attached.
- virtual View* RetrieveFloatingViewForID(int id);
-
- // Restores the focus to the previously selected floating view.
- virtual void RestoreFloatingViewFocus();
-
- // Goes up the parent hierarchy of this view and returns the first floating
- // view found. Returns NULL if none were found.
- View* RetrieveFloatingViewParent();
-
- // Utility functions
-
- // Note that the utility coordinate conversions functions always operate on
- // the mirrored position of the child Views if the parent View uses a
- // right-to-left UI layout.
-
- // Convert a point from source coordinate system to dst coordinate system.
- //
- // source is a parent or a child of dst, directly or transitively.
- // If source and dst are not in the same View hierarchy, the result is
- // undefined.
- // Source can be NULL in which case it means the screen coordinate system
- static void ConvertPointToView(const View* src,
- const View* dst,
- gfx::Point* point);
-
- // Convert a point from the coordinate system of a View to that of the
- // Widget. This is useful for example when sizing HWND children of the
- // Widget that don't know about the View hierarchy and need to be placed
- // relative to the Widget that is their parent.
- static void ConvertPointToWidget(const View* src, gfx::Point* point);
-
- // Convert a point from a view Widget to a View dest
- static void ConvertPointFromWidget(const View* dest, gfx::Point* p);
-
- // Convert a point from the coordinate system of a View to that of the
- // screen. This is useful for example when placing popup windows.
- static void ConvertPointToScreen(const View* src, gfx::Point* point);
-
- // Event Handlers
-
- // This method is invoked when the user clicks on this view.
- // The provided event is in the receiver's coordinate system.
- //
- // Return true if you processed the event and want to receive subsequent
- // MouseDraggged and MouseReleased events. This also stops the event from
- // bubbling. If you return false, the event will bubble through parent
- // views.
- //
- // If you remove yourself from the tree while processing this, event bubbling
- // stops as if you returned true, but you will not receive future events.
- // The return value is ignored in this case.
- //
- // Default implementation returns true if a ContextMenuController has been
- // set, false otherwise. Override as needed.
- //
- virtual bool OnMousePressed(const MouseEvent& event);
-
- // This method is invoked when the user clicked on this control.
- // and is still moving the mouse with a button pressed.
- // The provided event is in the receiver's coordinate system.
- //
- // Return true if you processed the event and want to receive
- // subsequent MouseDragged and MouseReleased events.
- //
- // Default implementation returns true if a ContextMenuController has been
- // set, false otherwise. Override as needed.
- //
- virtual bool OnMouseDragged(const MouseEvent& event);
-
- // This method is invoked when the user releases the mouse
- // button. The event is in the receiver's coordinate system.
- //
- // If canceled is true it indicates the mouse press/drag was canceled by a
- // system/user gesture.
- //
- // Default implementation notifies the ContextMenuController is appropriate.
- // Subclasses that wish to honor the ContextMenuController should invoke
- // super.
- virtual void OnMouseReleased(const MouseEvent& event, bool canceled);
-
- // This method is invoked when the mouse is above this control
- // The event is in the receiver's coordinate system.
- //
- // Default implementation does nothing. Override as needed.
- virtual void OnMouseMoved(const MouseEvent& e);
-
- // This method is invoked when the mouse enters this control.
- //
- // Default implementation does nothing. Override as needed.
- virtual void OnMouseEntered(const MouseEvent& event);
-
- // This method is invoked when the mouse exits this control
- // The provided event location is always (0, 0)
- // Default implementation does nothing. Override as needed.
- virtual void OnMouseExited(const MouseEvent& event);
-
- // Set the MouseHandler for a drag session.
- //
- // A drag session is a stream of mouse events starting
- // with a MousePressed event, followed by several MouseDragged
- // events and finishing with a MouseReleased event.
- //
- // This method should be only invoked while processing a
- // MouseDragged or MouseReleased event.
- //
- // All further mouse dragged and mouse up events will be sent
- // the MouseHandler, even if it is reparented to another window.
- //
- // The MouseHandler is automatically cleared when the control
- // comes back from processing the MouseReleased event.
- //
- // Note: if the mouse handler is no longer connected to a
- // view hierarchy, events won't be sent.
- //
- virtual void SetMouseHandler(View* new_mouse_handler);
-
- // Request the keyboard focus. The receiving view will become the
- // focused view.
- virtual void RequestFocus();
-
- // Invoked when a view is about to gain focus
- virtual void WillGainFocus();
-
- // Invoked when a view just gained focus.
- virtual void DidGainFocus();
-
- // Invoked when a view is about lose focus
- virtual void WillLoseFocus();
-
- // Invoked when a view is about to be requested for focus due to the focus
- // traversal. Reverse is this request was generated going backward
- // (Shift-Tab).
- virtual void AboutToRequestFocusFromTabTraversal(bool reverse) { }
-
- // Invoked when a key is pressed or released.
- // Subclasser should return true if the event has been processed and false
- // otherwise. If the event has not been processed, the parent will be given a
- // chance.
- virtual bool OnKeyPressed(const KeyEvent& e);
- virtual bool OnKeyReleased(const KeyEvent& e);
-
- // Whether the view wants to receive Tab and Shift-Tab key events.
- // If false, Tab and Shift-Tabs key events are used for focus traversal and
- // are not sent to the view. If true, the events are sent to the view and not
- // used for focus traversal.
- // This implementation returns false (so that by default views handle nicely
- // the keyboard focus traversal).
- virtual bool CanProcessTabKeyEvents();
-
- // Invoked when the user uses the mousewheel. Implementors should return true
- // if the event has been processed and false otherwise. This message is sent
- // if the view is focused. If the event has not been processed, the parent
- // will be given a chance.
- virtual bool OnMouseWheel(const MouseWheelEvent& e);
-
- // Drag and drop functions.
-
- // Set/get the DragController. See description of DragController for more
- // information.
- void SetDragController(DragController* drag_controller);
- DragController* GetDragController();
-
- // During a drag and drop session when the mouse moves the view under the
- // mouse is queried to see if it should be a target for the drag and drop
- // session. A view indicates it is a valid target by returning true from
- // CanDrop. If a view returns true from CanDrop,
- // OnDragEntered is sent to the view when the mouse first enters the view,
- // as the mouse moves around within the view OnDragUpdated is invoked.
- // If the user releases the mouse over the view and OnDragUpdated returns a
- // valid drop, then OnPerformDrop is invoked. If the mouse moves outside the
- // view or over another view that wants the drag, OnDragExited is invoked.
- //
- // Similar to mouse events, the deepest view under the mouse is first checked
- // if it supports the drop (Drop). If the deepest view under
- // the mouse does not support the drop, the ancestors are walked until one
- // is found that supports the drop.
-
- // A view that supports drag and drop must override this and return true if
- // data contains a type that may be dropped on this view.
- virtual bool CanDrop(const OSExchangeData& data);
-
- // OnDragEntered is invoked when the mouse enters this view during a drag and
- // drop session and CanDrop returns true. This is immediately
- // followed by an invocation of OnDragUpdated, and eventually one of
- // OnDragExited or OnPerformDrop.
- virtual void OnDragEntered(const DropTargetEvent& event);
-
- // Invoked during a drag and drop session while the mouse is over the view.
- // This should return a bitmask of the DragDropTypes::DragOperation supported
- // based on the location of the event. Return 0 to indicate the drop should
- // not be accepted.
- virtual int OnDragUpdated(const DropTargetEvent& event);
-
- // Invoked during a drag and drop session when the mouse exits the views, or
- // when the drag session was canceled and the mouse was over the view.
- virtual void OnDragExited();
-
- // Invoked during a drag and drop session when OnDragUpdated returns a valid
- // operation and the user release the mouse.
- virtual int OnPerformDrop(const DropTargetEvent& event);
-
- // Returns true if the mouse was dragged enough to start a drag operation.
- // delta_x and y are the distance the mouse was dragged.
- static bool ExceededDragThreshold(int delta_x, int delta_y);
-
- // This method is the main entry point to process paint for this
- // view and its children. This method is called by the painting
- // system. You should call this only if you want to draw a sub tree
- // inside a custom graphics.
- // To customize painting override either the Paint or PaintChildren method,
- // not this one.
- virtual void ProcessPaint(ChromeCanvas* canvas);
-
- // Paint the View's child Views, in reverse order.
- virtual void PaintChildren(ChromeCanvas* canvas);
-
- // Sets the ContextMenuController. Setting this to non-null makes the View
- // process mouse events.
- void SetContextMenuController(ContextMenuController* menu_controller);
- ContextMenuController* GetContextMenuController() {
- return context_menu_controller_;
- }
-
- // Provides default implementation for context menu handling. The default
- // implementation calls the ShowContextMenu of the current
- // ContextMenuController (if it is not NULL). Overridden in subclassed views
- // to provide right-click menu display triggerd by the keyboard (i.e. for the
- // Chrome toolbar Back and Forward buttons). No source needs to be specified,
- // as it is always equal to the current View.
- virtual void ShowContextMenu(int x,
- int y,
- bool is_mouse_gesture);
-
- // The background object is owned by this object and may be NULL.
- void set_background(Background* b) { background_.reset(b); }
- const Background* background() const { return background_.get(); }
-
- // The border object is owned by this object and may be NULL.
- void set_border(Border* b) { border_.reset(b); }
- const Border* border() const { return border_.get(); }
-
- // Returns the insets of the current border. If there is no border an empty
- // insets is returned.
- virtual gfx::Insets GetInsets() const;
-
-#if defined(OS_WIN)
- // TODO(port): Make GetCursorForPoint portable.
-
- // Return the cursor that should be used for this view or NULL if
- // the default cursor should be used. The provided point is in the
- // receiver's coordinate system.
- virtual HCURSOR GetCursorForPoint(Event::EventType event_type, int x, int y);
-#endif // defined(OS_WIN)
-
- // Convenience to test whether a point is within this view's bounds
- virtual bool HitTest(const gfx::Point& l) const;
-
- // Gets the tooltip for this View. If the View does not have a tooltip,
- // return false. If the View does have a tooltip, copy the tooltip into
- // the supplied string and return true.
- // Any time the tooltip text that a View is displaying changes, it must
- // invoke TooltipTextChanged.
- // The x/y provide the coordinates of the mouse (relative to this view).
- virtual bool GetTooltipText(int x, int y, std::wstring* tooltip);
-
- // Returns the location (relative to this View) for the text on the tooltip
- // to display. If false is returned (the default), the tooltip is placed at
- // a default position.
- virtual bool GetTooltipTextOrigin(int x, int y, gfx::Point* loc);
-
- // Set whether this view is owned by its parent. A view that is owned by its
- // parent is automatically deleted when the parent is deleted. The default is
- // true. Set to false if the view is owned by another object and should not
- // be deleted by its parent.
- void SetParentOwned(bool f);
-
- // Return whether a view is owned by its parent. See SetParentOwned()
- bool IsParentOwned() const;
-
- // Return the receiving view's class name. A view class is a string which
- // uniquely identifies the view class. It is intended to be used as a way to
- // find out during run time if a view can be safely casted to a specific view
- // subclass. The default implementation returns kViewClassName.
- virtual std::string GetClassName() const;
-
- // Returns the first ancestor, starting at this, whose class name is |name|.
- // Returns null if no ancestor has the class name |name|.
- View* GetAncestorWithClassName(const std::string& name);
-
- // Returns the visible bounds of the receiver in the receivers coordinate
- // system.
- //
- // When traversing the View hierarchy in order to compute the bounds, the
- // function takes into account the mirroring setting for each View and
- // therefore it will return the mirrored version of the visible bounds if
- // need be.
- gfx::Rect GetVisibleBounds();
-
- // Subclasses that contain traversable children that are not directly
- // accessible through the children hierarchy should return the associated
- // FocusTraversable for the focus traversal to work properly.
- virtual FocusTraversable* GetFocusTraversable() { return NULL; }
-
-#ifndef NDEBUG
- // Debug method that logs the view hierarchy to the output.
- void PrintViewHierarchy();
-
- // Debug method that logs the focus traversal hierarchy to the output.
- void PrintFocusHierarchy();
-#endif
-
- // The following methods are used by ScrollView to determine the amount
- // to scroll relative to the visible bounds of the view. For example, a
- // return value of 10 indicates the scrollview should scroll 10 pixels in
- // the appropriate direction.
- //
- // Each method takes the following parameters:
- //
- // is_horizontal: if true, scrolling is along the horizontal axis, otherwise
- // the vertical axis.
- // is_positive: if true, scrolling is by a positive amount. Along the
- // vertical axis scrolling by a positive amount equates to
- // scrolling down.
- //
- // The return value should always be positive and gives the number of pixels
- // to scroll. ScrollView interprets a return value of 0 (or negative)
- // to scroll by a default amount.
- //
- // See VariableRowHeightScrollHelper and FixedRowHeightScrollHelper for
- // implementations of common cases.
- virtual int GetPageScrollIncrement(ScrollView* scroll_view,
- bool is_horizontal, bool is_positive);
- virtual int GetLineScrollIncrement(ScrollView* scroll_view,
- bool is_horizontal, bool is_positive);
-
- protected:
- // The id of this View. Used to find this View.
- int id_;
-
- // The group of this view. Some view subclasses use this id to find other
- // views of the same group. For example radio button uses this information
- // to find other radio buttons.
- int group_;
-
- // Called when the UI theme has changed, overriding allows individual Views to
- // do special cleanup and processing (such as dropping resource caches).
- // Subclasses that override this method must call the base class
- // implementation to ensure child views are processed.
- // Can only be called by subclasses. To dispatch a theme changed notification,
- // call this method on the RootView.
- virtual void ThemeChanged();
-
-#ifndef NDEBUG
- // Returns true if the View is currently processing a paint.
- virtual bool IsProcessingPaint() const;
-#endif
-
- // Returns the location, in screen coordinates, to show the context menu at
- // when the context menu is shown from the keyboard. This implementation
- // returns the middle of the visible region of this view.
- //
- // This method is invoked when the context menu is shown by way of the
- // keyboard.
- virtual gfx::Point GetKeyboardContextMenuLocation();
-
- // Called by HitTest to see if this View has a custom hit test mask. If the
- // return value is true, GetHitTestMask will be called to obtain the mask.
- // Default value is false, in which case the View will hit-test against its
- // bounds.
- virtual bool HasHitTestMask() const;
-
- // Called by HitTest to retrieve a mask for hit-testing against. Subclasses
- // override to provide custom shaped hit test regions.
- virtual void GetHitTestMask(gfx::Path* mask) const;
-
- // This method is invoked when the tree changes.
- //
- // When a view is removed, it is invoked for all children and grand
- // children. For each of these views, a notification is sent to the
- // view and all parents.
- //
- // When a view is added, a notification is sent to the view, all its
- // parents, and all its children (and grand children)
- //
- // Default implementation does nothing. Override to perform operations
- // required when a view is added or removed from a view hierarchy
- //
- // parent is the new or old parent. Child is the view being added or
- // removed.
- //
- virtual void ViewHierarchyChanged(bool is_add, View* parent, View* child);
-
- // When SetVisible() changes the visibility of a view, this method is
- // invoked for that view as well as all the children recursively.
- virtual void VisibilityChanged(View* starting_from, bool is_visible);
-
- // Views must invoke this when the tooltip text they are to display changes.
- void TooltipTextChanged();
-
- // Actual implementation of GetViewForPoint.
- virtual View* GetViewForPoint(const gfx::Point& point,
- bool can_create_floating);
-
- // Sets whether this view wants notification when its visible bounds relative
- // to the root view changes. If true, this view is notified any time the
- // origin of one its ancestors changes, or the portion of the bounds not
- // obscured by ancestors changes. The default is false.
- void SetNotifyWhenVisibleBoundsInRootChanges(bool value);
- bool GetNotifyWhenVisibleBoundsInRootChanges();
-
- // Notification that this views visible bounds, relative to the RootView
- // has changed. The visible bounds corresponds to the region of the
- // view not obscured by other ancestors.
- virtual void VisibleBoundsInRootChanged() {}
-
- // Sets the keyboard focus to this View. The correct way to set the focus is
- // to call RequestFocus() on the view. This method is called when the focus is
- // set and gives an opportunity to subclasses to perform any extra focus steps
- // (for example native component set the native focus on their native
- // component). The default behavior is to set the native focus on the root
- // Widget, which is what is appropriate for views that have no native window
- // associated with them (so the root view gets the keyboard messages).
- virtual void Focus();
-
- // Invoked when a key is pressed before the key event is processed by the
- // focus manager for accelerators. This gives a chance to the view to
- // override an accelerator. Subclasser should return false if they want to
- // process the key event and not have it translated to an accelerator (if
- // any). In that case, OnKeyPressed will subsequently be invoked for that
- // event.
- virtual bool ShouldLookupAccelerators(const KeyEvent& e) { return true; }
-
- // A convenience method for derived classes which have floating views with IDs
- // that are consecutive numbers in an interval [|low_bound|, |high_bound|[.
- // They can call this method in their EnumerateFloatingViews implementation.
- // If |ascending_order| is true, the first id is |low_bound|, the next after
- // id n is n + 1, and so on. If |ascending_order| is false, the order is
- // reversed, first id is |high_bound|, the next id after id n is n -1...
- static bool EnumerateFloatingViewsForInterval(int low_bound, int high_bound,
- bool ascending_order,
- FloatingViewPosition position,
- int starting_id,
- int* id);
-
- // These are cover methods that invoke the method of the same name on
- // the DragController. Subclasses may wish to override rather than install
- // a DragController.
- // See DragController for a description of these methods.
- virtual int GetDragOperations(int press_x, int press_y);
- virtual void WriteDragData(int press_x, int press_y, OSExchangeData* data);
-
- // Invoked from DoDrag after the drag completes. This implementation does
- // nothing, and is intended for subclasses to do cleanup.
- virtual void OnDragDone();
-
- // Returns whether we're in the middle of a drag session that was initiated
- // by us.
- bool InDrag();
-
- // Whether this view is enabled.
- bool enabled_;
-
- // Whether the view can be focused.
- bool focusable_;
-
- private:
- friend class RootView;
- friend class FocusManager;
- friend class ViewStorage;
-
- // Used to track a drag. RootView passes this into
- // ProcessMousePressed/Dragged.
- struct DragInfo {
- // Sets possible_drag to false and start_x/y to 0. This is invoked by
- // RootView prior to invoke ProcessMousePressed.
- void Reset();
-
- // Sets possible_drag to true and start_x/y to the specified coordinates.
- // This is invoked by the target view if it detects the press may generate
- // a drag.
- void PossibleDrag(int x, int y);
-
- // Whether the press may generate a drag.
- bool possible_drag;
-
- // Coordinates of the mouse press.
- int start_x;
- int start_y;
- };
-
- // Returns how much the mouse needs to move in one direction to start a
- // drag. These methods cache in a platform-appropriate way. These values are
- // used by the public static method ExceededDragThreshold().
- static int GetHorizontalDragThreshold();
- static int GetVerticalDragThreshold();
-
- // RootView invokes these. These in turn invoke the appropriate OnMouseXXX
- // method. If a drag is detected, DoDrag is invoked.
- bool ProcessMousePressed(const MouseEvent& e, DragInfo* drop_info);
- bool ProcessMouseDragged(const MouseEvent& e, DragInfo* drop_info);
- void ProcessMouseReleased(const MouseEvent& e, bool canceled);
-
- // Starts a drag and drop operation originating from this view. This invokes
- // WriteDragData to write the data and GetDragOperations to determine the
- // supported drag operations. When done, OnDragDone is invoked.
- void DoDrag(const MouseEvent& e, int press_x, int press_y);
-
- // Adds a child View at the specified position. |floating_view| should be true
- // if the |v| is a floating view.
- void AddChildView(int index, View* v, bool floating_view);
-
- // Removes |view| from the hierarchy tree. If |update_focus_cycle| is true,
- // the next and previous focusable views of views pointing to this view are
- // updated. If |update_tool_tip| is true, the tooltip is updated. If
- // |delete_removed_view| is true, the view is also deleted (if it is parent
- // owned).
- void DoRemoveChildView(View* view,
- bool update_focus_cycle,
- bool update_tool_tip,
- bool delete_removed_view);
-
- // Sets the parent View. This is called automatically by AddChild and is
- // thus private.
- void SetParent(View *parent);
-
- // Call ViewHierarchyChanged for all child views on all parents
- void PropagateRemoveNotifications(View* parent);
-
- // Call ViewHierarchyChanged for all children
- void PropagateAddNotifications(View* parent, View* child);
-
- // Call VisibilityChanged() recursively for all children.
- void PropagateVisibilityNotifications(View* from, bool is_visible);
-
- // Takes care of registering/unregistering accelerators if
- // |register_accelerators| true and calls ViewHierarchyChanged().
- void ViewHierarchyChangedImpl(bool register_accelerators,
- bool is_add,
- View* parent,
- View* child);
-
- // This is the actual implementation for ConvertPointToView()
- // Attempts a parent -> child conversion and then a
- // child -> parent conversion if try_other_direction is true
- static void ConvertPointToView(const View* src,
- const View* dst,
- gfx::Point* point,
- bool try_other_direction);
-
- // Propagates UpdateTooltip() to the TooltipManager for the Widget.
- // This must be invoked any time the View hierarchy changes in such a way
- // the view under the mouse differs. For example, if the bounds of a View is
- // changed, this is invoked. Similarly, as Views are added/removed, this
- // is invoked.
- void UpdateTooltip();
-
- // Recursively descends through all descendant views,
- // registering/unregistering all views that want visible bounds in root
- // view notification.
- static void RegisterChildrenForVisibleBoundsNotification(RootView* root,
- View* view);
- static void UnregisterChildrenForVisibleBoundsNotification(RootView* root,
- View* view);
-
- // Adds/removes view to the list of descendants that are notified any time
- // this views location and possibly size are changed.
- void AddDescendantToNotify(View* view);
- void RemoveDescendantToNotify(View* view);
-
- // Initialize the previous/next focusable views of the specified view relative
- // to the view at the specified index.
- void InitFocusSiblings(View* view, int index);
-
- // Actual implementation of PrintFocusHierarchy.
- void PrintViewHierarchyImp(int indent);
- void PrintFocusHierarchyImp(int indent);
-
- // Registers/unregister this view's keyboard accelerators with the
- // FocusManager.
- void RegisterAccelerators();
- void UnregisterAccelerators();
-
- // Returns the number of children that are actually attached floating views.
- int GetFloatingViewCount() const;
-
- // Returns the id for this floating view.
- int GetFloatingViewID();
-
- // Returns whether this view is a floating view.
- bool IsFloatingView();
-
- // Sets in |path| the path in the view hierarchy from |start| to |end| (the
- // path is the list of indexes in each view's children to get from |start|
- // to |end|).
- // Returns true if |start| and |view| are connected and the |path| has been
- // retrieved succesfully, false otherwise.
- static bool GetViewPath(View* start, View* end, std::vector<int>* path);
-
- // Returns the view at the end of the specified |path|, starting at the
- // |start| view.
- static View* GetViewForPath(View* start, const std::vector<int>& path);
-
- // This View's bounds in the parent coordinate system.
- gfx::Rect bounds_;
-
- // This view's parent
- View *parent_;
-
- // This view's children.
- typedef std::vector<View*> ViewList;
- ViewList child_views_;
-
- // List of floating children. A floating view is always referenced by
- // child_views_ and will be deleted on destruction just like any other
- // child view.
- ViewList floating_views_;
-
- // Maps a floating view to its floating view id.
- std::map<View*, int> floating_views_ids_;
-
- // Whether we want the focus to be restored. This is used to store/restore
- // focus for floating views.
- bool should_restore_focus_;
-
- // The View's LayoutManager defines the sizing heuristics applied to child
- // Views. The default is absolute positioning according to bounds_.
- scoped_ptr<LayoutManager> layout_manager_;
-
- // Visible state
- bool is_visible_;
-
- // Background
- scoped_ptr<Background> background_;
-
- // Border.
- scoped_ptr<Border> border_;
-
- // Whether this view is owned by its parent.
- bool is_parent_owned_;
-
- // See SetNotifyWhenVisibleBoundsInRootChanges.
- bool notify_when_visible_bounds_in_root_changes_;
-
- // Whether or not RegisterViewForVisibleBoundsNotification on the RootView
- // has been invoked.
- bool registered_for_visible_bounds_notification_;
-
- // List of descendants wanting notification when their visible bounds change.
- scoped_ptr<ViewList> descendants_to_notify_;
-
- // Next view to be focused when the Tab key is pressed.
- View* next_focusable_view_;
-
- // Next view to be focused when the Shift-Tab key combination is pressed.
- View* previous_focusable_view_;
-
- // The list of accelerators.
- scoped_ptr<std::vector<Accelerator> > accelerators_;
-
- // The task used to restore automatically the focus to the last focused
- // floating view.
- RestoreFocusTask* restore_focus_view_task_;
-
- // The menu controller.
- ContextMenuController* context_menu_controller_;
-
-#if defined(OS_WIN)
- // The accessibility implementation for this View.
- scoped_ptr<ViewAccessibilityWrapper> accessibility_;
-#endif
-
- DragController* drag_controller_;
-
- // Indicates whether or not the view is going to be mirrored (that is, use a
- // right-to-left UI layout) if the locale's language is a right-to-left
- // language like Arabic or Hebrew.
- bool ui_mirroring_is_enabled_for_rtl_languages_;
-
- // Indicates whether or not the ChromeCanvas object passed to View::Paint()
- // is going to be flipped horizontally (using the appropriate transform) on
- // right-to-left locales for this View.
- bool flip_canvas_on_paint_for_rtl_ui_;
-
- DISALLOW_COPY_AND_ASSIGN(View);
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_VIEW_H_
diff --git a/chrome/views/view_constants.cc b/chrome/views/view_constants.cc
deleted file mode 100644
index 84b7452..0000000
--- a/chrome/views/view_constants.cc
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/view_constants.h"
-
-namespace views {
-
-const int kAutoscrollSize = 10;
-const int kAutoscrollRowTimerMS = 200;
-const int kDropBetweenPixels = 5;
-
-} // namespace views
diff --git a/chrome/views/view_constants.h b/chrome/views/view_constants.h
deleted file mode 100644
index a8e9fd2..0000000
--- a/chrome/views/view_constants.h
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_VIEW_CONSTANTS_H_
-#define CHROME_VIEWS_VIEW_CONSTANTS_H_
-
-namespace views {
-
-// Size (width or height) within which the user can hold the mouse and the
-// view should scroll.
-extern const int kAutoscrollSize;
-
-// Time in milliseconds to autoscroll by a row. This is used during drag and
-// drop.
-extern const int kAutoscrollRowTimerMS;
-
-// Used to determine whether a drop is on an item or before/after it. If a drop
-// occurs kDropBetweenPixels from the top/bottom it is considered before/after
-// the item, otherwise it is on the item.
-extern const int kDropBetweenPixels;
-
-} // namespace views
-
-#endif // CHROME_VIEWS_VIEW_CONSTANTS_H_
diff --git a/chrome/views/view_gtk.cc b/chrome/views/view_gtk.cc
deleted file mode 100644
index 701001a..0000000
--- a/chrome/views/view_gtk.cc
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/view.h"
-
-#include "base/logging.h"
-
-namespace views {
-
-FocusManager* View::GetFocusManager() {
- NOTIMPLEMENTED();
- return NULL;
-}
-
-void View::DoDrag(const MouseEvent& e, int press_x, int press_y) {
- NOTIMPLEMENTED();
-}
-
-ViewAccessibilityWrapper* View::GetViewAccessibilityWrapper() {
- NOTIMPLEMENTED();
- return NULL;
-}
-
-bool View::HitTest(const gfx::Point& l) const {
- if (l.x() >= 0 && l.x() < static_cast<int>(width()) &&
- l.y() >= 0 && l.y() < static_cast<int>(height())) {
- if (HasHitTestMask()) {
- // TODO(port): port the windows hit test code here. Once that's factored
- // out, we can probably move View::HitTest back into views.cc.
- NOTIMPLEMENTED();
- }
- // No mask, but inside our bounds.
- return true;
- }
- // Outside our bounds.
- return false;
-}
-
-void View::Focus() {
- NOTIMPLEMENTED();
-}
-
-int View::GetHorizontalDragThreshold() {
- static int threshold = -1;
- NOTIMPLEMENTED();
- return threshold;
-}
-
-int View::GetVerticalDragThreshold() {
- static int threshold = -1;
- NOTIMPLEMENTED();
- return threshold;
-}
-
-} // namespace views
diff --git a/chrome/views/view_unittest.cc b/chrome/views/view_unittest.cc
deleted file mode 100644
index b8cac1f..0000000
--- a/chrome/views/view_unittest.cc
+++ /dev/null
@@ -1,1009 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "app/gfx/chrome_canvas.h"
-#include "app/gfx/path.h"
-#include "base/clipboard.h"
-#include "base/message_loop.h"
-#include "chrome/browser/browser_process.h"
-#include "chrome/common/notification_service.h"
-#include "chrome/views/background.h"
-#include "chrome/views/controls/button/checkbox.h"
-#if defined(OS_WIN)
-#include "chrome/views/controls/button/native_button_win.h"
-#endif
-#include "chrome/views/controls/scroll_view.h"
-#include "chrome/views/controls/text_field.h"
-#include "chrome/views/event.h"
-#include "chrome/views/focus/view_storage.h"
-#include "chrome/views/view.h"
-#include "chrome/views/widget/root_view.h"
-#include "chrome/views/widget/widget_win.h"
-#include "chrome/views/window/dialog_delegate.h"
-#include "chrome/views/window/window.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-using namespace views;
-
-namespace {
-
-class ViewTest : public testing::Test {
- public:
- ViewTest() {
- OleInitialize(NULL);
- }
-
- ~ViewTest() {
- OleUninitialize();
- }
-
- private:
- MessageLoopForUI message_loop_;
-};
-
-// Paints the RootView.
-void PaintRootView(views::RootView* root, bool empty_paint) {
- if (!empty_paint) {
- root->PaintNow();
- } else {
- // User isn't logged in, so that PaintNow will generate an empty rectangle.
- // Invoke paint directly.
- gfx::Rect paint_rect = root->GetScheduledPaintRect();
- ChromeCanvas canvas(paint_rect.width(), paint_rect.height(), true);
- canvas.TranslateInt(-paint_rect.x(), -paint_rect.y());
- canvas.ClipRectInt(0, 0, paint_rect.width(), paint_rect.height());
- root->ProcessPaint(&canvas);
- }
-}
-
-/*
-typedef CWinTraits<WS_VISIBLE|WS_CLIPCHILDREN|WS_CLIPSIBLINGS> CVTWTraits;
-
-// A trivial window implementation that tracks whether or not it has been
-// painted. This is used by the painting test to determine if paint will result
-// in an empty region.
-class EmptyWindow : public CWindowImpl<EmptyWindow,
- CWindow,
- CVTWTraits> {
- public:
- DECLARE_FRAME_WND_CLASS(L"Chrome_ChromeViewsEmptyWindow", 0)
-
- BEGIN_MSG_MAP_EX(EmptyWindow)
- MSG_WM_PAINT(OnPaint)
- END_MSG_MAP()
-
- EmptyWindow::EmptyWindow(const CRect& bounds) : empty_paint_(false) {
- Create(NULL, static_cast<RECT>(bounds));
- ShowWindow(SW_SHOW);
- }
-
- EmptyWindow::~EmptyWindow() {
- ShowWindow(SW_HIDE);
- DestroyWindow();
- }
-
- void EmptyWindow::OnPaint(HDC dc) {
- PAINTSTRUCT ps;
- HDC paint_dc = BeginPaint(&ps);
- if (!empty_paint_ && (ps.rcPaint.top - ps.rcPaint.bottom) == 0 &&
- (ps.rcPaint.right - ps.rcPaint.left) == 0) {
- empty_paint_ = true;
- }
- EndPaint(&ps);
- }
-
- bool empty_paint() {
- return empty_paint_;
- }
-
- private:
- bool empty_paint_;
-
- DISALLOW_EVIL_CONSTRUCTORS(EmptyWindow);
-};
-*/
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// A view subclass for testing purpose
-//
-////////////////////////////////////////////////////////////////////////////////
-class TestView : public View {
- public:
- TestView() : View(){
- }
-
- virtual ~TestView() {}
-
- // Reset all test state
- void Reset() {
- did_change_bounds_ = false;
- child_added_ = false;
- child_removed_ = false;
- last_mouse_event_type_ = 0;
- location_.x = 0;
- location_.y = 0;
- last_clip_.setEmpty();
- }
-
- virtual void DidChangeBounds(const gfx::Rect& previous,
- const gfx::Rect& current);
- virtual void ViewHierarchyChanged(bool is_add, View *parent, View *child);
- virtual bool OnMousePressed(const MouseEvent& event);
- virtual bool OnMouseDragged(const MouseEvent& event);
- virtual void OnMouseReleased(const MouseEvent& event, bool canceled);
- virtual void Paint(ChromeCanvas* canvas);
-
- // DidChangeBounds test
- bool did_change_bounds_;
- gfx::Rect previous_bounds_;
- gfx::Rect new_bounds_;
-
- // AddRemoveNotifications test
- bool child_added_;
- bool child_removed_;
- View* parent_;
- View* child_;
-
- // MouseEvent
- int last_mouse_event_type_;
- CPoint location_;
-
- // Painting
- SkRect last_clip_;
-};
-
-////////////////////////////////////////////////////////////////////////////////
-// DidChangeBounds
-////////////////////////////////////////////////////////////////////////////////
-
-void TestView::DidChangeBounds(const gfx::Rect& previous,
- const gfx::Rect& current) {
- did_change_bounds_ = true;
- previous_bounds_ = previous;
- new_bounds_ = current;
-}
-
-TEST_F(ViewTest, DidChangeBounds) {
- TestView* v = new TestView();
-
- gfx::Rect prev_rect(0, 0, 200, 200);
- gfx::Rect new_rect(100, 100, 250, 250);
-
- v->SetBounds(prev_rect);
- v->Reset();
-
- v->SetBounds(new_rect);
- EXPECT_EQ(v->did_change_bounds_, true);
- EXPECT_EQ(v->previous_bounds_, prev_rect);
- EXPECT_EQ(v->new_bounds_, new_rect);
-
- EXPECT_EQ(v->bounds(), gfx::Rect(new_rect));
- delete v;
-}
-
-
-////////////////////////////////////////////////////////////////////////////////
-// AddRemoveNotifications
-////////////////////////////////////////////////////////////////////////////////
-
-void TestView::ViewHierarchyChanged(bool is_add, View *parent, View *child) {
- if (is_add) {
- child_added_ = true;
- } else {
- child_removed_ = true;
- }
- parent_ = parent;
- child_ = child;
-}
-
-}
-
-TEST_F(ViewTest, AddRemoveNotifications) {
- TestView* v1 = new TestView();
- v1->SetBounds(0, 0, 300, 300);
-
- TestView* v2 = new TestView();
- v2->SetBounds(0, 0, 300, 300);
-
- TestView* v3 = new TestView();
- v3->SetBounds(0, 0, 300, 300);
-
- // Add a child. Make sure both v2 and v3 receive the right
- // notification
- v2->Reset();
- v3->Reset();
- v2->AddChildView(v3);
- EXPECT_EQ(v2->child_added_, true);
- EXPECT_EQ(v2->parent_, v2);
- EXPECT_EQ(v2->child_, v3);
-
- EXPECT_EQ(v3->child_added_, true);
- EXPECT_EQ(v3->parent_, v2);
- EXPECT_EQ(v3->child_, v3);
-
- // Add v2 and transitively v3 to v1. Make sure that all views
- // received the right notification
-
- v1->Reset();
- v2->Reset();
- v3->Reset();
- v1->AddChildView(v2);
-
- EXPECT_EQ(v1->child_added_, true);
- EXPECT_EQ(v1->child_, v2);
- EXPECT_EQ(v1->parent_, v1);
-
- EXPECT_EQ(v2->child_added_, true);
- EXPECT_EQ(v2->child_, v2);
- EXPECT_EQ(v2->parent_, v1);
-
- EXPECT_EQ(v3->child_added_, true);
- EXPECT_EQ(v3->child_, v2);
- EXPECT_EQ(v3->parent_, v1);
-
- // Remove v2. Make sure all views received the right notification
- v1->Reset();
- v2->Reset();
- v3->Reset();
- v1->RemoveChildView(v2);
-
- EXPECT_EQ(v1->child_removed_, true);
- EXPECT_EQ(v1->parent_, v1);
- EXPECT_EQ(v1->child_, v2);
-
- EXPECT_EQ(v2->child_removed_, true);
- EXPECT_EQ(v2->parent_, v1);
- EXPECT_EQ(v2->child_, v2);
-
- EXPECT_EQ(v3->child_removed_, true);
- EXPECT_EQ(v3->parent_, v1);
- EXPECT_EQ(v3->child_, v3);
-
- // Clean-up
- delete v1;
- delete v2; // This also deletes v3 (child of v2).
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// MouseEvent
-////////////////////////////////////////////////////////////////////////////////
-
-bool TestView::OnMousePressed(const MouseEvent& event) {
- last_mouse_event_type_ = event.GetType();
- location_.x = event.x();
- location_.y = event.y();
- return true;
-}
-
-bool TestView::OnMouseDragged(const MouseEvent& event) {
- last_mouse_event_type_ = event.GetType();
- location_.x = event.x();
- location_.y = event.y();
- return true;
-}
-
-void TestView::OnMouseReleased(const MouseEvent& event, bool canceled) {
- last_mouse_event_type_ = event.GetType();
- location_.x = event.x();
- location_.y = event.y();
-}
-
-TEST_F(ViewTest, MouseEvent) {
- TestView* v1 = new TestView();
- v1->SetBounds(0, 0, 300, 300);
-
- TestView* v2 = new TestView();
- v2->SetBounds (100, 100, 100, 100);
-
- views::WidgetWin window;
- window.set_delete_on_destroy(false);
- window.set_window_style(WS_OVERLAPPEDWINDOW);
- window.Init(NULL, gfx::Rect(50, 50, 650, 650), false);
- RootView* root = window.GetRootView();
-
- root->AddChildView(v1);
- v1->AddChildView(v2);
-
- v1->Reset();
- v2->Reset();
-
- MouseEvent pressed(Event::ET_MOUSE_PRESSED,
- 110,
- 120,
- Event::EF_LEFT_BUTTON_DOWN);
- root->OnMousePressed(pressed);
- EXPECT_EQ(v2->last_mouse_event_type_, Event::ET_MOUSE_PRESSED);
- EXPECT_EQ(v2->location_.x, 10);
- EXPECT_EQ(v2->location_.y, 20);
- // Make sure v1 did not receive the event
- EXPECT_EQ(v1->last_mouse_event_type_, 0);
-
- // Drag event out of bounds. Should still go to v2
- v1->Reset();
- v2->Reset();
- MouseEvent dragged(Event::ET_MOUSE_DRAGGED,
- 50,
- 40,
- Event::EF_LEFT_BUTTON_DOWN);
- root->OnMouseDragged(dragged);
- EXPECT_EQ(v2->last_mouse_event_type_, Event::ET_MOUSE_DRAGGED);
- EXPECT_EQ(v2->location_.x, -50);
- EXPECT_EQ(v2->location_.y, -60);
- // Make sure v1 did not receive the event
- EXPECT_EQ(v1->last_mouse_event_type_, 0);
-
- // Releasted event out of bounds. Should still go to v2
- v1->Reset();
- v2->Reset();
- MouseEvent released(Event::ET_MOUSE_RELEASED, 0, 0, 0);
- root->OnMouseDragged(released);
- EXPECT_EQ(v2->last_mouse_event_type_, Event::ET_MOUSE_RELEASED);
- EXPECT_EQ(v2->location_.x, -100);
- EXPECT_EQ(v2->location_.y, -100);
- // Make sure v1 did not receive the event
- EXPECT_EQ(v1->last_mouse_event_type_, 0);
-
- window.CloseNow();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Painting
-////////////////////////////////////////////////////////////////////////////////
-
-void TestView::Paint(ChromeCanvas* canvas) {
- canvas->getClipBounds(&last_clip_);
-}
-
-void CheckRect(const SkRect& check_rect, const SkRect& target_rect) {
- EXPECT_EQ(target_rect.fLeft, check_rect.fLeft);
- EXPECT_EQ(target_rect.fRight, check_rect.fRight);
- EXPECT_EQ(target_rect.fTop, check_rect.fTop);
- EXPECT_EQ(target_rect.fBottom, check_rect.fBottom);
-}
-
-/* This test is disabled because it is flakey on some systems.
-TEST_F(ViewTest, DISABLED_Painting) {
- // Determine if InvalidateRect generates an empty paint rectangle.
- EmptyWindow paint_window(CRect(50, 50, 650, 650));
- paint_window.RedrawWindow(CRect(0, 0, 600, 600), NULL,
- RDW_UPDATENOW | RDW_INVALIDATE | RDW_ALLCHILDREN);
- bool empty_paint = paint_window.empty_paint();
-
- views::WidgetWin window;
- window.set_delete_on_destroy(false);
- window.set_window_style(WS_OVERLAPPEDWINDOW);
- window.Init(NULL, gfx::Rect(50, 50, 650, 650), NULL);
- RootView* root = window.GetRootView();
-
- TestView* v1 = new TestView();
- v1->SetBounds(0, 0, 650, 650);
- root->AddChildView(v1);
-
- TestView* v2 = new TestView();
- v2->SetBounds(10, 10, 80, 80);
- v1->AddChildView(v2);
-
- TestView* v3 = new TestView();
- v3->SetBounds(10, 10, 60, 60);
- v2->AddChildView(v3);
-
- TestView* v4 = new TestView();
- v4->SetBounds(10, 200, 100, 100);
- v1->AddChildView(v4);
-
- // Make sure to paint current rects
- PaintRootView(root, empty_paint);
-
-
- v1->Reset();
- v2->Reset();
- v3->Reset();
- v4->Reset();
- v3->SchedulePaint(10, 10, 10, 10);
- PaintRootView(root, empty_paint);
-
- SkRect tmp_rect;
-
- tmp_rect.set(SkIntToScalar(10),
- SkIntToScalar(10),
- SkIntToScalar(20),
- SkIntToScalar(20));
- CheckRect(v3->last_clip_, tmp_rect);
-
- tmp_rect.set(SkIntToScalar(20),
- SkIntToScalar(20),
- SkIntToScalar(30),
- SkIntToScalar(30));
- CheckRect(v2->last_clip_, tmp_rect);
-
- tmp_rect.set(SkIntToScalar(30),
- SkIntToScalar(30),
- SkIntToScalar(40),
- SkIntToScalar(40));
- CheckRect(v1->last_clip_, tmp_rect);
-
- // Make sure v4 was not painted
- tmp_rect.setEmpty();
- CheckRect(v4->last_clip_, tmp_rect);
-
- window.DestroyWindow();
-}
-*/
-
-TEST_F(ViewTest, RemoveNotification) {
- views::ViewStorage* vs = views::ViewStorage::GetSharedInstance();
- views::WidgetWin* window = new views::WidgetWin;
- views::RootView* root_view = window->GetRootView();
-
- View* v1 = new View;
- int s1 = vs->CreateStorageID();
- vs->StoreView(s1, v1);
- root_view->AddChildView(v1);
- View* v11 = new View;
- int s11 = vs->CreateStorageID();
- vs->StoreView(s11, v11);
- v1->AddChildView(v11);
- View* v111 = new View;
- int s111 = vs->CreateStorageID();
- vs->StoreView(s111, v111);
- v11->AddChildView(v111);
- View* v112 = new View;
- int s112 = vs->CreateStorageID();
- vs->StoreView(s112, v112);
- v11->AddChildView(v112);
- View* v113 = new View;
- int s113 = vs->CreateStorageID();
- vs->StoreView(s113, v113);
- v11->AddChildView(v113);
- View* v1131 = new View;
- int s1131 = vs->CreateStorageID();
- vs->StoreView(s1131, v1131);
- v113->AddChildView(v1131);
- View* v12 = new View;
- int s12 = vs->CreateStorageID();
- vs->StoreView(s12, v12);
- v1->AddChildView(v12);
-
- View* v2 = new View;
- int s2 = vs->CreateStorageID();
- vs->StoreView(s2, v2);
- root_view->AddChildView(v2);
- View* v21 = new View;
- int s21 = vs->CreateStorageID();
- vs->StoreView(s21, v21);
- v2->AddChildView(v21);
- View* v211 = new View;
- int s211 = vs->CreateStorageID();
- vs->StoreView(s211, v211);
- v21->AddChildView(v211);
-
- size_t stored_views = vs->view_count();
-
- // Try removing a leaf view.
- v21->RemoveChildView(v211);
- EXPECT_EQ(stored_views - 1, vs->view_count());
- EXPECT_EQ(NULL, vs->RetrieveView(s211));
- delete v211; // We won't use this one anymore.
-
- // Now try removing a view with a hierarchy of depth 1.
- v11->RemoveChildView(v113);
- EXPECT_EQ(stored_views - 3, vs->view_count());
- EXPECT_EQ(NULL, vs->RetrieveView(s113));
- EXPECT_EQ(NULL, vs->RetrieveView(s1131));
- delete v113; // We won't use this one anymore.
-
- // Now remove even more.
- root_view->RemoveChildView(v1);
- EXPECT_EQ(stored_views - 8, vs->view_count());
- EXPECT_EQ(NULL, vs->RetrieveView(s1));
- EXPECT_EQ(NULL, vs->RetrieveView(s11));
- EXPECT_EQ(NULL, vs->RetrieveView(s12));
- EXPECT_EQ(NULL, vs->RetrieveView(s111));
- EXPECT_EQ(NULL, vs->RetrieveView(s112));
-
- // Put v1 back for more tests.
- root_view->AddChildView(v1);
- vs->StoreView(s1, v1);
-
- // Now delete the root view (deleting the window will trigger a delete of the
- // RootView) and make sure we are notified that the views were removed.
- delete window;
- EXPECT_EQ(stored_views - 10, vs->view_count());
- EXPECT_EQ(NULL, vs->RetrieveView(s1));
- EXPECT_EQ(NULL, vs->RetrieveView(s12));
- EXPECT_EQ(NULL, vs->RetrieveView(s11));
- EXPECT_EQ(NULL, vs->RetrieveView(s12));
- EXPECT_EQ(NULL, vs->RetrieveView(s21));
- EXPECT_EQ(NULL, vs->RetrieveView(s111));
- EXPECT_EQ(NULL, vs->RetrieveView(s112));
-}
-
-namespace {
-class HitTestView : public views::View {
- public:
- explicit HitTestView(bool has_hittest_mask)
- : has_hittest_mask_(has_hittest_mask) {
- }
- virtual ~HitTestView() {}
-
- protected:
- // Overridden from views::View:
- virtual bool HasHitTestMask() const {
- return has_hittest_mask_;
- }
- virtual void GetHitTestMask(gfx::Path* mask) const {
- DCHECK(has_hittest_mask_);
- DCHECK(mask);
-
- SkScalar w = SkIntToScalar(width());
- SkScalar h = SkIntToScalar(height());
-
- // Create a triangular mask within the bounds of this View.
- mask->moveTo(w / 2, 0);
- mask->lineTo(w, h);
- mask->lineTo(0, h);
- mask->close();
- }
-
- private:
- bool has_hittest_mask_;
-
- DISALLOW_COPY_AND_ASSIGN(HitTestView);
-};
-
-gfx::Point ConvertPointToView(views::View* view, const gfx::Point& p) {
- gfx::Point tmp(p);
- views::View::ConvertPointToView(view->GetRootView(), view, &tmp);
- return tmp;
-}
-}
-
-TEST_F(ViewTest, HitTestMasks) {
- views::WidgetWin window;
- views::RootView* root_view = window.GetRootView();
- root_view->SetBounds(0, 0, 500, 500);
-
- gfx::Rect v1_bounds = gfx::Rect(0, 0, 100, 100);
- HitTestView* v1 = new HitTestView(false);
- v1->SetBounds(v1_bounds);
- root_view->AddChildView(v1);
-
- gfx::Rect v2_bounds = gfx::Rect(105, 0, 100, 100);
- HitTestView* v2 = new HitTestView(true);
- v2->SetBounds(v2_bounds);
- root_view->AddChildView(v2);
-
- gfx::Point v1_centerpoint = v1_bounds.CenterPoint();
- gfx::Point v2_centerpoint = v2_bounds.CenterPoint();
- gfx::Point v1_origin = v1_bounds.origin();
- gfx::Point v2_origin = v2_bounds.origin();
-
- // Test HitTest
- EXPECT_EQ(true, v1->HitTest(ConvertPointToView(v1, v1_centerpoint)));
- EXPECT_EQ(true, v2->HitTest(ConvertPointToView(v2, v2_centerpoint)));
-
- EXPECT_EQ(true, v1->HitTest(ConvertPointToView(v1, v1_origin)));
- EXPECT_EQ(false, v2->HitTest(ConvertPointToView(v2, v2_origin)));
-
- // Test GetViewForPoint
- EXPECT_EQ(v1, root_view->GetViewForPoint(v1_centerpoint));
- EXPECT_EQ(v2, root_view->GetViewForPoint(v2_centerpoint));
- EXPECT_EQ(v1, root_view->GetViewForPoint(v1_origin));
- EXPECT_EQ(root_view, root_view->GetViewForPoint(v2_origin));
-}
-
-#if defined(OS_WIN)
-// Tests that the TextField view respond appropiately to cut/copy/paste.
-TEST_F(ViewTest, TextFieldCutCopyPaste) {
- const std::wstring kNormalText = L"Normal";
- const std::wstring kReadOnlyText = L"Read only";
- const std::wstring kPasswordText = L"Password! ** Secret stuff **";
-
- Clipboard* clipboard = g_browser_process->clipboard();
-
- WidgetWin* window = new WidgetWin;
- window->Init(NULL, gfx::Rect(0, 0, 100, 100), true);
- RootView* root_view = window->GetRootView();
-
- TextField* normal = new TextField();
- TextField* read_only = new TextField();
- read_only->SetReadOnly(true);
- TextField* password = new TextField(TextField::STYLE_PASSWORD);
-
- root_view->AddChildView(normal);
- root_view->AddChildView(read_only);
- root_view->AddChildView(password);
-
- normal->SetText(kNormalText);
- read_only->SetText(kReadOnlyText);
- password->SetText(kPasswordText);
-
- //
- // Test cut.
- //
- ASSERT_TRUE(normal->GetNativeComponent());
- normal->SelectAll();
- ::SendMessage(normal->GetNativeComponent(), WM_CUT, 0, 0);
-
- string16 result;
- clipboard->ReadText(&result);
- EXPECT_EQ(kNormalText, result);
- normal->SetText(kNormalText); // Let's revert to the original content.
-
- ASSERT_TRUE(read_only->GetNativeComponent());
- read_only->SelectAll();
- ::SendMessage(read_only->GetNativeComponent(), WM_CUT, 0, 0);
- result.clear();
- clipboard->ReadText(&result);
- // Cut should have failed, so the clipboard content should not have changed.
- EXPECT_EQ(kNormalText, result);
-
- ASSERT_TRUE(password->GetNativeComponent());
- password->SelectAll();
- ::SendMessage(password->GetNativeComponent(), WM_CUT, 0, 0);
- result.clear();
- clipboard->ReadText(&result);
- // Cut should have failed, so the clipboard content should not have changed.
- EXPECT_EQ(kNormalText, result);
-
- //
- // Test copy.
- //
-
- // Let's start with read_only as the clipboard already contains the content
- // of normal.
- read_only->SelectAll();
- ::SendMessage(read_only->GetNativeComponent(), WM_COPY, 0, 0);
- result.clear();
- clipboard->ReadText(&result);
- EXPECT_EQ(kReadOnlyText, result);
-
- normal->SelectAll();
- ::SendMessage(normal->GetNativeComponent(), WM_COPY, 0, 0);
- result.clear();
- clipboard->ReadText(&result);
- EXPECT_EQ(kNormalText, result);
-
- password->SelectAll();
- ::SendMessage(password->GetNativeComponent(), WM_COPY, 0, 0);
- result.clear();
- clipboard->ReadText(&result);
- // We don't let you copy from a password field, clipboard should not have
- // changed.
- EXPECT_EQ(kNormalText, result);
-
- //
- // Test Paste.
- //
- // Note that we use GetWindowText instead of TextField::GetText below as the
- // text in the TextField class is synced to the text of the HWND on
- // WM_KEYDOWN messages that we are not simulating here.
-
- // Attempting to copy kNormalText in a read-only text-field should fail.
- read_only->SelectAll();
- ::SendMessage(read_only->GetNativeComponent(), WM_KEYDOWN, 0, 0);
- wchar_t buffer[1024] = { 0 };
- ::GetWindowText(read_only->GetNativeComponent(), buffer, 1024);
- EXPECT_EQ(kReadOnlyText, std::wstring(buffer));
-
- password->SelectAll();
- ::SendMessage(password->GetNativeComponent(), WM_PASTE, 0, 0);
- ::GetWindowText(password->GetNativeComponent(), buffer, 1024);
- EXPECT_EQ(kNormalText, std::wstring(buffer));
-
- // Copy from read_only so the string we are pasting is not the same as the
- // current one.
- read_only->SelectAll();
- ::SendMessage(read_only->GetNativeComponent(), WM_COPY, 0, 0);
- normal->SelectAll();
- ::SendMessage(normal->GetNativeComponent(), WM_PASTE, 0, 0);
- ::GetWindowText(normal->GetNativeComponent(), buffer, 1024);
- EXPECT_EQ(kReadOnlyText, std::wstring(buffer));
-}
-#endif
-
-#if defined(OS_WIN)
-////////////////////////////////////////////////////////////////////////////////
-// Mouse-wheel message rerouting
-////////////////////////////////////////////////////////////////////////////////
-class ButtonTest : public NativeButton {
- public:
- ButtonTest(ButtonListener* listener, const std::wstring& label)
- : NativeButton(listener, label) {
- }
-
- HWND GetHWND() {
- return static_cast<NativeButtonWin*>(native_wrapper_)->GetHWND();
- }
-};
-
-class CheckboxTest : public Checkbox {
- public:
- explicit CheckboxTest(const std::wstring& label) : Checkbox(label) {
- }
-
- HWND GetHWND() {
- return static_cast<NativeCheckboxWin*>(native_wrapper_)->GetHWND();
- }
-};
-
-class ScrollableTestView : public View {
- public:
- ScrollableTestView() { }
-
- virtual gfx::Size GetPreferredSize() {
- return gfx::Size(100, 10000);
- }
-
- virtual void Layout() {
- SizeToPreferredSize();
- }
-};
-
-class TestViewWithControls : public View {
- public:
- TestViewWithControls() {
- button_ = new ButtonTest(NULL, L"Button");
- checkbox_ = new CheckboxTest(L"My checkbox");
- text_field_ = new TextField();
- AddChildView(button_);
- AddChildView(checkbox_);
- AddChildView(text_field_);
- }
-
- ButtonTest* button_;
- CheckboxTest* checkbox_;
- TextField* text_field_;
-};
-
-class SimpleWindowDelegate : public WindowDelegate {
- public:
- SimpleWindowDelegate(View* contents) : contents_(contents) { }
-
- virtual void DeleteDelegate() { delete this; }
-
- virtual View* GetContentsView() { return contents_; }
-
- private:
- View* contents_;
-};
-
-// Tests that the mouse-wheel messages are correctly rerouted to the window
-// under the mouse.
-// TODO(jcampan): http://crbug.com/10572 Disabled as it fails on the Vista build
-// bot.
-TEST_F(ViewTest, DISABLED_RerouteMouseWheelTest) {
- TestViewWithControls* view_with_controls = new TestViewWithControls();
- views::Window* window1 =
- views::Window::CreateChromeWindow(
- NULL, gfx::Rect(0, 0, 100, 100),
- new SimpleWindowDelegate(view_with_controls));
- window1->Show();
- ScrollView* scroll_view = new ScrollView();
- scroll_view->SetContents(new ScrollableTestView());
- views::Window* window2 =
- views::Window::CreateChromeWindow(NULL, gfx::Rect(200, 200, 100, 100),
- new SimpleWindowDelegate(scroll_view));
- window2->Show();
- EXPECT_EQ(0, scroll_view->GetVisibleRect().y());
-
- // Make the window1 active, as this is what it would be in real-world.
- window1->Activate();
-
- // Let's send a mouse-wheel message to the different controls and check that
- // it is rerouted to the window under the mouse (effectively scrolling the
- // scroll-view).
-
- // First to the Window's HWND.
- ::SendMessage(view_with_controls->GetWidget()->GetNativeView(),
- WM_MOUSEWHEEL, MAKEWPARAM(0, -20), MAKELPARAM(250, 250));
- EXPECT_EQ(20, scroll_view->GetVisibleRect().y());
-
- // Then the button.
- ::SendMessage(view_with_controls->button_->GetHWND(),
- WM_MOUSEWHEEL, MAKEWPARAM(0, -20), MAKELPARAM(250, 250));
- EXPECT_EQ(40, scroll_view->GetVisibleRect().y());
-
- // Then the check-box.
- ::SendMessage(view_with_controls->checkbox_->GetHWND(),
- WM_MOUSEWHEEL, MAKEWPARAM(0, -20), MAKELPARAM(250, 250));
- EXPECT_EQ(60, scroll_view->GetVisibleRect().y());
-
- // Then the text-field.
- ::SendMessage(view_with_controls->text_field_->GetNativeComponent(),
- WM_MOUSEWHEEL, MAKEWPARAM(0, -20), MAKELPARAM(250, 250));
- EXPECT_EQ(80, scroll_view->GetVisibleRect().y());
-
- // Ensure we don't scroll when the mouse is not over that window.
- ::SendMessage(view_with_controls->text_field_->GetNativeComponent(),
- WM_MOUSEWHEEL, MAKEWPARAM(0, -20), MAKELPARAM(50, 50));
- EXPECT_EQ(80, scroll_view->GetVisibleRect().y());
-}
-#endif
-
-////////////////////////////////////////////////////////////////////////////////
-// Dialogs' default button
-////////////////////////////////////////////////////////////////////////////////
-
-class TestDialogView : public views::View,
- public views::DialogDelegate,
- public views::ButtonListener {
- public:
- TestDialogView()
- : last_pressed_button_(NULL),
- button1_(NULL),
- button2_(NULL),
- checkbox_(NULL),
- canceled_(false),
- oked_(false) {
- }
-
- // views::DialogDelegate implementation:
- virtual int GetDefaultDialogButton() const {
- return MessageBoxFlags::DIALOGBUTTON_OK;
- }
-
- virtual View* GetContentsView() {
- views::View* container = new views::View();
- button1_ = new views::NativeButton(this, L"Button1");
- button2_ = new views::NativeButton(this, L"Button2");
- checkbox_ = new views::Checkbox(L"My checkbox");
- container->AddChildView(button1_);
- container->AddChildView(button2_);
- container->AddChildView(checkbox_);
- return container;
- }
-
- // Prevent the dialog from really closing (so we can click the OK/Cancel
- // buttons to our heart's content).
- virtual bool Cancel() {
- canceled_ = true;
- return false;
- }
- virtual bool Accept() {
- oked_ = true;
- return false;
- }
-
- // views::ButtonListener implementation.
- virtual void ButtonPressed(Button* sender) {
- last_pressed_button_ = sender;
- }
-
- void ResetStates() {
- oked_ = false;
- canceled_ = false;
- last_pressed_button_ = NULL;
- }
-
- views::NativeButton* button1_;
- views::NativeButton* button2_;
- views::NativeButton* checkbox_;
- views::Button* last_pressed_button_;
-
- bool canceled_;
- bool oked_;
-};
-
-
-class DefaultButtonTest : public ViewTest {
- public:
- enum ButtonID {
- OK,
- CANCEL,
- BUTTON1,
- BUTTON2
- };
-
- DefaultButtonTest()
- : native_window_(NULL),
- focus_manager_(NULL),
- client_view_(NULL),
- ok_button_(NULL),
- cancel_button_(NULL) {
- }
-
- virtual void SetUp() {
- dialog_view_ = new TestDialogView();
- views::Window* window =
- views::Window::CreateChromeWindow(NULL, gfx::Rect(0, 0, 100, 100),
- dialog_view_);
- window->Show();
- native_window_ = window->GetNativeWindow();
- focus_manager_ = FocusManager::GetFocusManager(native_window_);
- client_view_ =
- static_cast<views::DialogClientView*>(window->GetClientView());
- ok_button_ = client_view_->ok_button();
- cancel_button_ = client_view_->cancel_button();
- }
-
- void SimularePressingEnterAndCheckDefaultButton(ButtonID button_id) {
-#if defined(OS_WIN)
- focus_manager_->OnKeyDown(native_window_, WM_KEYDOWN, VK_RETURN, 0);
-#else
- // TODO(platform)
- return;
-#endif
- switch (button_id) {
- case OK:
- EXPECT_TRUE(dialog_view_->oked_);
- EXPECT_FALSE(dialog_view_->canceled_);
- EXPECT_FALSE(dialog_view_->last_pressed_button_);
- break;
- case CANCEL:
- EXPECT_FALSE(dialog_view_->oked_);
- EXPECT_TRUE(dialog_view_->canceled_);
- EXPECT_FALSE(dialog_view_->last_pressed_button_);
- break;
- case BUTTON1:
- EXPECT_FALSE(dialog_view_->oked_);
- EXPECT_FALSE(dialog_view_->canceled_);
- EXPECT_TRUE(dialog_view_->last_pressed_button_ ==
- dialog_view_->button1_);
- break;
- case BUTTON2:
- EXPECT_FALSE(dialog_view_->oked_);
- EXPECT_FALSE(dialog_view_->canceled_);
- EXPECT_TRUE(dialog_view_->last_pressed_button_ ==
- dialog_view_->button2_);
- break;
- }
- dialog_view_->ResetStates();
- }
-
- gfx::NativeWindow native_window_;
- views::FocusManager* focus_manager_;
- TestDialogView* dialog_view_;
- DialogClientView* client_view_;
- views::NativeButton* ok_button_;
- views::NativeButton* cancel_button_;
-};
-
-TEST_F(DefaultButtonTest, DialogDefaultButtonTest) {
- // Window has just been shown, we expect the default button specified in the
- // DialogDelegate.
- EXPECT_TRUE(ok_button_->is_default());
-
- // Simulate pressing enter, that should trigger the OK button.
- SimularePressingEnterAndCheckDefaultButton(OK);
-
- // Simulate focusing another button, it should become the default button.
- client_view_->FocusWillChange(ok_button_, dialog_view_->button1_);
- EXPECT_FALSE(ok_button_->is_default());
- EXPECT_TRUE(dialog_view_->button1_->is_default());
- // Simulate pressing enter, that should trigger button1.
- SimularePressingEnterAndCheckDefaultButton(BUTTON1);
-
- // Now select something that is not a button, the OK should become the default
- // button again.
- client_view_->FocusWillChange(dialog_view_->button1_,
- dialog_view_->checkbox_);
- EXPECT_TRUE(ok_button_->is_default());
- EXPECT_FALSE(dialog_view_->button1_->is_default());
- SimularePressingEnterAndCheckDefaultButton(OK);
-
- // Select yet another button.
- client_view_->FocusWillChange(dialog_view_->checkbox_,
- dialog_view_->button2_);
- EXPECT_FALSE(ok_button_->is_default());
- EXPECT_FALSE(dialog_view_->button1_->is_default());
- EXPECT_TRUE(dialog_view_->button2_->is_default());
- SimularePressingEnterAndCheckDefaultButton(BUTTON2);
-
- // Focus nothing.
- client_view_->FocusWillChange(dialog_view_->button2_, NULL);
- EXPECT_TRUE(ok_button_->is_default());
- EXPECT_FALSE(dialog_view_->button1_->is_default());
- EXPECT_FALSE(dialog_view_->button2_->is_default());
- SimularePressingEnterAndCheckDefaultButton(OK);
-
- // Focus the cancel button.
- client_view_->FocusWillChange(NULL, cancel_button_);
- EXPECT_FALSE(ok_button_->is_default());
- EXPECT_TRUE(cancel_button_->is_default());
- EXPECT_FALSE(dialog_view_->button1_->is_default());
- EXPECT_FALSE(dialog_view_->button2_->is_default());
- SimularePressingEnterAndCheckDefaultButton(CANCEL);
-}
diff --git a/chrome/views/view_win.cc b/chrome/views/view_win.cc
deleted file mode 100644
index 382e169..0000000
--- a/chrome/views/view_win.cc
+++ /dev/null
@@ -1,95 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/view.h"
-
-#include "app/drag_drop_types.h"
-#include "app/gfx/chrome_canvas.h"
-#include "app/gfx/path.h"
-#include "app/os_exchange_data.h"
-#include "base/scoped_handle.h"
-#include "base/string_util.h"
-#include "chrome/views/accessibility/view_accessibility_wrapper.h"
-#include "chrome/views/border.h"
-#include "chrome/views/widget/root_view.h"
-#include "chrome/views/widget/widget.h"
-
-namespace views {
-
-FocusManager* View::GetFocusManager() {
- Widget* widget = GetWidget();
- if (!widget)
- return NULL;
-
- HWND hwnd = widget->GetNativeView();
- if (!hwnd)
- return NULL;
-
- return FocusManager::GetFocusManager(hwnd);
-}
-
-void View::DoDrag(const MouseEvent& e, int press_x, int press_y) {
- int drag_operations = GetDragOperations(press_x, press_y);
- if (drag_operations == DragDropTypes::DRAG_NONE)
- return;
-
- scoped_refptr<OSExchangeData> data = new OSExchangeData;
- WriteDragData(press_x, press_y, data.get());
-
- // Message the RootView to do the drag and drop. That way if we're removed
- // the RootView can detect it and avoid calling us back.
- RootView* root_view = GetRootView();
- root_view->StartDragForViewFromMouseEvent(this, data, drag_operations);
-}
-
-ViewAccessibilityWrapper* View::GetViewAccessibilityWrapper() {
- if (accessibility_.get() == NULL) {
- accessibility_.reset(new ViewAccessibilityWrapper(this));
- }
- return accessibility_.get();
-}
-
-bool View::HitTest(const gfx::Point& l) const {
- if (l.x() >= 0 && l.x() < static_cast<int>(width()) &&
- l.y() >= 0 && l.y() < static_cast<int>(height())) {
- if (HasHitTestMask()) {
- gfx::Path mask;
- GetHitTestMask(&mask);
- ScopedHRGN rgn(mask.CreateHRGN());
- return !!PtInRegion(rgn, l.x(), l.y());
- }
- // No mask, but inside our bounds.
- return true;
- }
- // Outside our bounds.
- return false;
-}
-
-HCURSOR View::GetCursorForPoint(Event::EventType event_type, int x, int y) {
- return NULL;
-}
-
-void View::Focus() {
- // Set the native focus to the root view window so it receives the keyboard
- // messages.
- FocusManager* focus_manager = GetFocusManager();
- if (focus_manager)
- focus_manager->FocusHWND(GetRootView()->GetWidget()->GetNativeView());
-}
-
-int View::GetHorizontalDragThreshold() {
- static int threshold = -1;
- if (threshold == -1)
- threshold = GetSystemMetrics(SM_CXDRAG) / 2;
- return threshold;
-}
-
-int View::GetVerticalDragThreshold() {
- static int threshold = -1;
- if (threshold == -1)
- threshold = GetSystemMetrics(SM_CYDRAG) / 2;
- return threshold;
-}
-
-} // namespace views
diff --git a/chrome/views/views.vcproj b/chrome/views/views.vcproj
deleted file mode 100644
index f972022..0000000
--- a/chrome/views/views.vcproj
+++ /dev/null
@@ -1,869 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="8.00"
- Name="views"
- ProjectGUID="{6F9258E5-294F-47B2-919D-17FFE7A8B751}"
- RootNamespace="Views"
- Keyword="Win32Proj"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- ConfigurationType="4"
- InheritedPropertySheets=".\views.vsprops;$(SolutionDir)..\build\debug.vsprops;..\tools\build\win\precompiled_wtl.vsprops;..\..\third_party\icu38\build\using_icu.vsprops"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- ConfigurationType="4"
- InheritedPropertySheets=".\views.vsprops;$(SolutionDir)..\build\release.vsprops;..\..\third_party\icu38\build\using_icu.vsprops"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="accessibility"
- >
- <File
- RelativePath=".\accessibility\view_accessibility.cc"
- >
- </File>
- <File
- RelativePath=".\accessibility\view_accessibility.h"
- >
- </File>
- <File
- RelativePath=".\accessibility\view_accessibility_wrapper.cc"
- >
- </File>
- <File
- RelativePath=".\accessibility\view_accessibility_wrapper.h"
- >
- </File>
- </Filter>
- <Filter
- Name="widget"
- >
- <File
- RelativePath=".\widget\accelerator_handler.cc"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\$(InputName)1.obj"
- XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\$(InputName)1.obj"
- XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath=".\widget\accelerator_handler.h"
- >
- </File>
- <File
- RelativePath=".\widget\aero_tooltip_manager.cc"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\$(InputName)1.obj"
- XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\$(InputName)1.obj"
- XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath=".\widget\aero_tooltip_manager.h"
- >
- </File>
- <File
- RelativePath=".\widget\root_view.cc"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\$(InputName)1.obj"
- XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\$(InputName)1.obj"
- XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath=".\widget\root_view.h"
- >
- </File>
- <File
- RelativePath=".\widget\root_view_drop_target.cc"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\$(InputName)1.obj"
- XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\$(InputName)1.obj"
- XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath=".\widget\root_view_drop_target.h"
- >
- </File>
- <File
- RelativePath=".\widget\root_view_win.cc"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\$(InputName)1.obj"
- XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\$(InputName)1.obj"
- XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath=".\widget\tooltip_manager.cc"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\$(InputName)1.obj"
- XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\$(InputName)1.obj"
- XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath=".\widget\tooltip_manager.h"
- >
- </File>
- <File
- RelativePath=".\widget\widget.h"
- >
- </File>
- <File
- RelativePath=".\widget\widget_win.cc"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\$(InputName)1.obj"
- XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\$(InputName)1.obj"
- XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath=".\widget\widget_win.h"
- >
- </File>
- </Filter>
- <Filter
- Name="window"
- >
- <File
- RelativePath=".\window\client_view.cc"
- >
- </File>
- <File
- RelativePath=".\window\client_view.h"
- >
- </File>
- <File
- RelativePath=".\window\custom_frame_view.cc"
- >
- </File>
- <File
- RelativePath=".\window\custom_frame_view.h"
- >
- </File>
- <File
- RelativePath=".\window\dialog_client_view.cc"
- >
- </File>
- <File
- RelativePath=".\window\dialog_client_view.h"
- >
- </File>
- <File
- RelativePath=".\window\dialog_delegate.cc"
- >
- </File>
- <File
- RelativePath=".\window\dialog_delegate.h"
- >
- </File>
- <File
- RelativePath=".\window\native_frame_view.cc"
- >
- </File>
- <File
- RelativePath=".\window\native_frame_view.h"
- >
- </File>
- <File
- RelativePath=".\window\non_client_view.cc"
- >
- </File>
- <File
- RelativePath=".\window\non_client_view.h"
- >
- </File>
- <File
- RelativePath=".\window\window.h"
- >
- </File>
- <File
- RelativePath=".\window\window_delegate.cc"
- >
- </File>
- <File
- RelativePath=".\window\window_delegate.h"
- >
- </File>
- <File
- RelativePath=".\window\window_resources.h"
- >
- </File>
- <File
- RelativePath=".\window\window_win.cc"
- >
- </File>
- <File
- RelativePath=".\window\window_win.h"
- >
- </File>
- </Filter>
- <Filter
- Name="focus"
- >
- <File
- RelativePath=".\focus\external_focus_tracker.cc"
- >
- </File>
- <File
- RelativePath=".\focus\external_focus_tracker.h"
- >
- </File>
- <File
- RelativePath=".\focus\focus_manager.cc"
- >
- </File>
- <File
- RelativePath=".\focus\focus_manager.h"
- >
- </File>
- <File
- RelativePath=".\focus\focus_util_win.cc"
- >
- </File>
- <File
- RelativePath=".\focus\focus_util_win.h"
- >
- </File>
- <File
- RelativePath=".\focus\view_storage.cc"
- >
- </File>
- <File
- RelativePath=".\focus\view_storage.h"
- >
- </File>
- </Filter>
- <Filter
- Name="controls"
- >
- <File
- RelativePath=".\controls\combo_box.cc"
- >
- </File>
- <File
- RelativePath=".\controls\combo_box.h"
- >
- </File>
- <File
- RelativePath=".\controls\hwnd_view.cc"
- >
- </File>
- <File
- RelativePath=".\controls\hwnd_view.h"
- >
- </File>
- <File
- RelativePath=".\controls\image_view.cc"
- >
- </File>
- <File
- RelativePath=".\controls\image_view.h"
- >
- </File>
- <File
- RelativePath=".\controls\label.cc"
- >
- </File>
- <File
- RelativePath=".\controls\label.h"
- >
- </File>
- <File
- RelativePath=".\controls\link.cc"
- >
- </File>
- <File
- RelativePath=".\controls\link.h"
- >
- </File>
- <File
- RelativePath=".\controls\message_box_view.cc"
- >
- </File>
- <File
- RelativePath=".\controls\message_box_view.h"
- >
- </File>
- <File
- RelativePath=".\controls\native_control.cc"
- >
- </File>
- <File
- RelativePath=".\controls\native_control.h"
- >
- </File>
- <File
- RelativePath=".\controls\native_control_win.cc"
- >
- </File>
- <File
- RelativePath=".\controls\native_control_win.h"
- >
- </File>
- <File
- RelativePath=".\controls\native_view_host.cc"
- >
- </File>
- <File
- RelativePath=".\controls\native_view_host.h"
- >
- </File>
- <File
- RelativePath=".\controls\scroll_view.cc"
- >
- </File>
- <File
- RelativePath=".\controls\scroll_view.h"
- >
- </File>
- <File
- RelativePath=".\controls\separator.cc"
- >
- </File>
- <File
- RelativePath=".\controls\separator.h"
- >
- </File>
- <File
- RelativePath=".\controls\single_split_view.cc"
- >
- </File>
- <File
- RelativePath=".\controls\single_split_view.h"
- >
- </File>
- <File
- RelativePath=".\controls\tabbed_pane.cc"
- >
- </File>
- <File
- RelativePath=".\controls\tabbed_pane.h"
- >
- </File>
- <File
- RelativePath=".\controls\text_field.cc"
- >
- </File>
- <File
- RelativePath=".\controls\text_field.h"
- >
- </File>
- <File
- RelativePath=".\controls\throbber.cc"
- >
- </File>
- <File
- RelativePath=".\controls\throbber.h"
- >
- </File>
- <Filter
- Name="button"
- >
- <File
- RelativePath=".\controls\button\button.cc"
- >
- </File>
- <File
- RelativePath=".\controls\button\button.h"
- >
- </File>
- <File
- RelativePath=".\controls\button\button_dropdown.cc"
- >
- </File>
- <File
- RelativePath=".\controls\button\button_dropdown.h"
- >
- </File>
- <File
- RelativePath=".\controls\button\checkbox.cc"
- >
- </File>
- <File
- RelativePath=".\controls\button\checkbox.h"
- >
- </File>
- <File
- RelativePath=".\controls\button\custom_button.cc"
- >
- </File>
- <File
- RelativePath=".\controls\button\custom_button.h"
- >
- </File>
- <File
- RelativePath=".\controls\button\image_button.cc"
- >
- </File>
- <File
- RelativePath=".\controls\button\image_button.h"
- >
- </File>
- <File
- RelativePath=".\controls\button\menu_button.cc"
- >
- </File>
- <File
- RelativePath=".\controls\button\menu_button.h"
- >
- </File>
- <File
- RelativePath=".\controls\button\native_button.cc"
- >
- </File>
- <File
- RelativePath=".\controls\button\native_button.h"
- >
- </File>
- <File
- RelativePath=".\controls\button\native_button_win.cc"
- >
- </File>
- <File
- RelativePath=".\controls\button\native_button_win.h"
- >
- </File>
- <File
- RelativePath=".\controls\button\native_button_wrapper.h"
- >
- </File>
- <File
- RelativePath=".\controls\button\radio_button.cc"
- >
- </File>
- <File
- RelativePath=".\controls\button\radio_button.h"
- >
- </File>
- <File
- RelativePath=".\controls\button\text_button.cc"
- >
- </File>
- <File
- RelativePath=".\controls\button\text_button.h"
- >
- </File>
- </Filter>
- <Filter
- Name="scrollbar"
- >
- <File
- RelativePath=".\controls\scrollbar\bitmap_scroll_bar.cc"
- >
- </File>
- <File
- RelativePath=".\controls\scrollbar\bitmap_scroll_bar.h"
- >
- </File>
- <File
- RelativePath=".\controls\scrollbar\native_scroll_bar.cc"
- >
- </File>
- <File
- RelativePath=".\controls\scrollbar\native_scroll_bar.h"
- >
- </File>
- <File
- RelativePath=".\controls\scrollbar\scroll_bar.cc"
- >
- </File>
- <File
- RelativePath=".\controls\scrollbar\scroll_bar.h"
- >
- </File>
- </Filter>
- <Filter
- Name="tree"
- >
- <File
- RelativePath=".\controls\tree\tree_model.h"
- >
- </File>
- <File
- RelativePath=".\controls\tree\tree_node_iterator.h"
- >
- </File>
- <File
- RelativePath=".\controls\tree\tree_node_model.h"
- >
- </File>
- <File
- RelativePath=".\controls\tree\tree_view.cc"
- >
- </File>
- <File
- RelativePath=".\controls\tree\tree_view.h"
- >
- </File>
- </Filter>
- <Filter
- Name="table"
- >
- <File
- RelativePath=".\controls\table\group_table_view.cc"
- >
- </File>
- <File
- RelativePath=".\controls\table\group_table_view.h"
- >
- </File>
- <File
- RelativePath=".\controls\table\table_view.cc"
- >
- </File>
- <File
- RelativePath=".\controls\table\table_view.h"
- >
- </File>
- </Filter>
- <Filter
- Name="menu"
- >
- <File
- RelativePath=".\controls\menu\chrome_menu.cc"
- >
- </File>
- <File
- RelativePath=".\controls\menu\chrome_menu.h"
- >
- </File>
- <File
- RelativePath=".\controls\menu\controller.h"
- >
- </File>
- <File
- RelativePath=".\controls\menu\menu.cc"
- >
- </File>
- <File
- RelativePath=".\controls\menu\menu.h"
- >
- </File>
- <File
- RelativePath=".\controls\menu\view_menu_delegate.h"
- >
- </File>
- </Filter>
- </Filter>
- <File
- RelativePath=".\accelerator.cc"
- >
- </File>
- <File
- RelativePath=".\accelerator.h"
- >
- </File>
- <File
- RelativePath=".\background.cc"
- >
- </File>
- <File
- RelativePath=".\background.h"
- >
- </File>
- <File
- RelativePath=".\border.cc"
- >
- </File>
- <File
- RelativePath=".\border.h"
- >
- </File>
- <File
- RelativePath=".\event.cc"
- >
- </File>
- <File
- RelativePath=".\event.h"
- >
- </File>
- <File
- RelativePath=".\event_win.cc"
- >
- </File>
- <File
- RelativePath=".\fill_layout.cc"
- >
- </File>
- <File
- RelativePath=".\fill_layout.h"
- >
- </File>
- <File
- RelativePath=".\grid_layout.cc"
- >
- </File>
- <File
- RelativePath=".\grid_layout.h"
- >
- </File>
- <File
- RelativePath=".\layout_manager.cc"
- >
- </File>
- <File
- RelativePath=".\layout_manager.h"
- >
- </File>
- <File
- RelativePath=".\painter.cc"
- >
- </File>
- <File
- RelativePath=".\painter.h"
- >
- </File>
- <File
- RelativePath="..\tools\build\win\precompiled_wtl.cc"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- UsePrecompiledHeader="1"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\tools\build\win\precompiled_wtl.h"
- >
- </File>
- <File
- RelativePath=".\repeat_controller.cc"
- >
- </File>
- <File
- RelativePath=".\repeat_controller.h"
- >
- </File>
- <File
- RelativePath=".\view.cc"
- >
- </File>
- <File
- RelativePath=".\view.h"
- >
- </File>
- <File
- RelativePath=".\view_constants.cc"
- >
- </File>
- <File
- RelativePath=".\view_constants.h"
- >
- </File>
- <File
- RelativePath=".\view_win.cc"
- >
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/chrome/views/views.vsprops b/chrome/views/views.vsprops
deleted file mode 100644
index 72a6e0d..0000000
--- a/chrome/views/views.vsprops
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioPropertySheet
- ProjectType="Visual C++"
- Version="8.00"
- Name="views"
- InheritedPropertySheets="$(SolutionDir)..\build\common.vsprops;$(SolutionDir)third_party\wtl\using_wtl.vsprops;$(SolutionDir)..\skia\using_skia.vsprops;$(SolutionDir)..\tools\grit\build\using_generated_resources.vsprops"
- >
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\..\;&quot;$(IntDir)\..\generated_resources\&quot;"
- />
-</VisualStudioPropertySheet>
diff --git a/chrome/views/widget/accelerator_handler.cc b/chrome/views/widget/accelerator_handler.cc
deleted file mode 100644
index b7f9cb4..0000000
--- a/chrome/views/widget/accelerator_handler.cc
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/widget/accelerator_handler.h"
-
-#include "chrome/views/focus/focus_manager.h"
-
-namespace views {
-
-AcceleratorHandler::AcceleratorHandler() {
-}
-
-bool AcceleratorHandler::Dispatch(const MSG& msg) {
- bool process_message = true;
-
- if (msg.message >= WM_KEYFIRST && msg.message <= WM_KEYLAST) {
- FocusManager* focus_manager = FocusManager::GetFocusManager(msg.hwnd);
- if (focus_manager) {
- // FocusManager::OnKeyDown and OnKeyUp return false if this message has
- // been consumed and should not be propagated further.
- switch (msg.message) {
- case WM_KEYDOWN:
- case WM_SYSKEYDOWN:
- process_message = focus_manager->OnKeyDown(msg.hwnd, msg.message,
- msg.wParam, msg.lParam);
- break;
-
- case WM_KEYUP:
- case WM_SYSKEYUP:
- process_message = focus_manager->OnKeyUp(msg.hwnd, msg.message,
- msg.wParam, msg.lParam);
- break;
- }
- }
- }
-
- if (process_message) {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
-
- return true;
-}
-
-} // namespace views
diff --git a/chrome/views/widget/accelerator_handler.h b/chrome/views/widget/accelerator_handler.h
deleted file mode 100644
index 6c2278c..0000000
--- a/chrome/views/widget/accelerator_handler.h
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_WIDGET_ACCELERATOR_HANDLER_H_
-#define CHROME_VIEWS_WIDGET_ACCELERATOR_HANDLER_H_
-
-#include "base/message_loop.h"
-
-namespace views {
-
-// This class delegates WM_KEYDOWN and WM_SYSKEYDOWN messages to
-// the associated FocusManager class for the window that is receiving
-// these messages for accelerator processing. The BrowserProcess object
-// holds a singleton instance of this class which can be used by other
-// custom message loop dispatcher objects to implement default accelerator
-// handling.
-class AcceleratorHandler : public MessageLoopForUI::Dispatcher {
- public:
- AcceleratorHandler();
- // Dispatcher method. This returns true if an accelerator was
- // processed by the focus manager
- virtual bool Dispatch(const MSG& msg);
- private:
- DISALLOW_EVIL_CONSTRUCTORS(AcceleratorHandler);
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_WIDGET_ACCELERATOR_HANDLER_H_
diff --git a/chrome/views/widget/aero_tooltip_manager.cc b/chrome/views/widget/aero_tooltip_manager.cc
deleted file mode 100644
index 6e1a5fa..0000000
--- a/chrome/views/widget/aero_tooltip_manager.cc
+++ /dev/null
@@ -1,128 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/widget/aero_tooltip_manager.h"
-
-#include <windows.h>
-#include <atlbase.h>
-#include <atlapp.h> // for GET_X/Y_LPARAM
-#include <commctrl.h>
-#include <shlobj.h>
-
-#include "app/l10n_util_win.h"
-#include "base/message_loop.h"
-
-namespace views {
-
-///////////////////////////////////////////////////////////////////////////////
-// AeroTooltipManager, public:
-
-AeroTooltipManager::AeroTooltipManager(Widget* widget, HWND parent)
- : TooltipManager(widget, parent),
- initial_delay_(0) {
-}
-
-AeroTooltipManager::~AeroTooltipManager() {
- if (initial_timer_)
- initial_timer_->Disown();
-}
-
-void AeroTooltipManager::OnMouse(UINT u_msg, WPARAM w_param, LPARAM l_param) {
- if (initial_timer_)
- initial_timer_->Disown();
-
- if (u_msg == WM_MOUSEMOVE || u_msg == WM_NCMOUSEMOVE) {
- int x = GET_X_LPARAM(l_param);
- int y = GET_Y_LPARAM(l_param);
- if (last_mouse_x_ != x || last_mouse_y_ != y) {
- last_mouse_x_ = x;
- last_mouse_y_ = y;
- HideKeyboardTooltip();
- UpdateTooltip(x, y);
- }
-
- // Delay opening of the tooltip just in case the user moves their
- // mouse to another control. We defer this from Init because we get
- // zero if we query it too soon.
- if (!initial_delay_) {
- initial_delay_ = static_cast<int>(
- ::SendMessage(tooltip_hwnd_, TTM_GETDELAYTIME, TTDT_INITIAL, 0));
- }
- initial_timer_ = new InitialTimer(this, initial_delay_);
- } else {
- // Hide the tooltip and cancel any timers.
- ::SendMessage(tooltip_hwnd_, TTM_POP, 0, 0);
- ::SendMessage(tooltip_hwnd_, TTM_TRACKACTIVATE, false, (LPARAM)&toolinfo_);
- return;
- }
-}
-
-void AeroTooltipManager::OnMouseLeave() {
- last_mouse_x_ = last_mouse_y_ = -1;
- UpdateTooltip();
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// AeroTooltipManager, private:
-
-void AeroTooltipManager::Init() {
- // Create the tooltip control.
- tooltip_hwnd_ = CreateWindowEx(
- WS_EX_TRANSPARENT | l10n_util::GetExtendedTooltipStyles(),
- TOOLTIPS_CLASS, NULL, TTS_NOPREFIX, 0, 0, 0, 0,
- parent_, NULL, NULL, NULL);
-
- l10n_util::AdjustUIFontForWindow(tooltip_hwnd_);
-
- // Add one tool that is used for all tooltips.
- toolinfo_.cbSize = sizeof(toolinfo_);
-
- // We use tracking tooltips on Vista to allow us to manually control the
- // visibility of the tooltip.
- toolinfo_.uFlags = TTF_TRANSPARENT | TTF_IDISHWND | TTF_TRACK | TTF_ABSOLUTE;
- toolinfo_.hwnd = parent_;
- toolinfo_.uId = (UINT_PTR)parent_;
-
- // Setting this tells windows to call parent_ back (using a WM_NOTIFY
- // message) for the actual tooltip contents.
- toolinfo_.lpszText = LPSTR_TEXTCALLBACK;
- SetRectEmpty(&toolinfo_.rect);
- ::SendMessage(tooltip_hwnd_, TTM_ADDTOOL, 0, (LPARAM)&toolinfo_);
-}
-
-void AeroTooltipManager::OnTimer() {
- initial_timer_ = NULL;
-
- POINT pt;
- pt.x = last_mouse_x_;
- pt.y = last_mouse_y_;
- ::ClientToScreen(parent_, &pt);
-
- // Set the position and visibility.
- if (!tooltip_showing_) {
- ::SendMessage(tooltip_hwnd_, TTM_POPUP, 0, 0);
- ::SendMessage(tooltip_hwnd_, TTM_TRACKPOSITION, 0, MAKELPARAM(pt.x, pt.y));
- ::SendMessage(tooltip_hwnd_, TTM_TRACKACTIVATE, true, (LPARAM)&toolinfo_);
- }
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// AeroTooltipManager::InitialTimer
-
-AeroTooltipManager::InitialTimer::InitialTimer(AeroTooltipManager* manager,
- int time) : manager_(manager) {
- MessageLoop::current()->PostDelayedTask(FROM_HERE, NewRunnableMethod(
- this, &InitialTimer::Execute), time);
-}
-
-void AeroTooltipManager::InitialTimer::Disown() {
- manager_ = NULL;
-}
-
-void AeroTooltipManager::InitialTimer::Execute() {
- if (manager_)
- manager_->OnTimer();
-}
-
-} // namespace views
diff --git a/chrome/views/widget/aero_tooltip_manager.h b/chrome/views/widget/aero_tooltip_manager.h
deleted file mode 100644
index fac5a39..0000000
--- a/chrome/views/widget/aero_tooltip_manager.h
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_WIDGET_AERO_TOOLTIP_MANAGER_H_
-#define CHROME_VIEWS_WIDGET_AERO_TOOLTIP_MANAGER_H_
-
-#include "base/ref_counted.h"
-#include "base/task.h"
-#include "chrome/views/widget/tooltip_manager.h"
-
-namespace views {
-
-///////////////////////////////////////////////////////////////////////////////
-// AeroTooltipManager
-//
-// Default Windows tooltips are broken when using our custom window frame
-// - as soon as the tooltip receives a WM_MOUSEMOVE event, it starts spewing
-// NCHITTEST messages at its parent window (us). These messages have random
-// x/y coordinates and can't be ignored, as the DwmDefWindowProc uses
-// NCHITTEST messages to determine how to highlight the caption buttons
-// (the buttons then flicker as the hit tests sent by the user's mouse
-// trigger different effects to those sent by the tooltip).
-//
-// So instead, we have to partially implement tooltips ourselves using
-// TTF_TRACKed tooltips.
-//
-// TODO(glen): Resolve this with Microsoft.
-class AeroTooltipManager : public TooltipManager {
- public:
- AeroTooltipManager(Widget* widget, HWND parent);
- virtual ~AeroTooltipManager();
-
- virtual void OnMouse(UINT u_msg, WPARAM w_param, LPARAM l_param);
- virtual void OnMouseLeave();
-
- private:
- void Init();
- void OnTimer();
-
- class InitialTimer : public base::RefCounted<InitialTimer> {
- public:
- InitialTimer(AeroTooltipManager* manager, int time);
- void Disown();
- void Execute();
-
- private:
- AeroTooltipManager* manager_;
- };
-
- int initial_delay_;
- scoped_refptr<InitialTimer> initial_timer_;
-};
-
-} // namespace views
-
-#endif // #ifndef CHROME_VIEWS_WIDGET_AERO_TOOLTIP_MANAGER_H_
diff --git a/chrome/views/widget/root_view.cc b/chrome/views/widget/root_view.cc
deleted file mode 100644
index 07680e6..0000000
--- a/chrome/views/widget/root_view.cc
+++ /dev/null
@@ -1,1001 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/widget/root_view.h"
-
-#include <algorithm>
-
-#include "app/drag_drop_types.h"
-#include "app/gfx/chrome_canvas.h"
-#if defined(OS_WIN)
-#include "base/base_drag_source.h"
-#endif
-#include "base/logging.h"
-#include "base/message_loop.h"
-#if defined(OS_WIN)
-#include "chrome/views/focus/view_storage.h"
-#include "chrome/views/widget/root_view_drop_target.h"
-#endif
-#include "chrome/views/widget/widget.h"
-#include "chrome/views/window/window.h"
-
-namespace views {
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// A Task to trigger non urgent painting.
-//
-/////////////////////////////////////////////////////////////////////////////
-class PaintTask : public Task {
- public:
- explicit PaintTask(RootView* target) : root_view_(target) {
- }
-
- ~PaintTask() {}
-
- void Cancel() {
- root_view_ = NULL;
- }
-
- void Run() {
- if (root_view_)
- root_view_->PaintNow();
- }
- private:
- // The target root view.
- RootView* root_view_;
-
- DISALLOW_EVIL_CONSTRUCTORS(PaintTask);
-};
-
-const char RootView::kViewClassName[] = "chrome/views/RootView";
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// RootView - constructors, destructors, initialization
-//
-/////////////////////////////////////////////////////////////////////////////
-
-RootView::RootView(Widget* widget)
- : mouse_pressed_handler_(NULL),
- mouse_move_handler_(NULL),
- last_click_handler_(NULL),
- widget_(widget),
- invalid_rect_urgent_(false),
- pending_paint_task_(NULL),
- paint_task_needed_(false),
- explicit_mouse_handler_(false),
-#if defined(OS_WIN)
- previous_cursor_(NULL),
-#endif
- default_keyboard_handler_(NULL),
- focus_listener_(NULL),
- focus_on_mouse_pressed_(false),
- ignore_set_focus_calls_(false),
- focus_traversable_parent_(NULL),
- focus_traversable_parent_view_(NULL),
- drag_view_(NULL)
-#ifndef NDEBUG
- ,
- is_processing_paint_(false)
-#endif
-{
-}
-
-RootView::~RootView() {
- // If we have children remove them explicitly so to make sure a remove
- // notification is sent for each one of them.
- if (!child_views_.empty())
- RemoveAllChildViews(true);
-
- if (pending_paint_task_)
- pending_paint_task_->Cancel(); // Ensure we're not called any more.
-}
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// RootView - layout, painting
-//
-/////////////////////////////////////////////////////////////////////////////
-
-void RootView::SchedulePaint(const gfx::Rect& r, bool urgent) {
- // If there is an existing invalid rect, add the union of the scheduled
- // rect with the invalid rect. This could be optimized further if
- // necessary.
- if (invalid_rect_.IsEmpty())
- invalid_rect_ = r;
- else
- invalid_rect_ = invalid_rect_.Union(r);
-
- if (urgent || invalid_rect_urgent_) {
- invalid_rect_urgent_ = true;
- } else {
- if (!pending_paint_task_) {
- pending_paint_task_ = new PaintTask(this);
- MessageLoop::current()->PostTask(FROM_HERE, pending_paint_task_);
- }
- paint_task_needed_ = true;
- }
-}
-
-void RootView::SchedulePaint() {
- View::SchedulePaint();
-}
-
-void RootView::SchedulePaint(int x, int y, int w, int h) {
- View::SchedulePaint();
-}
-
-#ifndef NDEBUG
-// Sets the value of RootView's |is_processing_paint_| member to true as long
-// as ProcessPaint is being called. Sets it to |false| when it returns.
-class ScopedProcessingPaint {
- public:
- explicit ScopedProcessingPaint(bool* is_processing_paint)
- : is_processing_paint_(is_processing_paint) {
- *is_processing_paint_ = true;
- }
-
- ~ScopedProcessingPaint() {
- *is_processing_paint_ = false;
- }
- private:
- bool* is_processing_paint_;
-
- DISALLOW_EVIL_CONSTRUCTORS(ScopedProcessingPaint);
-};
-#endif
-
-void RootView::ProcessPaint(ChromeCanvas* canvas) {
-#ifndef NDEBUG
- ScopedProcessingPaint processing_paint(&is_processing_paint_);
-#endif
-
- // Clip the invalid rect to our bounds. If a view is in a scrollview
- // it could be a lot larger
- invalid_rect_ = GetScheduledPaintRectConstrainedToSize();
-
- if (invalid_rect_.IsEmpty())
- return;
-
- // Clear the background.
- canvas->drawColor(SK_ColorBLACK, SkPorterDuff::kClear_Mode);
-
- // Save the current transforms.
- canvas->save();
-
- // Set the clip rect according to the invalid rect.
- int clip_x = invalid_rect_.x() + x();
- int clip_y = invalid_rect_.y() + y();
- canvas->ClipRectInt(clip_x, clip_y, invalid_rect_.width(),
- invalid_rect_.height());
-
- // Paint the tree
- View::ProcessPaint(canvas);
-
- // Restore the previous transform
- canvas->restore();
-
- ClearPaintRect();
-}
-
-void RootView::PaintNow() {
- if (pending_paint_task_) {
- pending_paint_task_->Cancel();
- pending_paint_task_ = NULL;
- }
- if (!paint_task_needed_)
- return;
- Widget* widget = GetWidget();
- if (widget)
- widget->PaintNow(invalid_rect_);
-}
-
-bool RootView::NeedsPainting(bool urgent) {
- bool has_invalid_rect = !invalid_rect_.IsEmpty();
- if (urgent) {
- if (invalid_rect_urgent_)
- return has_invalid_rect;
- else
- return false;
- } else {
- return has_invalid_rect;
- }
-}
-
-const gfx::Rect& RootView::GetScheduledPaintRect() {
- return invalid_rect_;
-}
-
-gfx::Rect RootView::GetScheduledPaintRectConstrainedToSize() {
- if (invalid_rect_.IsEmpty())
- return invalid_rect_;
-
- return invalid_rect_.Intersect(GetLocalBounds(true));
-}
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// RootView - tree
-//
-/////////////////////////////////////////////////////////////////////////////
-
-Widget* RootView::GetWidget() const {
- return widget_;
-}
-
-void RootView::ThemeChanged() {
- View::ThemeChanged();
-}
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// RootView - event dispatch and propagation
-//
-/////////////////////////////////////////////////////////////////////////////
-
-void RootView::ViewHierarchyChanged(bool is_add, View* parent, View* child) {
- if (!is_add) {
- if (!explicit_mouse_handler_ && mouse_pressed_handler_ == child) {
- mouse_pressed_handler_ = NULL;
- }
-
-#if defined(OS_WIN)
- if (drop_target_.get())
- drop_target_->ResetTargetViewIfEquals(child);
-#else
- NOTIMPLEMENTED();
-#endif
-
- if (mouse_move_handler_ == child) {
- mouse_move_handler_ = NULL;
- }
-
- if (GetFocusedView() == child) {
- FocusView(NULL);
- }
-
- if (child == drag_view_)
- drag_view_ = NULL;
-
- if (default_keyboard_handler_ == child) {
- default_keyboard_handler_ = NULL;
- }
-
- // For a given widget hierarchy, focus is tracked by a FocusManager attached
- // to our nearest enclosing Window. <-- Important Assumption!
- // We may not have access to our window if this function is called as a
- // result of teardown during the deletion of the RootView and its hierarchy,
- // so we don't bother notifying the FocusManager in that case because it
- // will have already been destroyed (the Widget that contains us is
- // NCDESTROY'ed which in turn destroys the focus manager _before_ the
- // RootView is deleted.)
-#if defined(OS_WIN)
- Window* window = GetWindow();
- if (window) {
- FocusManager* focus_manager =
- FocusManager::GetFocusManager(window->GetNativeWindow());
- focus_manager->ViewRemoved(parent, child);
- }
- ViewStorage::GetSharedInstance()->ViewRemoved(parent, child);
-#endif
- }
-}
-
-void RootView::SetFocusOnMousePressed(bool f) {
- focus_on_mouse_pressed_ = f;
-}
-
-bool RootView::OnMousePressed(const MouseEvent& e) {
- // This function does not normally handle non-client messages except for
- // non-client double-clicks. Actually, all double-clicks are special as the
- // are formed from a single-click followed by a double-click event. When the
- // double-click event lands on a different view than its single-click part,
- // we transform it into a single-click which prevents odd things.
- if ((e.GetFlags() & MouseEvent::EF_IS_NON_CLIENT) &&
- !(e.GetFlags() & MouseEvent::EF_IS_DOUBLE_CLICK)) {
- last_click_handler_ = NULL;
- return false;
- }
-
- UpdateCursor(e);
- SetMouseLocationAndFlags(e);
-
- // If mouse_pressed_handler_ is non null, we are currently processing
- // a pressed -> drag -> released session. In that case we send the
- // event to mouse_pressed_handler_
- if (mouse_pressed_handler_) {
- MouseEvent mouse_pressed_event(e, this, mouse_pressed_handler_);
- drag_info.Reset();
- mouse_pressed_handler_->ProcessMousePressed(mouse_pressed_event,
- &drag_info);
- return true;
- }
- DCHECK(!explicit_mouse_handler_);
-
- bool hit_disabled_view = false;
- // Walk up the tree until we find a view that wants the mouse event.
- for (mouse_pressed_handler_ = GetViewForPoint(e.location());
- mouse_pressed_handler_ && (mouse_pressed_handler_ != this);
- mouse_pressed_handler_ = mouse_pressed_handler_->GetParent()) {
- if (!mouse_pressed_handler_->IsEnabled()) {
- // Disabled views should eat events instead of propagating them upwards.
- hit_disabled_view = true;
- break;
- }
-
- // See if this view wants to handle the mouse press.
- MouseEvent mouse_pressed_event(e, this, mouse_pressed_handler_);
-
- // Remove the double-click flag if the handler is different than the
- // one which got the first click part of the double-click.
- if (mouse_pressed_handler_ != last_click_handler_)
- mouse_pressed_event.set_flags(e.GetFlags() &
- ~MouseEvent::EF_IS_DOUBLE_CLICK);
-
- drag_info.Reset();
- bool handled = mouse_pressed_handler_->ProcessMousePressed(
- mouse_pressed_event, &drag_info);
-
- // The view could have removed itself from the tree when handling
- // OnMousePressed(). In this case, the removal notification will have
- // reset mouse_pressed_handler_ to NULL out from under us. Detect this
- // case and stop. (See comments in view.h.)
- //
- // NOTE: Don't return true here, because we don't want the frame to
- // forward future events to us when there's no handler.
- if (!mouse_pressed_handler_)
- break;
-
- // If the view handled the event, leave mouse_pressed_handler_ set and
- // return true, which will cause subsequent drag/release events to get
- // forwarded to that view.
- if (handled) {
- last_click_handler_ = mouse_pressed_handler_;
- return true;
- }
- }
-
- // Reset mouse_pressed_handler_ to indicate that no processing is occurring.
- mouse_pressed_handler_ = NULL;
-
- if (focus_on_mouse_pressed_) {
-#if defined(OS_WIN)
- HWND hwnd = GetWidget()->GetNativeView();
- if (::GetFocus() != hwnd) {
- ::SetFocus(hwnd);
- }
-#else
- NOTIMPLEMENTED();
-#endif
- }
-
- // In the event that a double-click is not handled after traversing the
- // entire hierarchy (even as a single-click when sent to a different view),
- // it must be marked as handled to avoid anything happening from default
- // processing if it the first click-part was handled by us.
- if (last_click_handler_ && e.GetFlags() & MouseEvent::EF_IS_DOUBLE_CLICK)
- hit_disabled_view = true;
-
- last_click_handler_ = NULL;
- return hit_disabled_view;
-}
-
-bool RootView::ConvertPointToMouseHandler(const gfx::Point& l,
- gfx::Point* p) {
- //
- // If the mouse_handler was set explicitly, we need to keep
- // sending events even if it was reparented in a different
- // window. (a non explicit mouse handler is automatically
- // cleared when the control is removed from the hierarchy)
- if (explicit_mouse_handler_) {
- if (mouse_pressed_handler_->GetWidget()) {
- *p = l;
- ConvertPointToScreen(this, p);
- ConvertPointToView(NULL, mouse_pressed_handler_, p);
- } else {
- // If the mouse_pressed_handler_ is not connected, we send the
- // event in screen coordinate system
- *p = l;
- ConvertPointToScreen(this, p);
- return true;
- }
- } else {
- *p = l;
- ConvertPointToView(this, mouse_pressed_handler_, p);
- }
- return true;
-}
-
-bool RootView::OnMouseDragged(const MouseEvent& e) {
- UpdateCursor(e);
-
- if (mouse_pressed_handler_) {
- SetMouseLocationAndFlags(e);
-
- gfx::Point p;
- ConvertPointToMouseHandler(e.location(), &p);
- MouseEvent mouse_event(e.GetType(), p.x(), p.y(), e.GetFlags());
- return mouse_pressed_handler_->ProcessMouseDragged(mouse_event, &drag_info);
- }
- return false;
-}
-
-void RootView::OnMouseReleased(const MouseEvent& e, bool canceled) {
- UpdateCursor(e);
-
- if (mouse_pressed_handler_) {
- gfx::Point p;
- ConvertPointToMouseHandler(e.location(), &p);
- MouseEvent mouse_released(e.GetType(), p.x(), p.y(), e.GetFlags());
- // We allow the view to delete us from ProcessMouseReleased. As such,
- // configure state such that we're done first, then call View.
- View* mouse_pressed_handler = mouse_pressed_handler_;
- mouse_pressed_handler_ = NULL;
- explicit_mouse_handler_ = false;
- mouse_pressed_handler->ProcessMouseReleased(mouse_released, canceled);
- // WARNING: we may have been deleted.
- }
-}
-
-void RootView::OnMouseMoved(const MouseEvent& e) {
- View* v = GetViewForPoint(e.location());
- // Find the first enabled view.
- while (v && !v->IsEnabled())
- v = v->GetParent();
- if (v && v != this) {
- if (v != mouse_move_handler_) {
- if (mouse_move_handler_ != NULL) {
- MouseEvent exited_event(Event::ET_MOUSE_EXITED, 0, 0, 0);
- mouse_move_handler_->OnMouseExited(exited_event);
- }
-
- mouse_move_handler_ = v;
-
- MouseEvent entered_event(Event::ET_MOUSE_ENTERED,
- this,
- mouse_move_handler_,
- e.location(),
- 0);
- mouse_move_handler_->OnMouseEntered(entered_event);
- }
- MouseEvent moved_event(Event::ET_MOUSE_MOVED,
- this,
- mouse_move_handler_,
- e.location(),
- 0);
- mouse_move_handler_->OnMouseMoved(moved_event);
-
-#if defined(OS_WIN)
- HCURSOR cursor = mouse_move_handler_->GetCursorForPoint(
- moved_event.GetType(), moved_event.x(), moved_event.y());
- if (cursor) {
- previous_cursor_ = ::SetCursor(cursor);
- } else if (previous_cursor_) {
- ::SetCursor(previous_cursor_);
- previous_cursor_ = NULL;
- }
-#else
- NOTIMPLEMENTED();
-#endif
- } else if (mouse_move_handler_ != NULL) {
- MouseEvent exited_event(Event::ET_MOUSE_EXITED, 0, 0, 0);
- mouse_move_handler_->OnMouseExited(exited_event);
-#if defined(OS_WIN)
- if (previous_cursor_) {
- ::SetCursor(previous_cursor_);
- previous_cursor_ = NULL;
- }
-#else
- NOTIMPLEMENTED();
-#endif
- }
-}
-
-void RootView::ProcessOnMouseExited() {
- if (mouse_move_handler_ != NULL) {
- MouseEvent exited_event(Event::ET_MOUSE_EXITED, 0, 0, 0);
- mouse_move_handler_->OnMouseExited(exited_event);
- mouse_move_handler_ = NULL;
- }
-}
-
-void RootView::SetMouseHandler(View *new_mh) {
- // If we're clearing the mouse handler, clear explicit_mouse_handler as well.
- explicit_mouse_handler_ = (new_mh != NULL);
- mouse_pressed_handler_ = new_mh;
-}
-
-void RootView::OnWidgetCreated() {
-#if defined(OS_WIN)
- DCHECK(!drop_target_.get());
- drop_target_ = new RootViewDropTarget(this);
-#else
- // TODO(port): Port RootViewDropTarget and this goes away.
- NOTIMPLEMENTED();
-#endif
-}
-
-void RootView::OnWidgetDestroyed() {
-#if defined(OS_WIN)
- if (drop_target_.get()) {
- RevokeDragDrop(GetWidget()->GetNativeView());
- drop_target_ = NULL;
- }
-#else
- // TODO(port): Port RootViewDropTarget and this goes away.
- NOTIMPLEMENTED();
-#endif
- widget_ = NULL;
-}
-
-void RootView::ProcessMouseDragCanceled() {
- if (mouse_pressed_handler_) {
- // Synthesize a release event.
- MouseEvent release_event(Event::ET_MOUSE_RELEASED, last_mouse_event_x_,
- last_mouse_event_y_, last_mouse_event_flags_);
- OnMouseReleased(release_event, true);
- }
-}
-
-void RootView::SetFocusListener(FocusListener* listener) {
- focus_listener_ = listener;
-}
-
-void RootView::FocusView(View* view) {
- if (view != GetFocusedView()) {
-#if defined(OS_WIN)
- FocusManager* focus_manager = GetFocusManager();
- DCHECK(focus_manager) << "No Focus Manager for Window " <<
- (GetWidget() ? GetWidget()->GetNativeView() : 0);
- if (!focus_manager)
- return;
-
- View* prev_focused_view = focus_manager->GetFocusedView();
- focus_manager->SetFocusedView(view);
-
- if (focus_listener_)
- focus_listener_->FocusChanged(prev_focused_view, view);
-#else
- // TODO(port): Port the focus manager and this goes away.
- NOTIMPLEMENTED();
-#endif
- }
-}
-
-View* RootView::GetFocusedView() {
- FocusManager* focus_manager = GetFocusManager();
- if (!focus_manager) {
- // We may not have a FocusManager when the window that contains us is being
- // deleted. Sadly we cannot wait for the window to be destroyed before we
- // remove the FocusManager (see xp_frame.cc for more info).
- return NULL;
- }
-
- // Make sure the focused view belongs to this RootView's view hierarchy.
- View* view = focus_manager->GetFocusedView();
- if (view && (view->GetRootView() == this))
- return view;
- return NULL;
-}
-
-View* RootView::FindNextFocusableView(View* starting_view,
- bool reverse,
- Direction direction,
- bool dont_loop,
- FocusTraversable** focus_traversable,
- View** focus_traversable_view) {
- *focus_traversable = NULL;
- *focus_traversable_view = NULL;
-
- if (GetChildViewCount() == 0) {
- NOTREACHED();
- // Nothing to focus on here.
- return NULL;
- }
-
- bool skip_starting_view = true;
- if (!starting_view) {
- // Default to the first/last child
- starting_view = reverse ? GetChildViewAt(GetChildViewCount() - 1) :
- GetChildViewAt(0) ;
- // If there was no starting view, then the one we select is a potential
- // focus candidate.
- skip_starting_view = false;
- } else {
- // The starting view should be part of this RootView.
- DCHECK(IsParentOf(starting_view));
- }
-
- View* v = NULL;
- if (!reverse) {
- v = FindNextFocusableViewImpl(starting_view, skip_starting_view,
- true,
- (direction == DOWN) ? true : false,
- starting_view->GetGroup());
- } else {
- // If the starting view is focusable, we don't want to go down, as we are
- // traversing the view hierarchy tree bottom-up.
- bool can_go_down = (direction == DOWN) && !starting_view->IsFocusable();
- v = FindPreviousFocusableViewImpl(starting_view, true,
- true,
- can_go_down,
- starting_view->GetGroup());
- }
- if (v) {
- if (v->IsFocusable())
- return v;
- *focus_traversable = v->GetFocusTraversable();
- DCHECK(*focus_traversable);
- *focus_traversable_view = v;
- return NULL;
- }
- // Nothing found.
- return NULL;
-}
-
-// Strategy for finding the next focusable view:
-// - keep going down the first child, stop when you find a focusable view or
-// a focus traversable view (in that case return it) or when you reach a view
-// with no children.
-// - go to the right sibling and start the search from there (by invoking
-// FindNextFocusableViewImpl on that view).
-// - if the view has no right sibling, go up the parents until you find a parent
-// with a right sibling and start the search from there.
-View* RootView::FindNextFocusableViewImpl(View* starting_view,
- bool skip_starting_view,
- bool can_go_up,
- bool can_go_down,
- int skip_group_id) {
- if (!skip_starting_view) {
- if (IsViewFocusableCandidate(starting_view, skip_group_id))
- return FindSelectedViewForGroup(starting_view);
- if (starting_view->GetFocusTraversable())
- return starting_view;
- }
-
- // First let's try the left child.
- if (can_go_down) {
- View* v = NULL;
- if (starting_view->GetChildViewCount() > 0) {
- // We are only interested in non floating-views, as attached floating
- // views order is variable (depending on mouse moves).
- for (int i = 0; i < starting_view->GetChildViewCount(); i++) {
- View* child = starting_view->GetChildViewAt(i);
- if (!child->IsFloatingView()) {
- v = FindNextFocusableViewImpl(child, false, false, true,
- skip_group_id);
- break;
- }
- }
- }
- if (v == NULL) {
- // Try the floating views.
- int id = 0;
- if (starting_view->EnumerateFloatingViews(View::FIRST, 0, &id)) {
- View* child = starting_view->RetrieveFloatingViewForID(id);
- DCHECK(child);
- v = FindNextFocusableViewImpl(child, false, false, true, skip_group_id);
- }
- }
- if (v)
- return v;
- }
-
- // Then try the right sibling.
- View* sibling = NULL;
- if (starting_view->IsFloatingView()) {
- int id = 0;
- if (starting_view->GetParent()->EnumerateFloatingViews(
- View::NEXT, starting_view->GetFloatingViewID(), &id)) {
- sibling = starting_view->GetParent()->RetrieveFloatingViewForID(id);
- DCHECK(sibling);
- }
- } else {
- sibling = starting_view->GetNextFocusableView();
- if (!sibling) {
- // Let's try floating views.
- int id = 0;
- if (starting_view->GetParent()->EnumerateFloatingViews(View::FIRST,
- 0, &id)) {
- sibling = starting_view->GetParent()->RetrieveFloatingViewForID(id);
- DCHECK(sibling);
- }
- }
- }
- if (sibling) {
- View* v =
- FindNextFocusableViewImpl(sibling, false, false, true, skip_group_id);
- if (v)
- return v;
- }
-
- // Then go up to the parent sibling.
- if (can_go_up) {
- View* parent = starting_view->GetParent();
- while (parent) {
- int id = 0;
- if (parent->IsFloatingView() &&
- parent->GetParent()->EnumerateFloatingViews(
- View::NEXT, parent->GetFloatingViewID(), &id)) {
- sibling = parent->GetParent()->RetrieveFloatingViewForID(id);
- DCHECK(sibling);
- } else {
- sibling = parent->GetNextFocusableView();
- }
- if (sibling) {
- return FindNextFocusableViewImpl(sibling,
- false, true, true,
- skip_group_id);
- }
- parent = parent->GetParent();
- }
- }
-
- // We found nothing.
- return NULL;
-}
-
-// Strategy for finding the previous focusable view:
-// - keep going down on the right until you reach a view with no children, if it
-// it is a good candidate return it.
-// - start the search on the left sibling.
-// - if there are no left sibling, start the search on the parent (without going
-// down).
-View* RootView::FindPreviousFocusableViewImpl(View* starting_view,
- bool skip_starting_view,
- bool can_go_up,
- bool can_go_down,
- int skip_group_id) {
- // Let's go down and right as much as we can.
- if (can_go_down) {
- View* v = NULL;
- if (starting_view->GetChildViewCount() -
- starting_view->GetFloatingViewCount() > 0) {
- View* view =
- starting_view->GetChildViewAt(starting_view->GetChildViewCount() - 1);
- v = FindPreviousFocusableViewImpl(view, false, false, true,
- skip_group_id);
- } else {
- // Let's try floating views.
- int id = 0;
- if (starting_view->EnumerateFloatingViews(View::LAST, 0, &id)) {
- View* child = starting_view->RetrieveFloatingViewForID(id);
- DCHECK(child);
- v = FindNextFocusableViewImpl(child, false, false, true, skip_group_id);
- }
- }
- if (v)
- return v;
- }
-
- if (!skip_starting_view) {
- if (IsViewFocusableCandidate(starting_view, skip_group_id))
- return FindSelectedViewForGroup(starting_view);
- if (starting_view->GetFocusTraversable())
- return starting_view;
- }
-
- // Then try the left sibling.
- View* sibling = NULL;
- if (starting_view->IsFloatingView()) {
- int id = 0;
- if (starting_view->GetParent()->EnumerateFloatingViews(
- View::PREVIOUS, starting_view->GetFloatingViewID(), &id)) {
- sibling = starting_view->GetParent()->RetrieveFloatingViewForID(id);
- DCHECK(sibling);
- }
- if (!sibling) {
- // No more floating views, try regular views, starting at the last one.
- View* parent = starting_view->GetParent();
- for (int i = parent->GetChildViewCount() - 1; i >= 0; i--) {
- View* v = parent->GetChildViewAt(i);
- if (!v->IsFloatingView()) {
- sibling = v;
- break;
- }
- }
- }
- } else {
- sibling = starting_view->GetPreviousFocusableView();
- }
- if (sibling) {
- return FindPreviousFocusableViewImpl(sibling,
- false, true, true,
- skip_group_id);
- }
-
- // Then go up the parent.
- if (can_go_up) {
- View* parent = starting_view->GetParent();
- if (parent)
- return FindPreviousFocusableViewImpl(parent,
- false, true, false,
- skip_group_id);
- }
-
- // We found nothing.
- return NULL;
-}
-
-FocusTraversable* RootView::GetFocusTraversableParent() {
- return focus_traversable_parent_;
-}
-
-void RootView::SetFocusTraversableParent(FocusTraversable* focus_traversable) {
- DCHECK(focus_traversable != this);
- focus_traversable_parent_ = focus_traversable;
-}
-
-View* RootView::GetFocusTraversableParentView() {
- return focus_traversable_parent_view_;
-}
-
-void RootView::SetFocusTraversableParentView(View* view) {
- focus_traversable_parent_view_ = view;
-}
-
-// static
-View* RootView::FindSelectedViewForGroup(View* view) {
- if (view->IsGroupFocusTraversable() ||
- view->GetGroup() == -1) // No group for that view.
- return view;
-
- View* selected_view = view->GetSelectedViewForGroup(view->GetGroup());
- if (selected_view)
- return selected_view;
-
- // No view selected for that group, default to the specified view.
- return view;
-}
-
-// static
-bool RootView::IsViewFocusableCandidate(View* v, int skip_group_id) {
- return v->IsFocusable() &&
- (v->IsGroupFocusTraversable() || skip_group_id == -1 ||
- v->GetGroup() != skip_group_id);
-}
-
-bool RootView::ProcessKeyEvent(const KeyEvent& event) {
- bool consumed = false;
-
- View* v = GetFocusedView();
-#if defined(OS_WIN)
- // Special case to handle right-click context menus triggered by the
- // keyboard.
- if (v && v->IsEnabled() && ((event.GetCharacter() == VK_APPS) ||
- (event.GetCharacter() == VK_F10 && event.IsShiftDown()))) {
- gfx::Point screen_loc = v->GetKeyboardContextMenuLocation();
- v->ShowContextMenu(screen_loc.x(), screen_loc.y(), false);
- return true;
- }
-#else
- // TODO(port): The above block needs the VK_* refactored out.
- NOTIMPLEMENTED();
-#endif
-
- for (; v && v != this && !consumed; v = v->GetParent()) {
- consumed = (event.GetType() == Event::ET_KEY_PRESSED) ?
- v->OnKeyPressed(event) : v->OnKeyReleased(event);
- }
-
- if (!consumed && default_keyboard_handler_) {
- consumed = (event.GetType() == Event::ET_KEY_PRESSED) ?
- default_keyboard_handler_->OnKeyPressed(event) :
- default_keyboard_handler_->OnKeyReleased(event);
- }
-
- return consumed;
-}
-
-bool RootView::ProcessMouseWheelEvent(const MouseWheelEvent& e) {
- View* v;
- bool consumed = false;
- if (GetFocusedView()) {
- for (v = GetFocusedView();
- v && v != this && !consumed; v = v->GetParent()) {
- consumed = v->OnMouseWheel(e);
- }
- }
-
- if (!consumed && default_keyboard_handler_) {
- consumed = default_keyboard_handler_->OnMouseWheel(e);
- }
- return consumed;
-}
-
-void RootView::SetDefaultKeyboardHandler(View* v) {
- default_keyboard_handler_ = v;
-}
-
-bool RootView::IsVisibleInRootView() const {
- return IsVisible();
-}
-
-void RootView::ViewBoundsChanged(View* view, bool size_changed,
- bool position_changed) {
- DCHECK(view && (size_changed || position_changed));
- if (!view->descendants_to_notify_.get())
- return;
-
- for (std::vector<View*>::iterator i = view->descendants_to_notify_->begin();
- i != view->descendants_to_notify_->end(); ++i) {
- (*i)->VisibleBoundsInRootChanged();
- }
-}
-
-void RootView::RegisterViewForVisibleBoundsNotification(View* view) {
- DCHECK(view);
- if (view->registered_for_visible_bounds_notification_)
- return;
- view->registered_for_visible_bounds_notification_ = true;
- View* ancestor = view->GetParent();
- while (ancestor) {
- ancestor->AddDescendantToNotify(view);
- ancestor = ancestor->GetParent();
- }
-}
-
-void RootView::UnregisterViewForVisibleBoundsNotification(View* view) {
- DCHECK(view);
- if (!view->registered_for_visible_bounds_notification_)
- return;
- view->registered_for_visible_bounds_notification_ = false;
- View* ancestor = view->GetParent();
- while (ancestor) {
- ancestor->RemoveDescendantToNotify(view);
- ancestor = ancestor->GetParent();
- }
-}
-
-void RootView::SetMouseLocationAndFlags(const MouseEvent& e) {
- last_mouse_event_flags_ = e.GetFlags();
- last_mouse_event_x_ = e.x();
- last_mouse_event_y_ = e.y();
-}
-
-std::string RootView::GetClassName() const {
- return kViewClassName;
-}
-
-void RootView::ClearPaintRect() {
- invalid_rect_.SetRect(0, 0, 0, 0);
-
- // This painting has been done. Reset the urgent flag.
- invalid_rect_urgent_ = false;
-
- // If a pending_paint_task_ does Run(), we don't need to do anything.
- paint_task_needed_ = false;
-}
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// RootView - accessibility
-//
-/////////////////////////////////////////////////////////////////////////////
-
-bool RootView::GetAccessibleRole(AccessibilityTypes::Role* role) {
- DCHECK(role);
-
- *role = AccessibilityTypes::ROLE_APPLICATION;
- return true;
-}
-
-bool RootView::GetAccessibleName(std::wstring* name) {
- if (!accessible_name_.empty()) {
- *name = accessible_name_;
- return true;
- }
- return false;
-}
-
-void RootView::SetAccessibleName(const std::wstring& name) {
- accessible_name_.assign(name);
-}
-
-View* RootView::GetDragView() {
- return drag_view_;
-}
-
-} // namespace views
diff --git a/chrome/views/widget/root_view.h b/chrome/views/widget/root_view.h
deleted file mode 100644
index 3b6a5e7..0000000
--- a/chrome/views/widget/root_view.h
+++ /dev/null
@@ -1,361 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_WIDGET_ROOT_VIEW_H_
-#define CHROME_VIEWS_WIDGET_ROOT_VIEW_H_
-
-#include <string>
-
-#include "base/ref_counted.h"
-#include "build/build_config.h"
-#include "chrome/views/focus/focus_manager.h"
-#include "chrome/views/view.h"
-
-#if defined(OS_LINUX)
-typedef struct _GdkEventExpose GdkEventExpose;
-#endif
-
-namespace views {
-
-class PaintTask;
-class RootViewDropTarget;
-class Widget;
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// FocusListener Interface
-//
-////////////////////////////////////////////////////////////////////////////////
-class FocusListener {
- public:
- virtual void FocusChanged(View* lost_focus, View* got_focus) = 0;
-};
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// RootView class
-//
-// The RootView is the root of a View hierarchy. A RootView is always the
-// first and only child of a Widget.
-//
-// The RootView manages the View hierarchy's interface with the Widget
-// and also maintains the current invalid rect - the region that needs
-// repainting.
-//
-/////////////////////////////////////////////////////////////////////////////
-class RootView : public View,
- public FocusTraversable {
- public:
- static const char kViewClassName[];
-
- explicit RootView(Widget* widget);
-
- virtual ~RootView();
-
- // Layout and Painting functions
-
- // Overridden from View to implement paint scheduling.
- virtual void SchedulePaint(const gfx::Rect& r, bool urgent);
-
- // Convenience to schedule the whole view
- virtual void SchedulePaint();
-
- // Convenience to schedule a paint given some ints
- virtual void SchedulePaint(int x, int y, int w, int h);
-
- // Paint this RootView and its child Views.
- virtual void ProcessPaint(ChromeCanvas* canvas);
-
- // If the invalid rect is non-empty and there is a pending paint the RootView
- // is painted immediately. This is internally invoked as the result of
- // invoking SchedulePaint.
- virtual void PaintNow();
-
- // Whether or not this View needs repainting. If |urgent| is true, this method
- // returns whether this root view needs to paint as soon as possible.
- virtual bool NeedsPainting(bool urgent);
-
- // Invoked by the Widget to discover what rectangle should be painted.
- const gfx::Rect& GetScheduledPaintRect();
-
- // Returns the region scheduled to paint clipped to the RootViews bounds.
- gfx::Rect GetScheduledPaintRectConstrainedToSize();
-
- // Tree functions
-
- // Get the Widget that hosts this View.
- virtual Widget* GetWidget() const;
-
- // Public API for broadcasting theme change notifications to this View
- // hierarchy.
- virtual void ThemeChanged();
-
- // The following event methods are overridden to propagate event to the
- // control tree
- virtual bool OnMousePressed(const MouseEvent& e);
- virtual bool OnMouseDragged(const MouseEvent& e);
- virtual void OnMouseReleased(const MouseEvent& e, bool canceled);
- virtual void OnMouseMoved(const MouseEvent& e);
- virtual void SetMouseHandler(View* new_mouse_handler);
-
- // Invoked when the Widget has been fully initialized.
- // At the time the constructor is invoked the Widget may not be completely
- // initialized, when this method is invoked, it is.
- void OnWidgetCreated();
-
- // Invoked prior to the Widget being destroyed.
- void OnWidgetDestroyed();
-
- // Invoked By the Widget if the mouse drag is interrupted by
- // the system. Invokes OnMouseReleased with a value of true for canceled.
- void ProcessMouseDragCanceled();
-
- // Invoked by the Widget instance when the mouse moves outside of the Widget
- // bounds.
- virtual void ProcessOnMouseExited();
-
- // Make the provided view focused. Also make sure that our Widget is focused.
- void FocusView(View* view);
-
- // Check whether the provided view is in the focus path. The focus path is the
- // path between the focused view (included) to the root view.
- bool IsInFocusPath(View* view);
-
- // Returns the View in this RootView hierarchy that has the focus, or NULL if
- // no View currently has the focus.
- View* GetFocusedView();
-
- // Process a key event. Send the event to the focused view and up the focus
- // path, and finally to the default keyboard handler, until someone consumes
- // it. Returns whether anyone consumed the event.
- bool ProcessKeyEvent(const KeyEvent& event);
-
- // Set the default keyboard handler. The default keyboard handler is
- // a view that will get an opportunity to process key events when all
- // views in the focus path did not process an event.
- //
- // Note: this is a single view at this point. We may want to make
- // this a list if needed.
- void SetDefaultKeyboardHandler(View* v);
-
- // Set whether this root view should focus the corresponding hwnd
- // when an unprocessed mouse event occurs.
- void SetFocusOnMousePressed(bool f);
-
- // Process a mousewheel event. Return true if the event was processed
- // and false otherwise.
- // MouseWheel events are sent on the focus path.
- virtual bool ProcessMouseWheelEvent(const MouseWheelEvent& e);
-
- // Overridden to handle special root view case.
- virtual bool IsVisibleInRootView() const;
-
- // Sets a listener that receives focus changes events.
- void SetFocusListener(FocusListener* listener);
-
- // FocusTraversable implementation.
- virtual View* FindNextFocusableView(View* starting_view,
- bool reverse,
- Direction direction,
- bool dont_loop,
- FocusTraversable** focus_traversable,
- View** focus_traversable_view);
- virtual FocusTraversable* GetFocusTraversableParent();
- virtual View* GetFocusTraversableParentView();
-
- // Used to set the FocusTraversable parent after the view has been created
- // (typically when the hierarchy changes and this RootView is added/removed).
- virtual void SetFocusTraversableParent(FocusTraversable* focus_traversable);
-
- // Used to set the View parent after the view has been created.
- virtual void SetFocusTraversableParentView(View* view);
-
- // Returns the name of this class: chrome/views/RootView
- virtual std::string GetClassName() const;
-
- // Clears the region that is schedule to be painted. You nearly never need
- // to invoke this. This is primarily intended for Widgets.
- void ClearPaintRect();
-
-#if defined(OS_WIN)
- // Invoked from the Widget to service a WM_PAINT call.
- void OnPaint(HWND hwnd);
-#elif defined(OS_LINUX)
- void OnPaint(GdkEventExpose* event);
-#endif
-
- // Accessibility accessors/mutators, overridden from View.
- virtual bool GetAccessibleRole(AccessibilityTypes::Role* role);
- virtual bool GetAccessibleName(std::wstring* name);
- virtual void SetAccessibleName(const std::wstring& name);
-
- protected:
-
- // Overridden to properly reset our event propagation member
- // variables when a child is removed
- virtual void ViewHierarchyChanged(bool is_add, View *parent, View *child);
-
-#ifndef NDEBUG
- virtual bool IsProcessingPaint() const { return is_processing_paint_; }
-#endif
-
- private:
- friend class View;
- friend class PaintTask;
-
- RootView();
- DISALLOW_EVIL_CONSTRUCTORS(RootView);
-
- // Convert a point to our current mouse handler. Returns false if the
- // mouse handler is not connected to a Widget. In that case, the
- // conversion cannot take place and *p is unchanged
- bool ConvertPointToMouseHandler(const gfx::Point& l, gfx::Point *p);
-
- // Update the cursor given a mouse event. This is called by non mouse_move
- // event handlers to honor the cursor desired by views located under the
- // cursor during drag operations.
- void UpdateCursor(const MouseEvent& e);
-
- // Notification that size and/or position of a view has changed. This
- // notifies the appropriate views.
- void ViewBoundsChanged(View* view, bool size_changed, bool position_changed);
-
- // Registers a view for notification when the visible bounds relative to the
- // root of a view changes.
- void RegisterViewForVisibleBoundsNotification(View* view);
- void UnregisterViewForVisibleBoundsNotification(View* view);
-
- // Returns the next focusable view or view containing a FocusTraversable (NULL
- // if none was found), starting at the starting_view.
- // skip_starting_view, can_go_up and can_go_down controls the traversal of
- // the views hierarchy.
- // skip_group_id specifies a group_id, -1 means no group. All views from a
- // group are traversed in one pass.
- View* FindNextFocusableViewImpl(View* starting_view,
- bool skip_starting_view,
- bool can_go_up,
- bool can_go_down,
- int skip_group_id);
-
- // Same as FindNextFocusableViewImpl but returns the previous focusable view.
- View* FindPreviousFocusableViewImpl(View* starting_view,
- bool skip_starting_view,
- bool can_go_up,
- bool can_go_down,
- int skip_group_id);
-
- // Convenience method that returns true if a view is focusable and does not
- // belong to the specified group.
- bool IsViewFocusableCandidate(View* v, int skip_group_id);
-
- // Returns the view selected for the group of the selected view. If the view
- // does not belong to a group or if no view is selected in the group, the
- // specified view is returned.
- static View* FindSelectedViewForGroup(View* view);
-
- // Updates the last_mouse_* fields from e.
- void SetMouseLocationAndFlags(const MouseEvent& e);
-
-#if defined(OS_WIN)
- // Starts a drag operation for the specified view. This blocks until done.
- // If the view has not been deleted during the drag, OnDragDone is invoked
- // on the view.
- void StartDragForViewFromMouseEvent(View* view,
- IDataObject* data,
- int operation);
-#endif
-
- // If a view is dragging, this returns it. Otherwise returns NULL.
- View* GetDragView();
-
- // The view currently handing down - drag - up
- View* mouse_pressed_handler_;
-
- // The view currently handling enter / exit
- View* mouse_move_handler_;
-
- // The last view to handle a mouse click, so that we can determine if
- // a double-click lands on the same view as its single-click part.
- View* last_click_handler_;
-
- // The host Widget
- Widget* widget_;
-
- // The rectangle that should be painted
- gfx::Rect invalid_rect_;
-
- // Whether the current invalid rect should be painted urgently.
- bool invalid_rect_urgent_;
-
- // The task that we are using to trigger some non urgent painting or NULL
- // if no painting has been scheduled yet.
- PaintTask* pending_paint_task_;
-
- // Indicate if, when the pending_paint_task_ is run, actual painting is still
- // required.
- bool paint_task_needed_;
-
- // true if mouse_handler_ has been explicitly set
- bool explicit_mouse_handler_;
-
-#if defined(OS_WIN)
- // Previous cursor
- HCURSOR previous_cursor_;
-#endif
-
- // Default keyboard handler
- View* default_keyboard_handler_;
-
- // The listener that gets focus change notifications.
- FocusListener* focus_listener_;
-
- // Whether this root view should make our hwnd focused
- // when an unprocessed mouse press event occurs
- bool focus_on_mouse_pressed_;
-
- // Flag used to ignore focus events when we focus the native window associated
- // with a view.
- bool ignore_set_focus_calls_;
-
- // Whether this root view belongs to the current active window.
- // bool activated_;
-
- // Last position/flag of a mouse press/drag. Used if capture stops and we need
- // to synthesize a release.
- int last_mouse_event_flags_;
- int last_mouse_event_x_;
- int last_mouse_event_y_;
-
- // The parent FocusTraversable, used for focus traversal.
- FocusTraversable* focus_traversable_parent_;
-
- // The View that contains this RootView. This is used when we have RootView
- // wrapped inside native components, and is used for the focus traversal.
- View* focus_traversable_parent_view_;
-
-#if defined(OS_WIN)
- // Handles dnd for us.
- scoped_refptr<RootViewDropTarget> drop_target_;
-#endif
-
- // Storage of strings needed for accessibility.
- std::wstring accessible_name_;
-
- // Tracks drag state for a view.
- View::DragInfo drag_info;
-
- // Valid for the lifetime of StartDragForViewFromMouseEvent, indicates the
- // view the drag started from.
- View* drag_view_;
-
-#ifndef NDEBUG
- // True if we're currently processing paint.
- bool is_processing_paint_;
-#endif
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_WIDGET_ROOT_VIEW_H_
diff --git a/chrome/views/widget/root_view_drop_target.cc b/chrome/views/widget/root_view_drop_target.cc
deleted file mode 100644
index 832caac..0000000
--- a/chrome/views/widget/root_view_drop_target.cc
+++ /dev/null
@@ -1,118 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/widget/root_view_drop_target.h"
-
-#include "app/drag_drop_types.h"
-#include "base/gfx/point.h"
-#include "chrome/views/widget/root_view.h"
-#include "chrome/views/widget/widget.h"
-
-namespace views {
-
-RootViewDropTarget::RootViewDropTarget(RootView* root_view)
- : BaseDropTarget(root_view->GetWidget()->GetNativeView()),
- root_view_(root_view),
- target_view_(NULL),
- deepest_view_(NULL) {
-}
-
-RootViewDropTarget::~RootViewDropTarget() {
-}
-
-void RootViewDropTarget::ResetTargetViewIfEquals(View* view) {
- if (target_view_ == view)
- target_view_ = NULL;
- if (deepest_view_ == view)
- deepest_view_ = NULL;
-}
-
-DWORD RootViewDropTarget::OnDragOver(IDataObject* data_object,
- DWORD key_state,
- POINT cursor_position,
- DWORD effect) {
- const OSExchangeData data(data_object);
- gfx::Point root_view_location(cursor_position.x, cursor_position.y);
- View::ConvertPointToView(NULL, root_view_, &root_view_location);
- View* view = CalculateTargetView(root_view_location, data);
-
- if (view != target_view_) {
- // Target changed notify old drag exited, then new drag entered.
- if (target_view_)
- target_view_->OnDragExited();
- target_view_ = view;
- if (target_view_) {
- gfx::Point target_view_location(root_view_location);
- View::ConvertPointToView(root_view_, target_view_, &target_view_location);
- DropTargetEvent enter_event(data,
- target_view_location.x(),
- target_view_location.y(),
- DragDropTypes::DropEffectToDragOperation(effect));
- target_view_->OnDragEntered(enter_event);
- }
- }
-
- if (target_view_) {
- gfx::Point target_view_location(root_view_location);
- View::ConvertPointToView(root_view_, target_view_, &target_view_location);
- DropTargetEvent enter_event(data,
- target_view_location.x(),
- target_view_location.y(),
- DragDropTypes::DropEffectToDragOperation(effect));
- int result_operation = target_view_->OnDragUpdated(enter_event);
- return DragDropTypes::DragOperationToDropEffect(result_operation);
- } else {
- return DROPEFFECT_NONE;
- }
-}
-
-void RootViewDropTarget::OnDragLeave(IDataObject* data_object) {
- if (target_view_)
- target_view_->OnDragExited();
- deepest_view_ = target_view_ = NULL;
-}
-
-DWORD RootViewDropTarget::OnDrop(IDataObject* data_object,
- DWORD key_state,
- POINT cursor_position,
- DWORD effect) {
- const OSExchangeData data(data_object);
- DWORD drop_effect = OnDragOver(data_object, key_state, cursor_position,
- effect);
- View* drop_view = target_view_;
- deepest_view_ = target_view_ = NULL;
- if (drop_effect != DROPEFFECT_NONE) {
- gfx::Point view_location(cursor_position.x, cursor_position.y);
- View::ConvertPointToView(NULL, drop_view, &view_location);
- DropTargetEvent drop_event(data, view_location.x(), view_location.y(),
- DragDropTypes::DropEffectToDragOperation(effect));
- return DragDropTypes::DragOperationToDropEffect(
- drop_view->OnPerformDrop(drop_event));
- } else {
- if (drop_view)
- drop_view->OnDragExited();
- return DROPEFFECT_NONE;
- }
-}
-
-View* RootViewDropTarget::CalculateTargetView(
- const gfx::Point& root_view_location,
- const OSExchangeData& data) {
- View* view = root_view_->GetViewForPoint(root_view_location);
- if (view == deepest_view_) {
- // The view the mouse is over hasn't changed; reuse the target.
- return target_view_;
- }
- // View under mouse changed, which means a new view may want the drop.
- // Walk the tree, stopping at target_view_ as we know it'll accept the
- // drop.
- deepest_view_ = view;
- while (view && view != target_view_ &&
- (!view->IsEnabled() || !view->CanDrop(data))) {
- view = view->GetParent();
- }
- return view;
-}
-
-} // namespace views
diff --git a/chrome/views/widget/root_view_drop_target.h b/chrome/views/widget/root_view_drop_target.h
deleted file mode 100644
index 3e3aec1..0000000
--- a/chrome/views/widget/root_view_drop_target.h
+++ /dev/null
@@ -1,75 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_WIDGET_ROOT_VIEW_DROP_TARGET_H_
-#define CHROME_VIEWS_WIDGET_ROOT_VIEW_DROP_TARGET_H_
-
-#include <atlbase.h>
-#include <atlapp.h>
-#include <atlmisc.h>
-
-#include "app/os_exchange_data.h"
-#include "base/base_drop_target.h"
-
-namespace gfx {
-class Point;
-}
-
-namespace views {
-
-class RootView;
-class View;
-
-// RootViewDropTarget takes care of managing drag and drop for the RootView and
-// converts Windows OLE drop messages into Views drop messages.
-//
-// RootViewDropTarget is responsible for determining the appropriate View to
-// use during a drag and drop session, and forwarding events to it.
-class RootViewDropTarget : public BaseDropTarget {
- public:
- explicit RootViewDropTarget(RootView* root_view);
- virtual ~RootViewDropTarget();
-
- // If a drag and drop is underway and view is the current drop target, the
- // drop target is set to null.
- // This is invoked when a View is removed from the RootView to make sure
- // we don't target a view that was removed during dnd.
- void ResetTargetViewIfEquals(View* view);
-
- protected:
- virtual DWORD OnDragOver(IDataObject* data_object,
- DWORD key_state,
- POINT cursor_position,
- DWORD effect);
-
- virtual void OnDragLeave(IDataObject* data_object);
-
- virtual DWORD OnDrop(IDataObject* data_object,
- DWORD key_state,
- POINT cursor_position,
- DWORD effect);
-
- private:
- // Calculates the target view for a drop given the specified location in
- // the coordinate system of the rootview. This tries to avoid continually
- // querying CanDrop by returning target_view_ if the mouse is still over
- // target_view_.
- View* CalculateTargetView(const gfx::Point& root_view_location,
- const OSExchangeData& data);
-
- // RootView we were created for.
- RootView* root_view_;
-
- // View we're targeting events at.
- View* target_view_;
-
- // The deepest view under the current drop coordinate.
- View* deepest_view_;
-
- DISALLOW_EVIL_CONSTRUCTORS(RootViewDropTarget);
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_WIDGET_ROOT_VIEW_DROP_TARGET_H_
diff --git a/chrome/views/widget/root_view_gtk.cc b/chrome/views/widget/root_view_gtk.cc
deleted file mode 100644
index 8ff19e4..0000000
--- a/chrome/views/widget/root_view_gtk.cc
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/widget/root_view.h"
-
-#include <gtk/gtk.h>
-
-#include "app/gfx/chrome_canvas.h"
-#include "base/logging.h"
-#include "skia/include/SkColor.h"
-
-namespace views {
-
-void RootView::UpdateCursor(const MouseEvent& e) {
- NOTIMPLEMENTED();
-}
-
-void RootView::OnPaint(GdkEventExpose* event) {
- ChromeCanvasPaint canvas(event);
-
- if (!canvas.isEmpty()) {
- SchedulePaint(gfx::Rect(canvas.rectangle()), false);
- if (NeedsPainting(false)) {
- ProcessPaint(&canvas);
- }
- }
-}
-
-}
diff --git a/chrome/views/widget/root_view_win.cc b/chrome/views/widget/root_view_win.cc
deleted file mode 100644
index 14bd9c5..0000000
--- a/chrome/views/widget/root_view_win.cc
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/widget/root_view.h"
-
-#include "app/drag_drop_types.h"
-#include "app/gfx/chrome_canvas.h"
-#include "base/base_drag_source.h"
-#include "base/logging.h"
-#include "chrome/views/widget/root_view_drop_target.h"
-
-namespace views {
-
-void RootView::UpdateCursor(const MouseEvent& e) {
- View *v = GetViewForPoint(e.location());
-
- if (v && v != this) {
- gfx::Point l(e.location());
- View::ConvertPointToView(this, v, &l);
- HCURSOR cursor = v->GetCursorForPoint(e.GetType(), l.x(), l.y());
- if (cursor) {
- ::SetCursor(cursor);
- return;
- }
- }
- if (previous_cursor_) {
- SetCursor(previous_cursor_);
- }
-}
-
-void RootView::OnPaint(HWND hwnd) {
- gfx::Rect original_dirty_region = GetScheduledPaintRectConstrainedToSize();
- if (!original_dirty_region.IsEmpty()) {
- // Invoke InvalidateRect so that the dirty region of the window includes the
- // region we need to paint. If we didn't do this and the region didn't
- // include the dirty region, ProcessPaint would incorrectly mark everything
- // as clean. This can happen if a WM_PAINT is generated by the system before
- // the InvokeLater schedule by RootView is processed.
- RECT win_version = original_dirty_region.ToRECT();
- InvalidateRect(hwnd, &win_version, FALSE);
- }
- ChromeCanvasPaint canvas(hwnd);
- if (!canvas.isEmpty()) {
- const PAINTSTRUCT& ps = canvas.paintStruct();
- SchedulePaint(gfx::Rect(ps.rcPaint), false);
- if (NeedsPainting(false))
- ProcessPaint(&canvas);
- }
-}
-
-void RootView::StartDragForViewFromMouseEvent(
- View* view,
- IDataObject* data,
- int operation) {
- drag_view_ = view;
- scoped_refptr<BaseDragSource> drag_source(new BaseDragSource);
- DWORD effects;
- DoDragDrop(data, drag_source,
- DragDropTypes::DragOperationToDropEffect(operation), &effects);
- // If the view is removed during the drag operation, drag_view_ is set to
- // NULL.
- if (drag_view_ == view) {
- View* drag_view = drag_view_;
- drag_view_ = NULL;
- drag_view->OnDragDone();
- }
-}
-
-}
diff --git a/chrome/views/widget/tooltip_manager.cc b/chrome/views/widget/tooltip_manager.cc
deleted file mode 100644
index 1584c29..0000000
--- a/chrome/views/widget/tooltip_manager.cc
+++ /dev/null
@@ -1,447 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/widget/tooltip_manager.h"
-
-#include <limits>
-
-#include "app/l10n_util.h"
-#include "app/l10n_util_win.h"
-#include "base/logging.h"
-#include "base/message_loop.h"
-#include "chrome/common/gfx/text_elider.h"
-#include "chrome/common/win_util.h"
-#include "chrome/views/view.h"
-#include "chrome/views/widget/root_view.h"
-#include "chrome/views/widget/widget.h"
-
-namespace views {
-
-//static
-int TooltipManager::tooltip_height_ = 0;
-
-// Default timeout for the tooltip displayed using keyboard.
-// Timeout is mentioned in milliseconds.
-static const int kDefaultTimeout = 4000;
-
-// Maximum number of lines we allow in the tooltip.
-static const int kMaxLines = 6;
-
-// Maximum number of characters we allow in a tooltip.
-static const int kMaxTooltipLength = 1024;
-
-// Breaks |text| along line boundaries, placing each line of text into lines.
-static void SplitTooltipString(const std::wstring& text,
- std::vector<std::wstring>* lines) {
- size_t index = 0;
- size_t next_index;
- while ((next_index = text.find(TooltipManager::GetLineSeparator(), index))
- != std::wstring::npos && lines->size() < kMaxLines) {
- lines->push_back(text.substr(index, next_index - index));
- index = next_index + TooltipManager::GetLineSeparator().size();
- }
- if (next_index != text.size() && lines->size() < kMaxLines)
- lines->push_back(text.substr(index, text.size() - index));
-}
-
-// static
-int TooltipManager::GetTooltipHeight() {
- DCHECK(tooltip_height_ > 0);
- return tooltip_height_;
-}
-
-static ChromeFont DetermineDefaultFont() {
- HWND window = CreateWindowEx(
- WS_EX_TRANSPARENT | l10n_util::GetExtendedTooltipStyles(),
- TOOLTIPS_CLASS, NULL, 0 , 0, 0, 0, 0, NULL, NULL, NULL, NULL);
- HFONT hfont = reinterpret_cast<HFONT>(SendMessage(window, WM_GETFONT, 0, 0));
- ChromeFont font = hfont ? ChromeFont::CreateFont(hfont) : ChromeFont();
- DestroyWindow(window);
- return font;
-}
-
-// static
-ChromeFont TooltipManager::GetDefaultFont() {
- static ChromeFont* font = NULL;
- if (!font)
- font = new ChromeFont(DetermineDefaultFont());
- return *font;
-}
-
-// static
-const std::wstring& TooltipManager::GetLineSeparator() {
- static const std::wstring* separator = NULL;
- if (!separator)
- separator = new std::wstring(L"\r\n");
- return *separator;
-}
-
-TooltipManager::TooltipManager(Widget* widget, HWND parent)
- : widget_(widget),
- parent_(parent),
- last_mouse_x_(-1),
- last_mouse_y_(-1),
- tooltip_showing_(false),
- last_tooltip_view_(NULL),
- last_view_out_of_sync_(false),
- tooltip_width_(0),
- keyboard_tooltip_hwnd_(NULL),
-#pragma warning(suppress: 4355)
- keyboard_tooltip_factory_(this) {
- DCHECK(widget && parent);
- Init();
-}
-
-TooltipManager::~TooltipManager() {
- if (tooltip_hwnd_)
- DestroyWindow(tooltip_hwnd_);
- if (keyboard_tooltip_hwnd_)
- DestroyWindow(keyboard_tooltip_hwnd_);
-}
-
-void TooltipManager::Init() {
- // Create the tooltip control.
- tooltip_hwnd_ = CreateWindowEx(
- WS_EX_TRANSPARENT | l10n_util::GetExtendedTooltipStyles(),
- TOOLTIPS_CLASS, NULL, TTS_NOPREFIX, 0, 0, 0, 0,
- parent_, NULL, NULL, NULL);
-
- l10n_util::AdjustUIFontForWindow(tooltip_hwnd_);
-
- // This effectively turns off clipping of tooltips. We need this otherwise
- // multi-line text (\r\n) won't work right. The size doesn't really matter
- // (just as long as its bigger than the monitor's width) as we clip to the
- // screen size before rendering.
- SendMessage(tooltip_hwnd_, TTM_SETMAXTIPWIDTH, 0,
- std::numeric_limits<short>::max());
-
- // Add one tool that is used for all tooltips.
- toolinfo_.cbSize = sizeof(toolinfo_);
- toolinfo_.uFlags = TTF_TRANSPARENT | TTF_IDISHWND;
- toolinfo_.hwnd = parent_;
- toolinfo_.uId = reinterpret_cast<UINT_PTR>(parent_);
- // Setting this tells windows to call parent_ back (using a WM_NOTIFY
- // message) for the actual tooltip contents.
- toolinfo_.lpszText = LPSTR_TEXTCALLBACK;
- SetRectEmpty(&toolinfo_.rect);
- SendMessage(tooltip_hwnd_, TTM_ADDTOOL, 0, (LPARAM)&toolinfo_);
-}
-
-void TooltipManager::UpdateTooltip() {
- // Set last_view_out_of_sync_ to indicate the view is currently out of sync.
- // This doesn't update the view under the mouse immediately as it may cause
- // timing problems.
- last_view_out_of_sync_ = true;
- last_tooltip_view_ = NULL;
- // Hide the tooltip.
- SendMessage(tooltip_hwnd_, TTM_POP, 0, 0);
-}
-
-void TooltipManager::TooltipTextChanged(View* view) {
- if (view == last_tooltip_view_)
- UpdateTooltip(last_mouse_x_, last_mouse_y_);
-}
-
-LRESULT TooltipManager::OnNotify(int w_param, NMHDR* l_param, bool* handled) {
- *handled = false;
- if (l_param->hwndFrom == tooltip_hwnd_ && keyboard_tooltip_hwnd_ == NULL) {
- switch (l_param->code) {
- case TTN_GETDISPINFO: {
- if (last_view_out_of_sync_) {
- // View under the mouse is out of sync, determine it now.
- RootView* root_view = widget_->GetRootView();
- last_tooltip_view_ = root_view->GetViewForPoint(
- gfx::Point(last_mouse_x_, last_mouse_y_));
- last_view_out_of_sync_ = false;
- }
- // Tooltip control is asking for the tooltip to display.
- NMTTDISPINFOW* tooltip_info =
- reinterpret_cast<NMTTDISPINFOW*>(l_param);
- // Initialize the string, if we have a valid tooltip the string will
- // get reset below.
- tooltip_info->szText[0] = TEXT('\0');
- tooltip_text_.clear();
- tooltip_info->lpszText = NULL;
- clipped_text_.clear();
- if (last_tooltip_view_ != NULL) {
- tooltip_text_.clear();
- // Mouse is over a View, ask the View for it's tooltip.
- gfx::Point view_loc(last_mouse_x_, last_mouse_y_);
- View::ConvertPointToView(widget_->GetRootView(),
- last_tooltip_view_, &view_loc);
- if (last_tooltip_view_->GetTooltipText(view_loc.x(), view_loc.y(),
- &tooltip_text_) &&
- !tooltip_text_.empty()) {
- // View has a valid tip, copy it into TOOLTIPINFO.
- clipped_text_ = tooltip_text_;
- TrimTooltipToFit(&clipped_text_, &tooltip_width_, &line_count_,
- last_mouse_x_, last_mouse_y_, tooltip_hwnd_);
- // Adjust the clipped tooltip text for locale direction.
- l10n_util::AdjustStringForLocaleDirection(clipped_text_,
- &clipped_text_);
- tooltip_info->lpszText = const_cast<WCHAR*>(clipped_text_.c_str());
- } else {
- tooltip_text_.clear();
- }
- }
- *handled = true;
- return 0;
- }
- case TTN_POP:
- tooltip_showing_ = false;
- *handled = true;
- return 0;
- case TTN_SHOW: {
- *handled = true;
- tooltip_showing_ = true;
- // The tooltip is about to show, allow the view to position it
- gfx::Point text_origin;
- if (tooltip_height_ == 0)
- tooltip_height_ = CalcTooltipHeight();
- gfx::Point view_loc(last_mouse_x_, last_mouse_y_);
- View::ConvertPointToView(widget_->GetRootView(),
- last_tooltip_view_, &view_loc);
- if (last_tooltip_view_->GetTooltipTextOrigin(
- view_loc.x(), view_loc.y(), &text_origin) &&
- SetTooltipPosition(text_origin.x(), text_origin.y())) {
- // Return true, otherwise the rectangle we specified is ignored.
- return TRUE;
- }
- return 0;
- }
- default:
- // Fall through.
- break;
- }
- }
- return 0;
-}
-
-bool TooltipManager::SetTooltipPosition(int text_x, int text_y) {
- // NOTE: this really only tests that the y location fits on screen, but that
- // is good enough for our usage.
-
- // Calculate the bounds the tooltip will get.
- gfx::Point view_loc;
- View::ConvertPointToScreen(last_tooltip_view_, &view_loc);
- RECT bounds = { view_loc.x() + text_x,
- view_loc.y() + text_y,
- view_loc.x() + text_x + tooltip_width_,
- view_loc.y() + line_count_ * GetTooltipHeight() };
- SendMessage(tooltip_hwnd_, TTM_ADJUSTRECT, TRUE, (LPARAM)&bounds);
-
- // Make sure the rectangle completely fits on the current monitor. If it
- // doesn't, return false so that windows positions the tooltip at the
- // default location.
- gfx::Rect monitor_bounds =
- win_util::GetMonitorBoundsForRect(gfx::Rect(bounds.left,bounds.right,
- 0, 0));
- if (!monitor_bounds.Contains(gfx::Rect(bounds))) {
- return false;
- }
-
- ::SetWindowPos(tooltip_hwnd_, NULL, bounds.left, bounds.top, 0, 0,
- SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOSIZE);
- return true;
-}
-
-int TooltipManager::CalcTooltipHeight() {
- // Ask the tooltip for it's font.
- int height;
- HFONT hfont = reinterpret_cast<HFONT>(
- SendMessage(tooltip_hwnd_, WM_GETFONT, 0, 0));
- if (hfont != NULL) {
- HDC dc = GetDC(tooltip_hwnd_);
- HFONT previous_font = static_cast<HFONT>(SelectObject(dc, hfont));
- int last_map_mode = SetMapMode(dc, MM_TEXT);
- TEXTMETRIC font_metrics;
- GetTextMetrics(dc, &font_metrics);
- height = font_metrics.tmHeight;
- // To avoid the DC referencing font_handle_, select the previous font.
- SelectObject(dc, previous_font);
- SetMapMode(dc, last_map_mode);
- ReleaseDC(NULL, dc);
- } else {
- // Tooltip is using the system font. Use ChromeFont, which should pick
- // up the system font.
- height = ChromeFont().height();
- }
- // Get the margins from the tooltip
- RECT tooltip_margin;
- SendMessage(tooltip_hwnd_, TTM_GETMARGIN, 0, (LPARAM)&tooltip_margin);
- return height + tooltip_margin.top + tooltip_margin.bottom;
-}
-
-void TooltipManager::TrimTooltipToFit(std::wstring* text,
- int* max_width,
- int* line_count,
- int position_x,
- int position_y,
- HWND window) {
- *max_width = 0;
- *line_count = 0;
-
- // Clamp the tooltip length to kMaxTooltipLength so that we don't
- // accidentally DOS the user with a mega tooltip (since Windows doesn't seem
- // to do this itself).
- if (text->length() > kMaxTooltipLength)
- *text = text->substr(0, kMaxTooltipLength);
-
- // Determine the available width for the tooltip.
- gfx::Point screen_loc(position_x, position_y);
- View::ConvertPointToScreen(widget_->GetRootView(), &screen_loc);
- gfx::Rect monitor_bounds =
- win_util::GetMonitorBoundsForRect(gfx::Rect(screen_loc.x(),
- screen_loc.y(),
- 0, 0));
- RECT tooltip_margin;
- SendMessage(window, TTM_GETMARGIN, 0, (LPARAM)&tooltip_margin);
- const int available_width = monitor_bounds.width() - tooltip_margin.left -
- tooltip_margin.right;
- if (available_width <= 0)
- return;
-
- // Split the string.
- std::vector<std::wstring> lines;
- SplitTooltipString(*text, &lines);
- *line_count = static_cast<int>(lines.size());
-
- // Format each line to fit.
- ChromeFont font = GetDefaultFont();
- std::wstring result;
- for (std::vector<std::wstring>::iterator i = lines.begin(); i != lines.end();
- ++i) {
- std::wstring elided_text = gfx::ElideText(*i, font, available_width);
- *max_width = std::max(*max_width, font.GetStringWidth(elided_text));
- if (i == lines.begin() && i + 1 == lines.end()) {
- *text = elided_text;
- return;
- }
- if (!result.empty())
- result.append(GetLineSeparator());
- result.append(elided_text);
- }
- *text = result;
-}
-
-void TooltipManager::UpdateTooltip(int x, int y) {
- RootView* root_view = widget_->GetRootView();
- View* view = root_view->GetViewForPoint(gfx::Point(x, y));
- if (view != last_tooltip_view_) {
- // NOTE: This *must* be sent regardless of the visibility of the tooltip.
- // It triggers Windows to ask for the tooltip again.
- SendMessage(tooltip_hwnd_, TTM_POP, 0, 0);
- last_tooltip_view_ = view;
- } else if (last_tooltip_view_ != NULL) {
- // Tooltip is showing, and mouse is over the same view. See if the tooltip
- // text has changed.
- gfx::Point view_point(x, y);
- View::ConvertPointToView(root_view, last_tooltip_view_, &view_point);
- std::wstring new_tooltip_text;
- if (last_tooltip_view_->GetTooltipText(view_point.x(), view_point.y(),
- &new_tooltip_text) &&
- new_tooltip_text != tooltip_text_) {
- // The text has changed, hide the popup.
- SendMessage(tooltip_hwnd_, TTM_POP, 0, 0);
- if (!new_tooltip_text.empty() && tooltip_showing_) {
- // New text is valid, show the popup.
- SendMessage(tooltip_hwnd_, TTM_POPUP, 0, 0);
- }
- }
- }
-}
-
-void TooltipManager::OnMouse(UINT u_msg, WPARAM w_param, LPARAM l_param) {
- int x = GET_X_LPARAM(l_param);
- int y = GET_Y_LPARAM(l_param);
-
- if (u_msg >= WM_NCMOUSEMOVE && u_msg <= WM_NCXBUTTONDBLCLK) {
- // NC message coordinates are in screen coordinates.
- gfx::Rect frame_bounds;
- widget_->GetBounds(&frame_bounds, true);
- x -= frame_bounds.x();
- y -= frame_bounds.y();
- }
-
- if (u_msg != WM_MOUSEMOVE || last_mouse_x_ != x || last_mouse_y_ != y) {
- last_mouse_x_ = x;
- last_mouse_y_ = y;
- HideKeyboardTooltip();
- UpdateTooltip(x, y);
- }
- // Forward the message onto the tooltip.
- MSG msg;
- msg.hwnd = parent_;
- msg.message = u_msg;
- msg.wParam = w_param;
- msg.lParam = l_param;
- SendMessage(tooltip_hwnd_, TTM_RELAYEVENT, 0, (LPARAM)&msg);
-}
-
-void TooltipManager::ShowKeyboardTooltip(View* focused_view) {
- if (tooltip_showing_) {
- SendMessage(tooltip_hwnd_, TTM_POP, 0, 0);
- tooltip_text_.clear();
- }
- HideKeyboardTooltip();
- std::wstring tooltip_text;
- if (!focused_view->GetTooltipText(0, 0, &tooltip_text))
- return;
- gfx::Rect focused_bounds = focused_view->bounds();
- gfx::Point screen_point;
- focused_view->ConvertPointToScreen(focused_view, &screen_point);
- gfx::Point relative_point_coordinates;
- focused_view->ConvertPointToWidget(focused_view, &relative_point_coordinates);
- keyboard_tooltip_hwnd_ = CreateWindowEx(
- WS_EX_TRANSPARENT | l10n_util::GetExtendedTooltipStyles(),
- TOOLTIPS_CLASS, NULL, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL);
- SendMessage(keyboard_tooltip_hwnd_, TTM_SETMAXTIPWIDTH, 0,
- std::numeric_limits<short>::max());
- int tooltip_width;
- int line_count;
- TrimTooltipToFit(&tooltip_text, &tooltip_width, &line_count,
- relative_point_coordinates.x(),
- relative_point_coordinates.y(), keyboard_tooltip_hwnd_);
- TOOLINFO keyboard_toolinfo;
- memset(&keyboard_toolinfo, 0, sizeof(keyboard_toolinfo));
- keyboard_toolinfo.cbSize = sizeof(keyboard_toolinfo);
- keyboard_toolinfo.hwnd = parent_;
- keyboard_toolinfo.uFlags = TTF_TRACK | TTF_TRANSPARENT | TTF_IDISHWND ;
- keyboard_toolinfo.lpszText = const_cast<WCHAR*>(tooltip_text.c_str());
- SendMessage(keyboard_tooltip_hwnd_, TTM_ADDTOOL, 0,
- reinterpret_cast<LPARAM>(&keyboard_toolinfo));
- SendMessage(keyboard_tooltip_hwnd_, TTM_TRACKACTIVATE, TRUE,
- reinterpret_cast<LPARAM>(&keyboard_toolinfo));
- if (!tooltip_height_)
- tooltip_height_ = CalcTooltipHeight();
- RECT rect_bounds = {screen_point.x(),
- screen_point.y() + focused_bounds.height(),
- screen_point.x() + tooltip_width,
- screen_point.y() + focused_bounds.height() +
- line_count * tooltip_height_ };
- gfx::Rect monitor_bounds =
- win_util::GetMonitorBoundsForRect(gfx::Rect(rect_bounds));
- rect_bounds = gfx::Rect(rect_bounds).AdjustToFit(monitor_bounds).ToRECT();
- ::SetWindowPos(keyboard_tooltip_hwnd_, NULL, rect_bounds.left,
- rect_bounds.top, 0, 0,
- SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOSIZE);
- MessageLoop::current()->PostDelayedTask(FROM_HERE,
- keyboard_tooltip_factory_.NewRunnableMethod(
- &TooltipManager::DestroyKeyboardTooltipWindow, keyboard_tooltip_hwnd_),
- kDefaultTimeout);
-}
-
-void TooltipManager::HideKeyboardTooltip() {
- if (keyboard_tooltip_hwnd_ != NULL) {
- SendMessage(keyboard_tooltip_hwnd_, WM_CLOSE, 0, 0);
- keyboard_tooltip_hwnd_ = NULL;
- }
-}
-
-void TooltipManager::DestroyKeyboardTooltipWindow(HWND window_to_destroy) {
- if (keyboard_tooltip_hwnd_ == window_to_destroy)
- HideKeyboardTooltip();
-}
-
-} // namespace views
diff --git a/chrome/views/widget/tooltip_manager.h b/chrome/views/widget/tooltip_manager.h
deleted file mode 100644
index 03e56a1..0000000
--- a/chrome/views/widget/tooltip_manager.h
+++ /dev/null
@@ -1,168 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_WIDGET_TOOLTIP_MANAGER_H_
-#define CHROME_VIEWS_WIDGET_TOOLTIP_MANAGER_H_
-
-#include <windows.h>
-#include <commctrl.h>
-
-#include <string>
-#include "base/basictypes.h"
-#include "base/task.h"
-
-class ChromeFont;
-
-namespace views {
-
-class View;
-class Widget;
-
-// TooltipManager takes care of the wiring to support tooltips for Views.
-// This class is intended to be used by Widgets. To use this, you must
-// do the following:
-// Add the following to your MSG_MAP:
-//
-// MESSAGE_RANGE_HANDLER(WM_MOUSEFIRST, WM_MOUSELAST, OnMouseRange)
-// MESSAGE_RANGE_HANDLER(WM_NCMOUSEMOVE, WM_NCMOUSEMOVE, OnMouseRange)
-// MSG_WM_NOTIFY(OnNotify)
-//
-// With the following implementations:
-// LRESULT XXX::OnMouseRange(UINT u_msg, WPARAM w_param, LPARAM l_param,
-// BOOL& handled) {
-// tooltip_manager_->OnMouse(u_msg, w_param, l_param);
-// handled = FALSE;
-// return 0;
-// }
-//
-// LRESULT XXX::OnNotify(int w_param, NMHDR* l_param) {
-// bool handled;
-// LRESULT result = tooltip_manager_->OnNotify(w_param, l_param, &handled);
-// SetMsgHandled(handled);
-// return result;
-// }
-//
-// And of course you'll need to create the TooltipManager!
-//
-// Lastly, you'll need to override GetTooltipManager.
-//
-// See XPFrame for an example of this in action.
-class TooltipManager {
- public:
- // Returns the height of tooltips. This should only be invoked from within
- // GetTooltipTextOrigin.
- static int GetTooltipHeight();
-
- // Returns the default font used by tooltips.
- static ChromeFont GetDefaultFont();
-
- // Returns the separator for lines of text in a tooltip.
- static const std::wstring& GetLineSeparator();
-
- // Creates a TooltipManager for the specified Widget and parent window.
- TooltipManager(Widget* widget, HWND parent);
- virtual ~TooltipManager();
-
- // Notification that the view hierarchy has changed in some way.
- void UpdateTooltip();
-
- // Invoked when the tooltip text changes for the specified views.
- void TooltipTextChanged(View* view);
-
- // Invoked when toolbar icon gets focus.
- void ShowKeyboardTooltip(View* view);
-
- // Invoked when toolbar loses focus.
- void HideKeyboardTooltip();
-
- // Message handlers. These forward to the tooltip control.
- virtual void OnMouse(UINT u_msg, WPARAM w_param, LPARAM l_param);
- LRESULT OnNotify(int w_param, NMHDR* l_param, bool* handled);
- // Not used directly by TooltipManager, but provided for AeroTooltipManager.
- virtual void OnMouseLeave() {}
-
- protected:
- virtual void Init();
-
- // Updates the tooltip for the specified location.
- void UpdateTooltip(int x, int y);
-
- // Parent window the tooltip is added to.
- HWND parent_;
-
- // Tooltip control window.
- HWND tooltip_hwnd_;
-
- // Tooltip information.
- TOOLINFO toolinfo_;
-
- // Last location of the mouse. This is in the coordinates of the rootview.
- int last_mouse_x_;
- int last_mouse_y_;
-
- // Whether or not the tooltip is showing.
- bool tooltip_showing_;
-
- private:
- // Sets the tooltip position based on the x/y position of the text. If the
- // tooltip fits, true is returned.
- bool SetTooltipPosition(int text_x, int text_y);
-
- // Calculates the preferred height for tooltips. This always returns a
- // positive value.
- int CalcTooltipHeight();
-
- // Trims the tooltip to fit, setting text to the clipped result, width to the
- // width (in pixels) of the clipped text and line_count to the number of lines
- // of text in the tooltip.
- void TrimTooltipToFit(std::wstring* text,
- int* width,
- int* line_count,
- int position_x,
- int position_y,
- HWND window);
-
- // Invoked when the timer elapses and tooltip has to be destroyed.
- void DestroyKeyboardTooltipWindow(HWND window_to_destroy);
-
- // Hosting Widget.
- Widget* widget_;
-
- // The View the mouse is under. This is null if the mouse isn't under a
- // View.
- View* last_tooltip_view_;
-
- // Whether or not the view under the mouse needs to be refreshed. If this
- // is true, when the tooltip is asked for the view under the mouse is
- // refreshed.
- bool last_view_out_of_sync_;
-
- // Text for tooltip from the view.
- std::wstring tooltip_text_;
-
- // The clipped tooltip.
- std::wstring clipped_text_;
-
- // Number of lines in the tooltip.
- int line_count_;
-
- // Width of the last tooltip.
- int tooltip_width_;
-
- // Height for a tooltip; lazily calculated.
- static int tooltip_height_;
-
- // control window for tooltip displayed using keyboard.
- HWND keyboard_tooltip_hwnd_;
-
- // Used to register DestroyTooltipWindow function with PostDelayedTask
- // function.
- ScopedRunnableMethodFactory<TooltipManager> keyboard_tooltip_factory_;
-
- DISALLOW_EVIL_CONSTRUCTORS(TooltipManager);
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_WIDGET_TOOLTIP_MANAGER_H_
diff --git a/chrome/views/widget/widget.h b/chrome/views/widget/widget.h
deleted file mode 100644
index 1b390bc..0000000
--- a/chrome/views/widget/widget.h
+++ /dev/null
@@ -1,81 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_WIDGET_WIDGET_H_
-#define CHROME_VIEWS_WIDGET_WIDGET_H_
-
-#include "base/gfx/native_widget_types.h"
-
-namespace gfx {
-class Rect;
-}
-
-namespace views {
-
-class Accelerator;
-class RootView;
-class TooltipManager;
-class Window;
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// Widget interface
-//
-// Widget is an abstract class that defines the API that should be implemented
-// by a native window in order to host a view hierarchy.
-//
-// Widget wraps a hierarchy of View objects (see view.h) that implement
-// painting and flexible layout within the bounds of the Widget's window.
-//
-// The Widget is responsible for handling various system events and forwarding
-// them to the appropriate view.
-//
-/////////////////////////////////////////////////////////////////////////////
-
-class Widget {
- public:
- virtual ~Widget() { }
-
- // Returns the bounds of this Widget in the screen coordinate system.
- // If the receiving Widget is a frame which is larger than its client area,
- // this method returns the client area if including_frame is false and the
- // frame bounds otherwise. If the receiving Widget is not a frame,
- // including_frame is ignored.
- virtual void GetBounds(gfx::Rect* out, bool including_frame) const = 0;
-
- // Returns the gfx::NativeView associated with this Widget.
- virtual gfx::NativeView GetNativeView() const = 0;
-
- // Forces a paint of a specified rectangle immediately.
- virtual void PaintNow(const gfx::Rect& update_rect) = 0;
-
- // Returns the RootView contained by this Widget.
- virtual RootView* GetRootView() = 0;
-
- // Returns whether the Widget is visible to the user.
- virtual bool IsVisible() const = 0;
-
- // Returns whether the Widget is the currently active window.
- virtual bool IsActive() const = 0;
-
- // Returns the TooltipManager for this Widget. If this Widget does not support
- // tooltips, NULL is returned.
- virtual TooltipManager* GetTooltipManager() {
- return NULL;
- }
-
- // Returns the accelerator given a command id. Returns false if there is
- // no accelerator associated with a given id, which is a common condition.
- virtual bool GetAccelerator(int cmd_id,
- Accelerator* accelerator) = 0;
-
- // Returns the Window containing this Widget, or NULL if not contained in a
- // window.
- virtual Window* GetWindow() { return NULL; }
- virtual const Window* GetWindow() const { return NULL; }
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_WIDGET_WIDGET_H_
diff --git a/chrome/views/widget/widget_gtk.cc b/chrome/views/widget/widget_gtk.cc
deleted file mode 100644
index 39bbd00..0000000
--- a/chrome/views/widget/widget_gtk.cc
+++ /dev/null
@@ -1,508 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/widget/widget_gtk.h"
-
-#include "chrome/views/fill_layout.h"
-#include "chrome/views/widget/root_view.h"
-#include "chrome/views/window/window_gtk.h"
-
-namespace views {
-
-// Returns the position of a widget on screen.
-static void GetWidgetPositionOnScreen(GtkWidget* widget, int* x, int *y) {
- GtkWidget* parent = widget;
- while (parent) {
- if (GTK_IS_WINDOW(widget)) {
- int window_x, window_y;
- gtk_window_get_position(GTK_WINDOW(widget), &window_x, &window_y);
- *x += window_x;
- *y += window_y;
- return;
- }
- // Not a window.
- *x += widget->allocation.x;
- *y += widget->allocation.y;
- parent = gtk_widget_get_parent(parent);
- }
-}
-
-WidgetGtk::WidgetGtk(Type type)
- : type_(type),
- widget_(NULL),
- child_widget_parent_(NULL),
- is_mouse_down_(false),
- last_mouse_event_was_move_(false) {
-}
-
-WidgetGtk::~WidgetGtk() {
- if (widget_) {
- // TODO: make sure this is right.
- gtk_widget_destroy(widget_);
- child_widget_parent_ = widget_ = NULL;
- }
- // MessageLoopForUI::current()->RemoveObserver(this);
-}
-
-void WidgetGtk::Init(const gfx::Rect& bounds,
- bool has_own_focus_manager) {
- // Force creation of the RootView if it hasn't been created yet.
- GetRootView();
-
- // Make container here.
- CreateGtkWidget();
-
- // Make sure we receive our motion events.
-
- // We register everything on the parent of all widgets. At a minimum we need
- // painting to happen on the parent (otherwise painting doesn't work at all),
- // and similarly we need mouse release events on the parent as windows don't
- // get mouse releases.
- gtk_widget_add_events(child_widget_parent_,
- GDK_ENTER_NOTIFY_MASK |
- GDK_LEAVE_NOTIFY_MASK |
- GDK_BUTTON_PRESS_MASK |
- GDK_BUTTON_RELEASE_MASK |
- GDK_POINTER_MOTION_MASK |
- GDK_KEY_PRESS_MASK |
- GDK_KEY_RELEASE_MASK);
-
- root_view_->OnWidgetCreated();
-
- // TODO(port): if(has_own_focus_manager) block
-
- SetRootViewForWidget(widget_, root_view_.get());
-
- // MessageLoopForUI::current()->AddObserver(this);
-
- g_signal_connect_after(G_OBJECT(child_widget_parent_), "size_allocate",
- G_CALLBACK(CallSizeAllocate), NULL);
- g_signal_connect(G_OBJECT(child_widget_parent_), "expose_event",
- G_CALLBACK(CallPaint), NULL);
- g_signal_connect(G_OBJECT(child_widget_parent_), "enter_notify_event",
- G_CALLBACK(CallEnterNotify), NULL);
- g_signal_connect(G_OBJECT(child_widget_parent_), "leave_notify_event",
- G_CALLBACK(CallLeaveNotify), NULL);
- g_signal_connect(G_OBJECT(child_widget_parent_), "motion_notify_event",
- G_CALLBACK(CallMotionNotify), NULL);
- g_signal_connect(G_OBJECT(child_widget_parent_), "button_press_event",
- G_CALLBACK(CallButtonPress), NULL);
- g_signal_connect(G_OBJECT(child_widget_parent_), "button_release_event",
- G_CALLBACK(CallButtonRelease), NULL);
- g_signal_connect(G_OBJECT(child_widget_parent_), "focus_in_event",
- G_CALLBACK(CallFocusIn), NULL);
- g_signal_connect(G_OBJECT(child_widget_parent_), "focus_out_event",
- G_CALLBACK(CallFocusOut), NULL);
- g_signal_connect(G_OBJECT(child_widget_parent_), "key_press_event",
- G_CALLBACK(CallKeyPress), NULL);
- g_signal_connect(G_OBJECT(child_widget_parent_), "key_release_event",
- G_CALLBACK(CallKeyRelease), NULL);
- g_signal_connect(G_OBJECT(child_widget_parent_), "scroll_event",
- G_CALLBACK(CallScroll), NULL);
- g_signal_connect(G_OBJECT(child_widget_parent_), "visibility_notify_event",
- G_CALLBACK(CallVisibilityNotify), NULL);
-
- // TODO(erg): Ignore these signals for now because they're such a drag.
- //
- // g_signal_connect(G_OBJECT(widget_), "drag_motion",
- // G_CALLBACK(drag_motion_event_cb), NULL);
- // g_signal_connect(G_OBJECT(widget_), "drag_leave",
- // G_CALLBACK(drag_leave_event_cb), NULL);
- // g_signal_connect(G_OBJECT(widget_), "drag_drop",
- // G_CALLBACK(drag_drop_event_cb), NULL);
- // g_signal_connect(G_OBJECT(widget_), "drag_data_received",
- // G_CALLBACK(drag_data_received_event_cb), NULL);
-}
-
-void WidgetGtk::AddChild(GtkWidget* child) {
- gtk_container_add(GTK_CONTAINER(child_widget_parent_), child);
-}
-
-void WidgetGtk::RemoveChild(GtkWidget* child) {
- gtk_container_remove(GTK_CONTAINER(child_widget_parent_), child);
-}
-
-void WidgetGtk::PositionChild(GtkWidget* child, int x, int y, int w, int h) {
- GtkAllocation alloc = { x, y, w, h };
- gtk_widget_size_allocate(child, &alloc);
- gtk_fixed_move(GTK_FIXED(child_widget_parent_), child, x, y);
-}
-
-void WidgetGtk::SetContentsView(View* view) {
- DCHECK(view && widget_)
- << "Can't be called until after the HWND is created!";
- // The ContentsView must be set up _after_ the window is created so that its
- // Widget pointer is valid.
- root_view_->SetLayoutManager(new FillLayout);
- if (root_view_->GetChildViewCount() != 0)
- root_view_->RemoveAllChildViews(true);
- root_view_->AddChildView(view);
-
- DCHECK(widget_); // Widget must have been created by now.
-
- OnSizeAllocate(widget_, &(widget_->allocation));
-}
-
-void WidgetGtk::GetBounds(gfx::Rect* out, bool including_frame) const {
- DCHECK(widget_);
-
- int x = 0, y = 0, w, h;
- if (GTK_IS_WINDOW(widget_)) {
- gtk_window_get_position(GTK_WINDOW(widget_), &x, &y);
- gtk_window_get_size(GTK_WINDOW(widget_), &w, &h);
- } else {
- // TODO: make sure this is right. Docs indicate gtk_window_get_position
- // returns a value useful to the window manager, which may not be the same
- // as the actual location on the screen.
- GetWidgetPositionOnScreen(widget_, &x, &y);
- w = widget_->allocation.width;
- h = widget_->allocation.height;
- }
-
- if (including_frame) {
- // TODO: Docs indicate it isn't possible to get at this value. We may need
- // to turn off all decorations so that the frame is always of a 0x0 size.
- NOTIMPLEMENTED();
- }
-
- return out->SetRect(x, y, w, h);
-}
-
-gfx::NativeView WidgetGtk::GetNativeView() const {
- return widget_;
-}
-
-void WidgetGtk::PaintNow(const gfx::Rect& update_rect) {
- gtk_widget_queue_draw_area(widget_, update_rect.x(), update_rect.y(),
- update_rect.width(), update_rect.height());
-}
-
-RootView* WidgetGtk::GetRootView() {
- if (!root_view_.get()) {
- // First time the root view is being asked for, create it now.
- root_view_.reset(CreateRootView());
- }
- return root_view_.get();
-}
-
-bool WidgetGtk::IsVisible() const {
- return GTK_WIDGET_VISIBLE(widget_);
-}
-
-bool WidgetGtk::IsActive() const {
- // If this only applies to windows, it shouldn't be in widget.
- DCHECK(GTK_IS_WINDOW(widget_));
- return gtk_window_is_active(GTK_WINDOW(widget_));
-}
-
-TooltipManager* WidgetGtk::GetTooltipManager() {
- NOTIMPLEMENTED();
- return NULL;
-}
-
-bool WidgetGtk::GetAccelerator(int cmd_id, Accelerator* accelerator) {
- NOTIMPLEMENTED();
- return false;
-}
-
-Window* WidgetGtk::GetWindow() {
- return GetWindowImpl(widget_);
-}
-
-const Window* WidgetGtk::GetWindow() const {
- return GetWindowImpl(widget_);
-}
-
-void WidgetGtk::CreateGtkWidget() {
- if (type_ == TYPE_CHILD) {
- child_widget_parent_ = widget_ = gtk_fixed_new();
- SetViewForNative(widget_, this);
- } else {
- widget_ = gtk_window_new(
- type_ == TYPE_WINDOW ? GTK_WINDOW_TOPLEVEL : GTK_WINDOW_POPUP);
- gtk_window_set_decorated(GTK_WINDOW(widget_), false);
- // We'll take care of positioning our window.
- gtk_window_set_position(GTK_WINDOW(widget_), GTK_WIN_POS_NONE);
- SetWindowForNative(widget_, static_cast<WindowGtk*>(this));
- SetViewForNative(widget_, this);
-
- child_widget_parent_ = gtk_fixed_new();
- gtk_fixed_set_has_window(GTK_FIXED(child_widget_parent_), true);
- gtk_container_add(GTK_CONTAINER(widget_), child_widget_parent_);
- gtk_widget_show(child_widget_parent_);
-
- SetViewForNative(child_widget_parent_, this);
- }
- gtk_widget_show(widget_);
-}
-
-void WidgetGtk::OnSizeAllocate(GtkWidget* widget, GtkAllocation* allocation) {
- root_view_->SetBounds(0, 0, allocation->width, allocation->height);
- root_view_->Layout();
- root_view_->SchedulePaint();
-}
-
-gboolean WidgetGtk::OnMotionNotify(GtkWidget* widget, GdkEventMotion* event) {
- gfx::Point screen_loc(event->x_root, event->y_root);
- if (last_mouse_event_was_move_ && last_mouse_move_x_ == screen_loc.x() &&
- last_mouse_move_y_ == screen_loc.y()) {
- // Don't generate a mouse event for the same location as the last.
- return false;
- }
- last_mouse_move_x_ = screen_loc.x();
- last_mouse_move_y_ = screen_loc.y();
- last_mouse_event_was_move_ = true;
- MouseEvent mouse_move(Event::ET_MOUSE_MOVED,
- event->x,
- event->y,
- Event::GetFlagsFromGdkState(event->state));
- root_view_->OnMouseMoved(mouse_move);
- return true;
-}
-
-gboolean WidgetGtk::OnButtonPress(GtkWidget* widget, GdkEventButton* event) {
- ProcessMousePressed(event);
- return true;
-}
-
-gboolean WidgetGtk::OnButtonRelease(GtkWidget* widget, GdkEventButton* event) {
- ProcessMouseReleased(event);
- return true;
-}
-
-void WidgetGtk::OnPaint(GtkWidget* widget, GdkEventExpose* event) {
- root_view_->OnPaint(event);
-}
-
-gboolean WidgetGtk::OnEnterNotify(GtkWidget* widget, GdkEventCrossing* event) {
- // TODO(port): We may not actually need this message; it looks like
- // OnNotificationNotify() takes care of this case...
- return false;
-}
-
-gboolean WidgetGtk::OnLeaveNotify(GtkWidget* widget, GdkEventCrossing* event) {
- last_mouse_event_was_move_ = false;
- root_view_->ProcessOnMouseExited();
- return true;
-}
-
-gboolean WidgetGtk::OnKeyPress(GtkWidget* widget, GdkEventKey* event) {
- KeyEvent key_event(event);
- return root_view_->ProcessKeyEvent(key_event);
-}
-
-gboolean WidgetGtk::OnKeyRelease(GtkWidget* widget, GdkEventKey* event) {
- KeyEvent key_event(event);
- return root_view_->ProcessKeyEvent(key_event);
-}
-
-// static
-WindowGtk* WidgetGtk::GetWindowForNative(GtkWidget* widget) {
- gpointer user_data = g_object_get_data(G_OBJECT(widget), "chrome-window");
- return static_cast<WindowGtk*>(user_data);
-}
-
-// static
-void WidgetGtk::SetWindowForNative(GtkWidget* widget, WindowGtk* window) {
- g_object_set_data(G_OBJECT(widget), "chrome-window", window);
-}
-
-RootView* WidgetGtk::CreateRootView() {
- return new RootView(this);
-}
-
-bool WidgetGtk::ProcessMousePressed(GdkEventButton* event) {
- last_mouse_event_was_move_ = false;
- // TODO: move this code into a common place. Also need support for
- // double/triple click.
- int flags = Event::GetFlagsFromGdkState(event->state);
- switch (event->button) {
- case 1:
- flags |= Event::EF_LEFT_BUTTON_DOWN;
- break;
- case 2:
- flags |= Event::EF_MIDDLE_BUTTON_DOWN;
- break;
- case 3:
- flags |= Event::EF_MIDDLE_BUTTON_DOWN;
- break;
- default:
- // We only deal with 1-3.
- break;
- }
- MouseEvent mouse_pressed(Event::ET_MOUSE_PRESSED,
- event->x, event->y, flags);
- if (root_view_->OnMousePressed(mouse_pressed)) {
- is_mouse_down_ = true;
- // TODO(port): Enable this once I figure out what capture is.
- // if (!has_capture_) {
- // SetCapture();
- // has_capture_ = true;
- // current_action_ = FA_FORWARDING;
- // }
- return true;
- }
-
- return false;
-}
-
-void WidgetGtk::ProcessMouseReleased(GdkEventButton* event) {
- last_mouse_event_was_move_ = false;
- MouseEvent mouse_up(Event::ET_MOUSE_RELEASED,
- event->x, event->y,
- Event::GetFlagsFromGdkState(event->state));
- // Release the capture first, that way we don't get confused if
- // OnMouseReleased blocks.
- //
- // TODO(port): Enable this once I figure out what capture is.
- // if (has_capture_ && ReleaseCaptureOnMouseReleased()) {
- // has_capture_ = false;
- // current_action_ = FA_NONE;
- // ReleaseCapture();
- // }
- is_mouse_down_ = false;
- root_view_->OnMouseReleased(mouse_up, false);
-}
-
-// static
-WidgetGtk* WidgetGtk::GetViewForNative(GtkWidget* widget) {
- gpointer user_data = g_object_get_data(G_OBJECT(widget), "chrome-views");
- return static_cast<WidgetGtk*>(user_data);
-}
-
-// static
-void WidgetGtk::SetViewForNative(GtkWidget* widget, WidgetGtk* view) {
- g_object_set_data(G_OBJECT(widget), "chrome-views", view);
-}
-
-// static
-RootView* WidgetGtk::GetRootViewForWidget(GtkWidget* widget) {
- gpointer user_data = g_object_get_data(G_OBJECT(widget), "root-view");
- return static_cast<RootView*>(user_data);
-}
-
-// static
-void WidgetGtk::SetRootViewForWidget(GtkWidget* widget, RootView* root_view) {
- g_object_set_data(G_OBJECT(widget), "root-view", root_view);
-}
-
-// static
-void WidgetGtk::CallSizeAllocate(GtkWidget* widget, GtkAllocation* allocation) {
- WidgetGtk* widget_gtk = GetViewForNative(widget);
- if (!widget_gtk)
- return;
-
- widget_gtk->OnSizeAllocate(widget, allocation);
-}
-
-gboolean WidgetGtk::CallPaint(GtkWidget* widget, GdkEventExpose* event) {
- WidgetGtk* widget_gtk = GetViewForNative(widget);
- if (widget_gtk)
- widget_gtk->OnPaint(widget, event);
- return false; // False indicates other widgets should get the event as well.
-}
-
-gboolean WidgetGtk::CallEnterNotify(GtkWidget* widget, GdkEventCrossing* event) {
- WidgetGtk* widget_gtk = GetViewForNative(widget);
- if (!widget_gtk)
- return false;
-
- return widget_gtk->OnEnterNotify(widget, event);
-}
-
-gboolean WidgetGtk::CallLeaveNotify(GtkWidget* widget, GdkEventCrossing* event) {
- WidgetGtk* widget_gtk = GetViewForNative(widget);
- if (!widget_gtk)
- return false;
-
- return widget_gtk->OnLeaveNotify(widget, event);
-}
-
-gboolean WidgetGtk::CallMotionNotify(GtkWidget* widget, GdkEventMotion* event) {
- WidgetGtk* widget_gtk = GetViewForNative(widget);
- if (!widget_gtk)
- return false;
-
- return widget_gtk->OnMotionNotify(widget, event);
-}
-
-gboolean WidgetGtk::CallButtonPress(GtkWidget* widget, GdkEventButton* event) {
- WidgetGtk* widget_gtk = GetViewForNative(widget);
- if (!widget_gtk)
- return false;
-
- return widget_gtk->OnButtonPress(widget, event);
-}
-
-gboolean WidgetGtk::CallButtonRelease(GtkWidget* widget, GdkEventButton* event) {
- WidgetGtk* widget_gtk = GetViewForNative(widget);
- if (!widget_gtk)
- return false;
-
- return widget_gtk->OnButtonRelease(widget, event);
-}
-
-gboolean WidgetGtk::CallFocusIn(GtkWidget* widget, GdkEventFocus* event) {
- WidgetGtk* widget_gtk = GetViewForNative(widget);
- if (!widget_gtk)
- return false;
-
- return widget_gtk->OnFocusIn(widget, event);
-}
-
-gboolean WidgetGtk::CallFocusOut(GtkWidget* widget, GdkEventFocus* event) {
- WidgetGtk* widget_gtk = GetViewForNative(widget);
- if (!widget_gtk)
- return false;
-
- return widget_gtk->OnFocusOut(widget, event);
-}
-
-gboolean WidgetGtk::CallKeyPress(GtkWidget* widget, GdkEventKey* event) {
- WidgetGtk* widget_gtk = GetViewForNative(widget);
- if (!widget_gtk)
- return false;
-
- return widget_gtk->OnKeyPress(widget, event);
-}
-
-gboolean WidgetGtk::CallKeyRelease(GtkWidget* widget, GdkEventKey* event) {
- WidgetGtk* widget_gtk = GetViewForNative(widget);
- if (!widget_gtk)
- return false;
-
- return widget_gtk->OnKeyRelease(widget, event);
-}
-
-gboolean WidgetGtk::CallScroll(GtkWidget* widget, GdkEventScroll* event) {
- WidgetGtk* widget_gtk = GetViewForNative(widget);
- if (!widget_gtk)
- return false;
-
- return widget_gtk->OnScroll(widget, event);
-}
-
-gboolean WidgetGtk::CallVisibilityNotify(GtkWidget* widget,
- GdkEventVisibility* event) {
- WidgetGtk* widget_gtk = GetViewForNative(widget);
- if (!widget_gtk)
- return false;
-
- return widget_gtk->OnVisibilityNotify(widget, event);
-}
-
-// Returns the first ancestor of |widget| that is a window.
-// static
-Window* WidgetGtk::GetWindowImpl(GtkWidget* widget) {
- GtkWidget* parent = widget;
- while (parent) {
- WindowGtk* window = GetWindowForNative(widget);
- if (window)
- return window;
- parent = gtk_widget_get_parent(parent);
- }
- return NULL;
-}
-
-}
diff --git a/chrome/views/widget/widget_gtk.h b/chrome/views/widget/widget_gtk.h
deleted file mode 100644
index ba3ba74..0000000
--- a/chrome/views/widget/widget_gtk.h
+++ /dev/null
@@ -1,160 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_WIDGET_WIDGET_GTK_H_
-#define CHROME_VIEWS_WIDGET_WIDGET_GTK_H_
-
-#include <gtk/gtk.h>
-
-#include "base/message_loop.h"
-#include "chrome/views/widget/widget.h"
-
-namespace gfx {
-class Rect;
-}
-
-namespace views {
-
-class View;
-class WindowGtk;
-
-// Widget implementation for GTK.
-class WidgetGtk : public Widget {
- public:
- // Type of widget.
- enum Type {
- // Used for popup type windows (bubbles, menus ...).
- TYPE_POPUP,
-
- // A top level window.
- TYPE_WINDOW,
-
- // A child widget.
- TYPE_CHILD
- };
-
- explicit WidgetGtk(Type type);
- virtual ~WidgetGtk();
-
- // Initializes this widget.
- void Init(const gfx::Rect& bounds, bool has_own_focus_manager);
-
- void AddChild(GtkWidget* child);
- void RemoveChild(GtkWidget* child);
-
- // Positions a child GtkWidget at the specified location and bounds.
- void PositionChild(GtkWidget* child, int x, int y, int w, int h);
-
- // Parent GtkWidget all children are added to. This is not necessarily
- // the same as returned by GetNativeView.
- GtkWidget* child_widget_parent() const { return child_widget_parent_; }
-
- virtual void SetContentsView(View* view);
-
- // Overridden from Widget:
- virtual void GetBounds(gfx::Rect* out, bool including_frame) const;
- virtual gfx::NativeView GetNativeView() const;
- virtual void PaintNow(const gfx::Rect& update_rect);
- virtual RootView* GetRootView();
- virtual bool IsVisible() const;
- virtual bool IsActive() const;
- virtual TooltipManager* GetTooltipManager();
- virtual bool GetAccelerator(int cmd_id, Accelerator* accelerator);
- virtual Window* GetWindow();
- virtual const Window* GetWindow() const;
-
- protected:
- virtual void OnSizeAllocate(GtkWidget* widget, GtkAllocation* allocation);
- virtual void OnPaint(GtkWidget* widget, GdkEventExpose* event);
- virtual gboolean OnEnterNotify(GtkWidget* widget, GdkEventCrossing* event);
- virtual gboolean OnLeaveNotify(GtkWidget* widget, GdkEventCrossing* event);
- virtual gboolean OnMotionNotify(GtkWidget* widget, GdkEventMotion* event);
- virtual gboolean OnButtonPress(GtkWidget* widget, GdkEventButton* event);
- virtual gboolean OnButtonRelease(GtkWidget* widget, GdkEventButton* event);
- virtual gboolean OnFocusIn(GtkWidget* widget, GdkEventFocus* event) {
- return false;
- }
- virtual gboolean OnFocusOut(GtkWidget* widget, GdkEventFocus* event) {
- return false;
- }
- virtual gboolean OnKeyPress(GtkWidget* widget, GdkEventKey* event);
- virtual gboolean OnKeyRelease(GtkWidget* widget, GdkEventKey* event);
- virtual gboolean OnScroll(GtkWidget* widget, GdkEventScroll* event) {
- return false;
- }
- virtual gboolean OnVisibilityNotify(GtkWidget* widget,
- GdkEventVisibility* event) {
- return false;
- }
-
- // Sets and retrieves the WidgetGtk in the userdata section of the widget.
- static WindowGtk* GetWindowForNative(GtkWidget* widget);
- static void SetWindowForNative(GtkWidget* widget, WindowGtk* window);
-
- private:
- virtual RootView* CreateRootView();
-
- // Process a mouse click
- bool ProcessMousePressed(GdkEventButton* event);
- void ProcessMouseReleased(GdkEventButton* event);
-
- // Sets and retrieves the WidgetGtk in the userdata section of the widget.
- static WidgetGtk* GetViewForNative(GtkWidget* widget);
- static void SetViewForNative(GtkWidget* widget, WidgetGtk* view);
-
- static RootView* GetRootViewForWidget(GtkWidget* widget);
- static void SetRootViewForWidget(GtkWidget* widget, RootView* root_view);
-
- // A set of static signal handlers that bridge
- static void CallSizeAllocate(GtkWidget* widget, GtkAllocation* allocation);
- static gboolean CallPaint(GtkWidget* widget, GdkEventExpose* event);
- static gboolean CallEnterNotify(GtkWidget* widget, GdkEventCrossing* event);
- static gboolean CallLeaveNotify(GtkWidget* widget, GdkEventCrossing* event);
- static gboolean CallMotionNotify(GtkWidget* widget, GdkEventMotion* event);
- static gboolean CallButtonPress(GtkWidget* widget, GdkEventButton* event);
- static gboolean CallButtonRelease(GtkWidget* widget, GdkEventButton* event);
- static gboolean CallFocusIn(GtkWidget* widget, GdkEventFocus* event);
- static gboolean CallFocusOut(GtkWidget* widget, GdkEventFocus* event);
- static gboolean CallKeyPress(GtkWidget* widget, GdkEventKey* event);
- static gboolean CallKeyRelease(GtkWidget* widget, GdkEventKey* event);
- static gboolean CallScroll(GtkWidget* widget, GdkEventScroll* event);
- static gboolean CallVisibilityNotify(GtkWidget* widget,
- GdkEventVisibility* event);
-
- static Window* GetWindowImpl(GtkWidget* widget);
-
- // Creates the GtkWidget.
- void CreateGtkWidget();
-
- const Type type_;
-
- // Our native views. If we're a window/popup, then widget_ is the window and
- // child_widget_parent_ is a GtkFixed. If we're not a window/popup, then
- // widget_ and child_widget_parent_ are a GtkFixed.
- GtkWidget* widget_;
- GtkWidget* child_widget_parent_;
-
- // The root of the View hierarchy attached to this window.
- scoped_ptr<RootView> root_view_;
-
- // If true, the mouse is currently down.
- bool is_mouse_down_;
-
- // The following are used to detect duplicate mouse move events and not
- // deliver them. Displaying a window may result in the system generating
- // duplicate move events even though the mouse hasn't moved.
-
- // If true, the last event was a mouse move event.
- bool last_mouse_event_was_move_;
-
- // Coordinates of the last mouse move event, in screen coordinates.
- int last_mouse_move_x_;
- int last_mouse_move_y_;
-
- DISALLOW_COPY_AND_ASSIGN(WidgetGtk);
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_WIDGET_WIDGET_GTK_H_
diff --git a/chrome/views/widget/widget_win.cc b/chrome/views/widget/widget_win.cc
deleted file mode 100644
index 5ee065a..0000000
--- a/chrome/views/widget/widget_win.cc
+++ /dev/null
@@ -1,999 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/widget/widget_win.h"
-
-#include "app/gfx/chrome_canvas.h"
-#include "base/gfx/native_theme.h"
-#include "base/string_util.h"
-#include "base/win_util.h"
-#include "chrome/app/chrome_dll_resource.h"
-#include "chrome/common/win_util.h"
-#include "chrome/views/accessibility/view_accessibility.h"
-#include "chrome/views/controls/native_control_win.h"
-#include "chrome/views/fill_layout.h"
-#include "chrome/views/focus/focus_util_win.h"
-#include "chrome/views/widget/aero_tooltip_manager.h"
-#include "chrome/views/widget/root_view.h"
-#include "chrome/views/window/window_win.h"
-
-namespace views {
-
-static const DWORD kWindowDefaultChildStyle =
- WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS;
-static const DWORD kWindowDefaultStyle = WS_OVERLAPPEDWINDOW;
-static const DWORD kWindowDefaultExStyle = 0;
-
-// Property used to link the HWND to its RootView.
-static const wchar_t* const kRootViewWindowProperty = L"__ROOT_VIEW__";
-
-bool SetRootViewForHWND(HWND hwnd, RootView* root_view) {
- return ::SetProp(hwnd, kRootViewWindowProperty, root_view) ? true : false;
-}
-
-RootView* GetRootViewForHWND(HWND hwnd) {
- return reinterpret_cast<RootView*>(::GetProp(hwnd, kRootViewWindowProperty));
-}
-
-NativeControlWin* GetNativeControlWinForHWND(HWND hwnd) {
- return reinterpret_cast<NativeControlWin*>(
- ::GetProp(hwnd, NativeControlWin::kNativeControlWinKey));
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// Window class tracking.
-
-// static
-const wchar_t* const WidgetWin::kBaseClassName =
- L"Chrome_WidgetWin_";
-
-// Window class information used for registering unique windows.
-struct ClassInfo {
- UINT style;
- HBRUSH background;
-
- explicit ClassInfo(int style)
- : style(style),
- background(NULL) {}
-
- // Compares two ClassInfos. Returns true if all members match.
- bool Equals(const ClassInfo& other) const {
- return (other.style == style && other.background == background);
- }
-};
-
-class ClassRegistrar {
- public:
- ~ClassRegistrar() {
- for (RegisteredClasses::iterator i = registered_classes_.begin();
- i != registered_classes_.end(); ++i) {
- UnregisterClass(i->name.c_str(), NULL);
- }
- }
-
- // Puts the name for the class matching |class_info| in |class_name|, creating
- // a new name if the class is not yet known.
- // Returns true if this class was already known, false otherwise.
- bool RetrieveClassName(const ClassInfo& class_info, std::wstring* name) {
- for (RegisteredClasses::const_iterator i = registered_classes_.begin();
- i != registered_classes_.end(); ++i) {
- if (class_info.Equals(i->info)) {
- name->assign(i->name);
- return true;
- }
- }
-
- name->assign(std::wstring(WidgetWin::kBaseClassName) +
- IntToWString(registered_count_++));
- return false;
- }
-
- void RegisterClass(const ClassInfo& class_info,
- const std::wstring& name,
- ATOM atom) {
- registered_classes_.push_back(RegisteredClass(class_info, name, atom));
- }
-
- private:
- // Represents a registered window class.
- struct RegisteredClass {
- RegisteredClass(const ClassInfo& info,
- const std::wstring& name,
- ATOM atom)
- : info(info),
- name(name),
- atom(atom) {
- }
-
- // Info used to create the class.
- ClassInfo info;
-
- // The name given to the window.
- std::wstring name;
-
- // The ATOM returned from creating the window.
- ATOM atom;
- };
-
- ClassRegistrar() : registered_count_(0) { }
- friend struct DefaultSingletonTraits<ClassRegistrar>;
-
- typedef std::list<RegisteredClass> RegisteredClasses;
- RegisteredClasses registered_classes_;
-
- // Counter of how many classes have ben registered so far.
- int registered_count_;
-
- DISALLOW_COPY_AND_ASSIGN(ClassRegistrar);
-};
-
-///////////////////////////////////////////////////////////////////////////////
-// WidgetWin, public
-
-WidgetWin::WidgetWin()
- : close_widget_factory_(this),
- active_mouse_tracking_flags_(0),
- has_capture_(false),
- current_action_(FA_NONE),
- window_style_(0),
- window_ex_style_(kWindowDefaultExStyle),
- use_layered_buffer_(true),
- layered_alpha_(255),
- delete_on_destroy_(true),
- can_update_layered_window_(true),
- last_mouse_event_was_move_(false),
- is_mouse_down_(false),
- is_window_(false),
- class_style_(CS_DBLCLKS),
- hwnd_(NULL) {
-}
-
-WidgetWin::~WidgetWin() {
- MessageLoopForUI::current()->RemoveObserver(this);
-}
-
-void WidgetWin::Init(HWND parent, const gfx::Rect& bounds,
- bool has_own_focus_manager) {
- if (window_style_ == 0)
- window_style_ = parent ? kWindowDefaultChildStyle : kWindowDefaultStyle;
-
- // See if the style has been overridden.
- opaque_ = !(window_ex_style_ & WS_EX_TRANSPARENT);
- use_layered_buffer_ = (use_layered_buffer_ &&
- !!(window_ex_style_ & WS_EX_LAYERED));
-
- // Force creation of the RootView if it hasn't been created yet.
- GetRootView();
-
- // Ensures the parent we have been passed is valid, otherwise CreateWindowEx
- // will fail.
- if (parent && !::IsWindow(parent)) {
- NOTREACHED() << "invalid parent window specified.";
- parent = NULL;
- }
-
- hwnd_ = CreateWindowEx(window_ex_style_, GetWindowClassName().c_str(), L"",
- window_style_, bounds.x(), bounds.y(), bounds.width(),
- bounds.height(), parent, NULL, NULL, this);
- DCHECK(hwnd_);
- TRACK_HWND_CREATION(hwnd_);
- SetWindowSupportsRerouteMouseWheel(hwnd_);
-
- // The window procedure should have set the data for us.
- DCHECK(win_util::GetWindowUserData(hwnd_) == this);
-
- root_view_->OnWidgetCreated();
-
- if (has_own_focus_manager) {
- FocusManager::CreateFocusManager(hwnd_, GetRootView());
- } else {
- // Subclass the window so we get the tab key messages when a view with no
- // associated native window is focused.
- FocusManager::InstallFocusSubclass(hwnd_, NULL);
- }
-
- // Sets the RootView as a property, so the automation can introspect windows.
- SetRootViewForHWND(hwnd_, root_view_.get());
-
- MessageLoopForUI::current()->AddObserver(this);
-
- // Windows special DWM window frame requires a special tooltip manager so
- // that window controls in Chrome windows don't flicker when you move your
- // mouse over them. See comment in aero_tooltip_manager.h.
- if (win_util::ShouldUseVistaFrame()) {
- tooltip_manager_.reset(new AeroTooltipManager(this, GetNativeView()));
- } else {
- tooltip_manager_.reset(new TooltipManager(this, GetNativeView()));
- }
-
- // This message initializes the window so that focus border are shown for
- // windows.
- ::SendMessage(GetNativeView(),
- WM_CHANGEUISTATE,
- MAKELPARAM(UIS_CLEAR, UISF_HIDEFOCUS),
- 0);
-
- // Bug 964884: detach the IME attached to this window.
- // We should attach IMEs only when we need to input CJK strings.
- ::ImmAssociateContextEx(GetNativeView(), NULL, 0);
-}
-
-void WidgetWin::SetContentsView(View* view) {
- DCHECK(view && hwnd_) << "Can't be called until after the HWND is created!";
- // The ContentsView must be set up _after_ the window is created so that its
- // Widget pointer is valid.
- root_view_->SetLayoutManager(new FillLayout);
- if (root_view_->GetChildViewCount() != 0)
- root_view_->RemoveAllChildViews(true);
- root_view_->AddChildView(view);
-
- // Manually size the window here to ensure the root view is laid out.
- RECT wr;
- GetWindowRect(&wr);
- ChangeSize(0, CSize(wr.right - wr.left, wr.bottom - wr.top));
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// Widget implementation:
-
-void WidgetWin::GetBounds(gfx::Rect* out, bool including_frame) const {
- CRect crect;
- if (including_frame) {
- GetWindowRect(&crect);
- *out = gfx::Rect(crect);
- return;
- }
-
- GetClientRect(&crect);
- POINT p = {0, 0};
- ::ClientToScreen(hwnd_, &p);
- out->SetRect(crect.left + p.x, crect.top + p.y,
- crect.Width(), crect.Height());
-}
-
-gfx::NativeView WidgetWin::GetNativeView() const {
- return hwnd_;
-}
-
-void WidgetWin::PaintNow(const gfx::Rect& update_rect) {
- if (use_layered_buffer_) {
- PaintLayeredWindow();
- } else if (root_view_->NeedsPainting(false) && IsWindow()) {
- if (!opaque_ && GetParent()) {
- // We're transparent. Need to force painting to occur from our parent.
- CRect parent_update_rect = update_rect.ToRECT();
- POINT location_in_parent = { 0, 0 };
- ClientToScreen(hwnd_, &location_in_parent);
- ::ScreenToClient(GetParent(), &location_in_parent);
- parent_update_rect.OffsetRect(location_in_parent);
- ::RedrawWindow(GetParent(), parent_update_rect, NULL,
- RDW_UPDATENOW | RDW_INVALIDATE | RDW_ALLCHILDREN);
- } else {
- RECT native_update_rect = update_rect.ToRECT();
- RedrawWindow(hwnd_, &native_update_rect, NULL,
- RDW_UPDATENOW | RDW_INVALIDATE | RDW_ALLCHILDREN);
- }
- // As we were created with a style of WS_CLIPCHILDREN redraw requests may
- // result in an empty paint rect in WM_PAINT (this'll happen if a
- // child HWND completely contains the update _rect). In such a scenario
- // RootView would never get a ProcessPaint and always think it needs to
- // be painted (leading to a steady stream of RedrawWindow requests on every
- // event). For this reason we tell RootView it doesn't need to paint
- // here.
- root_view_->ClearPaintRect();
- }
-}
-
-RootView* WidgetWin::GetRootView() {
- if (!root_view_.get()) {
- // First time the root view is being asked for, create it now.
- root_view_.reset(CreateRootView());
- }
- return root_view_.get();
-}
-
-bool WidgetWin::IsVisible() const {
- return !!::IsWindowVisible(GetNativeView());
-}
-
-bool WidgetWin::IsActive() const {
- return win_util::IsWindowActive(GetNativeView());
-}
-
-TooltipManager* WidgetWin::GetTooltipManager() {
- return tooltip_manager_.get();
-}
-
-Window* WidgetWin::GetWindow() {
- return GetWindowImpl(hwnd_);
-}
-
-const Window* WidgetWin::GetWindow() const {
- return GetWindowImpl(hwnd_);
-}
-
-void WidgetWin::SetLayeredAlpha(BYTE layered_alpha) {
- layered_alpha_ = layered_alpha;
-
-// if (hwnd_)
-// UpdateWindowFromContents(contents_->getTopPlatformDevice().getBitmapDC());
-}
-
-void WidgetWin::SetUseLayeredBuffer(bool use_layered_buffer) {
- if (use_layered_buffer_ == use_layered_buffer)
- return;
-
- use_layered_buffer_ = use_layered_buffer;
- if (!hwnd_)
- return;
-
- if (use_layered_buffer_) {
- // Force creation of the buffer at the right size.
- RECT wr;
- GetWindowRect(&wr);
- ChangeSize(0, CSize(wr.right - wr.left, wr.bottom - wr.top));
- } else {
- contents_.reset(NULL);
- }
-}
-
-static BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM l_param) {
- RootView* root_view =
- reinterpret_cast<RootView*>(GetProp(hwnd, kRootViewWindowProperty));
- if (root_view) {
- *reinterpret_cast<RootView**>(l_param) = root_view;
- return FALSE; // Stop enumerating.
- }
- return TRUE; // Keep enumerating.
-}
-
-// static
-RootView* WidgetWin::FindRootView(HWND hwnd) {
- RootView* root_view =
- reinterpret_cast<RootView*>(GetProp(hwnd, kRootViewWindowProperty));
- if (root_view)
- return root_view;
-
- // Enumerate all children and check if they have a RootView.
- EnumChildWindows(hwnd, EnumChildProc, reinterpret_cast<LPARAM>(&root_view));
-
- return root_view;
-}
-
-void WidgetWin::Close() {
- if (!IsWindow())
- return; // No need to do anything.
-
- // Let's hide ourselves right away.
- Hide();
- if (close_widget_factory_.empty()) {
- // And we delay the close so that if we are called from an ATL callback,
- // we don't destroy the window before the callback returned (as the caller
- // may delete ourselves on destroy and the ATL callback would still
- // dereference us when the callback returns).
- MessageLoop::current()->PostTask(FROM_HERE,
- close_widget_factory_.NewRunnableMethod(
- &WidgetWin::CloseNow));
- }
-}
-
-void WidgetWin::Hide() {
- if (IsWindow()) {
- // NOTE: Be careful not to activate any windows here (for example, calling
- // ShowWindow(SW_HIDE) will automatically activate another window). This
- // code can be called while a window is being deactivated, and activating
- // another window will screw up the activation that is already in progress.
- SetWindowPos(NULL, 0, 0, 0, 0,
- SWP_HIDEWINDOW | SWP_NOACTIVATE | SWP_NOMOVE |
- SWP_NOREPOSITION | SWP_NOSIZE | SWP_NOZORDER);
- }
-}
-
-void WidgetWin::Show() {
- if (IsWindow())
- ShowWindow(SW_SHOWNOACTIVATE);
-}
-
-void WidgetWin::CloseNow() {
- // We may already have been destroyed if the selection resulted in a tab
- // switch which will have reactivated the browser window and closed us, so
- // we need to check to see if we're still a window before trying to destroy
- // ourself.
- if (IsWindow())
- DestroyWindow();
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// MessageLoop::Observer
-
-void WidgetWin::WillProcessMessage(const MSG& msg) {
-}
-
-void WidgetWin::DidProcessMessage(const MSG& msg) {
- if (root_view_->NeedsPainting(true)) {
- PaintNow(root_view_->GetScheduledPaintRect());
- }
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// FocusTraversable
-
-View* WidgetWin::FindNextFocusableView(
- View* starting_view, bool reverse, Direction direction, bool dont_loop,
- FocusTraversable** focus_traversable, View** focus_traversable_view) {
- return root_view_->FindNextFocusableView(starting_view,
- reverse,
- direction,
- dont_loop,
- focus_traversable,
- focus_traversable_view);
-}
-
-FocusTraversable* WidgetWin::GetFocusTraversableParent() {
- // We are a proxy to the root view, so we should be bypassed when traversing
- // up and as a result this should not be called.
- NOTREACHED();
- return NULL;
-}
-
-void WidgetWin::SetFocusTraversableParent(FocusTraversable* parent) {
- root_view_->SetFocusTraversableParent(parent);
-}
-
-View* WidgetWin::GetFocusTraversableParentView() {
- // We are a proxy to the root view, so we should be bypassed when traversing
- // up and as a result this should not be called.
- NOTREACHED();
- return NULL;
-}
-
-void WidgetWin::SetFocusTraversableParentView(View* parent_view) {
- root_view_->SetFocusTraversableParentView(parent_view);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// Message handlers
-
-void WidgetWin::OnCaptureChanged(HWND hwnd) {
- if (has_capture_) {
- if (is_mouse_down_)
- root_view_->ProcessMouseDragCanceled();
- is_mouse_down_ = false;
- has_capture_ = false;
- }
-}
-
-void WidgetWin::OnClose() {
- Close();
-}
-
-void WidgetWin::OnDestroy() {
- root_view_->OnWidgetDestroyed();
-
- RemoveProp(hwnd_, kRootViewWindowProperty);
-}
-
-LRESULT WidgetWin::OnEraseBkgnd(HDC dc) {
- // This is needed for magical win32 flicker ju-ju
- return 1;
-}
-
-LRESULT WidgetWin::OnGetObject(UINT uMsg, WPARAM w_param, LPARAM l_param) {
- LRESULT reference_result = static_cast<LRESULT>(0L);
-
- // Accessibility readers will send an OBJID_CLIENT message
- if (OBJID_CLIENT == l_param) {
- // If our MSAA root is already created, reuse that pointer. Otherwise,
- // create a new one.
- if (!accessibility_root_) {
- CComObject<ViewAccessibility>* instance = NULL;
-
- HRESULT hr = CComObject<ViewAccessibility>::CreateInstance(&instance);
- DCHECK(SUCCEEDED(hr));
-
- if (!instance) {
- // Return with failure.
- return static_cast<LRESULT>(0L);
- }
-
- CComPtr<IAccessible> accessibility_instance(instance);
-
- if (!SUCCEEDED(instance->Initialize(root_view_.get()))) {
- // Return with failure.
- return static_cast<LRESULT>(0L);
- }
-
- // All is well, assign the temp instance to the class smart pointer
- accessibility_root_.Attach(accessibility_instance.Detach());
-
- if (!accessibility_root_) {
- // Return with failure.
- return static_cast<LRESULT>(0L);
- }
-
- // Notify that an instance of IAccessible was allocated for m_hWnd
- ::NotifyWinEvent(EVENT_OBJECT_CREATE, GetNativeView(), OBJID_CLIENT,
- CHILDID_SELF);
- }
-
- // Create a reference to ViewAccessibility that MSAA will marshall
- // to the client.
- reference_result = LresultFromObject(IID_IAccessible, w_param,
- static_cast<IAccessible*>(accessibility_root_));
- }
- return reference_result;
-}
-
-void WidgetWin::OnKeyDown(TCHAR c, UINT rep_cnt, UINT flags) {
- KeyEvent event(Event::ET_KEY_PRESSED, c, rep_cnt, flags);
- SetMsgHandled(root_view_->ProcessKeyEvent(event));
-}
-
-void WidgetWin::OnKeyUp(TCHAR c, UINT rep_cnt, UINT flags) {
- KeyEvent event(Event::ET_KEY_RELEASED, c, rep_cnt, flags);
- SetMsgHandled(root_view_->ProcessKeyEvent(event));
-}
-
-void WidgetWin::OnLButtonDown(UINT flags, const CPoint& point) {
- ProcessMousePressed(point, flags | MK_LBUTTON, false, false);
-}
-
-void WidgetWin::OnLButtonUp(UINT flags, const CPoint& point) {
- ProcessMouseReleased(point, flags | MK_LBUTTON);
-}
-
-void WidgetWin::OnLButtonDblClk(UINT flags, const CPoint& point) {
- ProcessMousePressed(point, flags | MK_LBUTTON, true, false);
-}
-
-void WidgetWin::OnMButtonDown(UINT flags, const CPoint& point) {
- ProcessMousePressed(point, flags | MK_MBUTTON, false, false);
-}
-
-void WidgetWin::OnMButtonUp(UINT flags, const CPoint& point) {
- ProcessMouseReleased(point, flags | MK_MBUTTON);
-}
-
-void WidgetWin::OnMButtonDblClk(UINT flags, const CPoint& point) {
- ProcessMousePressed(point, flags | MK_MBUTTON, true, false);
-}
-
-LRESULT WidgetWin::OnMouseActivate(HWND window, UINT hittest_code,
- UINT message) {
- SetMsgHandled(FALSE);
- return MA_ACTIVATE;
-}
-
-void WidgetWin::OnMouseMove(UINT flags, const CPoint& point) {
- ProcessMouseMoved(point, flags, false);
-}
-
-LRESULT WidgetWin::OnMouseLeave(UINT message, WPARAM w_param, LPARAM l_param) {
- tooltip_manager_->OnMouseLeave();
- ProcessMouseExited();
- return 0;
-}
-
-LRESULT WidgetWin::OnMouseWheel(UINT message, WPARAM w_param, LPARAM l_param) {
- // Reroute the mouse-wheel to the window under the mouse pointer if
- // applicable.
- if (message == WM_MOUSEWHEEL &&
- views::RerouteMouseWheel(hwnd_, w_param, l_param)) {
- return 0;
- }
-
- int flags = GET_KEYSTATE_WPARAM(w_param);
- short distance = GET_WHEEL_DELTA_WPARAM(w_param);
- int x = GET_X_LPARAM(l_param);
- int y = GET_Y_LPARAM(l_param);
- MouseWheelEvent e(distance, x, y, Event::ConvertWindowsFlags(flags));
- return root_view_->ProcessMouseWheelEvent(e) ? 0 : 1;
-}
-
-LRESULT WidgetWin::OnMouseRange(UINT msg, WPARAM w_param, LPARAM l_param) {
- tooltip_manager_->OnMouse(msg, w_param, l_param);
- SetMsgHandled(FALSE);
- return 0;
-}
-
-void WidgetWin::OnNCLButtonDblClk(UINT flags, const CPoint& point) {
- SetMsgHandled(ProcessMousePressed(point, flags | MK_LBUTTON, true, true));
-}
-
-void WidgetWin::OnNCLButtonDown(UINT flags, const CPoint& point) {
- SetMsgHandled(ProcessMousePressed(point, flags | MK_LBUTTON, false, true));
-}
-
-void WidgetWin::OnNCLButtonUp(UINT flags, const CPoint& point) {
- SetMsgHandled(FALSE);
-}
-
-void WidgetWin::OnNCMButtonDblClk(UINT flags, const CPoint& point) {
- SetMsgHandled(ProcessMousePressed(point, flags | MK_MBUTTON, true, true));
-}
-
-void WidgetWin::OnNCMButtonDown(UINT flags, const CPoint& point) {
- SetMsgHandled(ProcessMousePressed(point, flags | MK_MBUTTON, false, true));
-}
-
-void WidgetWin::OnNCMButtonUp(UINT flags, const CPoint& point) {
- SetMsgHandled(FALSE);
-}
-
-LRESULT WidgetWin::OnNCMouseLeave(UINT uMsg, WPARAM w_param, LPARAM l_param) {
- ProcessMouseExited();
- return 0;
-}
-
-LRESULT WidgetWin::OnNCMouseMove(UINT flags, const CPoint& point) {
- // NC points are in screen coordinates.
- CPoint temp = point;
- MapWindowPoints(HWND_DESKTOP, GetNativeView(), &temp, 1);
- ProcessMouseMoved(temp, 0, true);
-
- // We need to process this message to stop Windows from drawing the window
- // controls as the mouse moves over the title bar area when the window is
- // maximized.
- return 0;
-}
-
-void WidgetWin::OnNCRButtonDblClk(UINT flags, const CPoint& point) {
- SetMsgHandled(ProcessMousePressed(point, flags | MK_RBUTTON, true, true));
-}
-
-void WidgetWin::OnNCRButtonDown(UINT flags, const CPoint& point) {
- SetMsgHandled(ProcessMousePressed(point, flags | MK_RBUTTON, false, true));
-}
-
-void WidgetWin::OnNCRButtonUp(UINT flags, const CPoint& point) {
- SetMsgHandled(FALSE);
-}
-
-LRESULT WidgetWin::OnNotify(int w_param, NMHDR* l_param) {
- // We can be sent this message before the tooltip manager is created, if a
- // subclass overrides OnCreate and creates some kind of Windows control there
- // that sends WM_NOTIFY messages.
- if (tooltip_manager_.get()) {
- bool handled;
- LRESULT result = tooltip_manager_->OnNotify(w_param, l_param, &handled);
- SetMsgHandled(handled);
- return result;
- }
- SetMsgHandled(FALSE);
- return 0;
-}
-
-void WidgetWin::OnPaint(HDC dc) {
- root_view_->OnPaint(GetNativeView());
-}
-
-void WidgetWin::OnRButtonDown(UINT flags, const CPoint& point) {
- ProcessMousePressed(point, flags | MK_RBUTTON, false, false);
-}
-
-void WidgetWin::OnRButtonUp(UINT flags, const CPoint& point) {
- ProcessMouseReleased(point, flags | MK_RBUTTON);
-}
-
-void WidgetWin::OnRButtonDblClk(UINT flags, const CPoint& point) {
- ProcessMousePressed(point, flags | MK_RBUTTON, true, false);
-}
-
-void WidgetWin::OnSize(UINT param, const CSize& size) {
- ChangeSize(param, size);
-}
-
-void WidgetWin::OnThemeChanged() {
- // Notify NativeTheme.
- gfx::NativeTheme::instance()->CloseHandles();
-}
-
-void WidgetWin::OnFinalMessage(HWND window) {
- if (delete_on_destroy_)
- delete this;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// WidgetWin, protected:
-
-void WidgetWin::TrackMouseEvents(DWORD mouse_tracking_flags) {
- // Begin tracking mouse events for this HWND so that we get WM_MOUSELEAVE
- // when the user moves the mouse outside this HWND's bounds.
- if (active_mouse_tracking_flags_ == 0 || mouse_tracking_flags & TME_CANCEL) {
- if (mouse_tracking_flags & TME_CANCEL) {
- // We're about to cancel active mouse tracking, so empty out the stored
- // state.
- active_mouse_tracking_flags_ = 0;
- } else {
- active_mouse_tracking_flags_ = mouse_tracking_flags;
- }
-
- TRACKMOUSEEVENT tme;
- tme.cbSize = sizeof(tme);
- tme.dwFlags = mouse_tracking_flags;
- tme.hwndTrack = GetNativeView();
- tme.dwHoverTime = 0;
- TrackMouseEvent(&tme);
- } else if (mouse_tracking_flags != active_mouse_tracking_flags_) {
- TrackMouseEvents(active_mouse_tracking_flags_ | TME_CANCEL);
- TrackMouseEvents(mouse_tracking_flags);
- }
-}
-
-bool WidgetWin::ProcessMousePressed(const CPoint& point,
- UINT flags,
- bool dbl_click,
- bool non_client) {
- last_mouse_event_was_move_ = false;
- // Windows gives screen coordinates for nonclient events, while the RootView
- // expects window coordinates; convert if necessary.
- gfx::Point converted_point(point);
- if (non_client)
- View::ConvertPointToView(NULL, root_view_.get(), &converted_point);
- MouseEvent mouse_pressed(Event::ET_MOUSE_PRESSED,
- converted_point.x(),
- converted_point.y(),
- (dbl_click ? MouseEvent::EF_IS_DOUBLE_CLICK : 0) |
- (non_client ? MouseEvent::EF_IS_NON_CLIENT : 0) |
- Event::ConvertWindowsFlags(flags));
- if (root_view_->OnMousePressed(mouse_pressed)) {
- is_mouse_down_ = true;
- if (!has_capture_) {
- SetCapture();
- has_capture_ = true;
- current_action_ = FA_FORWARDING;
- }
- return true;
- }
- return false;
-}
-
-void WidgetWin::ProcessMouseDragged(const CPoint& point, UINT flags) {
- last_mouse_event_was_move_ = false;
- MouseEvent mouse_drag(Event::ET_MOUSE_DRAGGED,
- point.x,
- point.y,
- Event::ConvertWindowsFlags(flags));
- root_view_->OnMouseDragged(mouse_drag);
-}
-
-void WidgetWin::ProcessMouseReleased(const CPoint& point, UINT flags) {
- last_mouse_event_was_move_ = false;
- MouseEvent mouse_up(Event::ET_MOUSE_RELEASED,
- point.x,
- point.y,
- Event::ConvertWindowsFlags(flags));
- // Release the capture first, that way we don't get confused if
- // OnMouseReleased blocks.
- if (has_capture_ && ReleaseCaptureOnMouseReleased()) {
- has_capture_ = false;
- current_action_ = FA_NONE;
- ReleaseCapture();
- }
- is_mouse_down_ = false;
- root_view_->OnMouseReleased(mouse_up, false);
-}
-
-void WidgetWin::ProcessMouseMoved(const CPoint &point, UINT flags,
- bool is_nonclient) {
- // Windows only fires WM_MOUSELEAVE events if the application begins
- // "tracking" mouse events for a given HWND during WM_MOUSEMOVE events.
- // We need to call |TrackMouseEvents| to listen for WM_MOUSELEAVE.
- if (!has_capture_)
- TrackMouseEvents(is_nonclient ? TME_NONCLIENT | TME_LEAVE : TME_LEAVE);
- if (has_capture_ && is_mouse_down_) {
- ProcessMouseDragged(point, flags);
- } else {
- gfx::Point screen_loc(point);
- View::ConvertPointToScreen(root_view_.get(), &screen_loc);
- if (last_mouse_event_was_move_ && last_mouse_move_x_ == screen_loc.x() &&
- last_mouse_move_y_ == screen_loc.y()) {
- // Don't generate a mouse event for the same location as the last.
- return;
- }
- last_mouse_move_x_ = screen_loc.x();
- last_mouse_move_y_ = screen_loc.y();
- last_mouse_event_was_move_ = true;
- MouseEvent mouse_move(Event::ET_MOUSE_MOVED,
- point.x,
- point.y,
- Event::ConvertWindowsFlags(flags));
- root_view_->OnMouseMoved(mouse_move);
- }
-}
-
-void WidgetWin::ProcessMouseExited() {
- last_mouse_event_was_move_ = false;
- root_view_->ProcessOnMouseExited();
- // Reset our tracking flag so that future mouse movement over this WidgetWin
- // results in a new tracking session.
- active_mouse_tracking_flags_ = 0;
-}
-
-void WidgetWin::ChangeSize(UINT size_param, const CSize& size) {
- CRect rect;
- if (use_layered_buffer_) {
- GetWindowRect(&rect);
- SizeContents(rect);
- } else {
- GetClientRect(&rect);
- }
-
- // Resizing changes the size of the view hierarchy and thus forces a
- // complete relayout.
- root_view_->SetBounds(0, 0, rect.Width(), rect.Height());
- root_view_->Layout();
- root_view_->SchedulePaint();
-
- if (use_layered_buffer_)
- PaintNow(gfx::Rect(rect));
-}
-
-RootView* WidgetWin::CreateRootView() {
- return new RootView(this);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// WidgetWin, private:
-
-// static
-Window* WidgetWin::GetWindowImpl(HWND hwnd) {
- // NOTE: we can't use GetAncestor here as constrained windows are a Window,
- // but not a top level window.
- HWND parent = hwnd;
- while (parent) {
- WidgetWin* widget =
- reinterpret_cast<WidgetWin*>(win_util::GetWindowUserData(parent));
- if (widget && widget->is_window_)
- return static_cast<WindowWin*>(widget);
- parent = ::GetParent(parent);
- }
- return NULL;
-}
-
-void WidgetWin::SizeContents(const CRect& window_rect) {
- contents_.reset(new ChromeCanvas(window_rect.Width(),
- window_rect.Height(),
- false));
-}
-
-void WidgetWin::PaintLayeredWindow() {
- // Painting monkeys with our cliprect, so we need to save it so that the
- // call to UpdateLayeredWindow updates the entire window, not just the
- // cliprect.
- contents_->save(SkCanvas::kClip_SaveFlag);
- gfx::Rect dirty_rect = root_view_->GetScheduledPaintRect();
- contents_->ClipRectInt(dirty_rect.x(), dirty_rect.y(), dirty_rect.width(),
- dirty_rect.height());
- root_view_->ProcessPaint(contents_.get());
- contents_->restore();
-
- UpdateWindowFromContents(contents_->getTopPlatformDevice().getBitmapDC());
-}
-
-void WidgetWin::UpdateWindowFromContents(HDC dib_dc) {
- DCHECK(use_layered_buffer_);
- if (can_update_layered_window_) {
- CRect wr;
- GetWindowRect(&wr);
- CSize size(wr.right - wr.left, wr.bottom - wr.top);
- CPoint zero_origin(0, 0);
- CPoint window_position = wr.TopLeft();
-
- BLENDFUNCTION blend = {AC_SRC_OVER, 0, layered_alpha_, AC_SRC_ALPHA};
- ::UpdateLayeredWindow(
- hwnd_, NULL, &window_position, &size, dib_dc, &zero_origin,
- RGB(0xFF, 0xFF, 0xFF), &blend, ULW_ALPHA);
- }
-}
-
-std::wstring WidgetWin::GetWindowClassName() {
- ClassInfo class_info(initial_class_style());
- std::wstring name;
- if (Singleton<ClassRegistrar>()->RetrieveClassName(class_info, &name))
- return name;
-
- // No class found, need to register one.
- WNDCLASSEX class_ex;
- class_ex.cbSize = sizeof(WNDCLASSEX);
- class_ex.style = class_info.style;
- class_ex.lpfnWndProc = &WidgetWin::WndProc;
- class_ex.cbClsExtra = 0;
- class_ex.cbWndExtra = 0;
- class_ex.hInstance = NULL;
- class_ex.hIcon = LoadIcon(GetModuleHandle(L"chrome.dll"),
- MAKEINTRESOURCE(IDR_MAINFRAME));
- class_ex.hCursor = LoadCursor(NULL, IDC_ARROW);
- class_ex.hbrBackground = reinterpret_cast<HBRUSH>(class_info.background + 1);
- class_ex.lpszMenuName = NULL;
- class_ex.lpszClassName = name.c_str();
- class_ex.hIconSm = class_ex.hIcon;
- ATOM atom = RegisterClassEx(&class_ex);
- DCHECK(atom);
-
- Singleton<ClassRegistrar>()->RegisterClass(class_info, name, atom);
-
- return name;
-}
-
-// Get the source HWND of the specified message. Depending on the message, the
-// source HWND is encoded in either the WPARAM or the LPARAM value.
-HWND GetControlHWNDForMessage(UINT message, WPARAM w_param, LPARAM l_param) {
- // Each of the following messages can be sent by a child HWND and must be
- // forwarded to its associated NativeControlWin for handling.
- switch (message) {
- case WM_NOTIFY:
- return reinterpret_cast<NMHDR*>(l_param)->hwndFrom;
- case WM_COMMAND:
- return reinterpret_cast<HWND>(l_param);
- case WM_CONTEXTMENU:
- return reinterpret_cast<HWND>(w_param);
- case WM_CTLCOLORBTN:
- case WM_CTLCOLORSTATIC:
- return reinterpret_cast<HWND>(l_param);
- }
- return NULL;
-}
-
-// Some messages may be sent to us by a child HWND managed by
-// NativeControlWin. If this is the case, this function will forward those
-// messages on to the object associated with the source HWND and return true,
-// in which case the window procedure must not do any further processing of
-// the message. If there is no associated NativeControlWin, the return value
-// will be false and the WndProc can continue processing the message normally.
-// |l_result| contains the result of the message processing by the control and
-// must be returned by the WndProc if the return value is true.
-bool ProcessNativeControlMessage(UINT message,
- WPARAM w_param,
- LPARAM l_param,
- LRESULT* l_result) {
- *l_result = 0;
-
- HWND control_hwnd = GetControlHWNDForMessage(message, w_param, l_param);
- if (IsWindow(control_hwnd)) {
- NativeControlWin* wrapper = GetNativeControlWinForHWND(control_hwnd);
- if (wrapper)
- return wrapper->ProcessMessage(message, w_param, l_param, l_result);
- }
-
- return false;
-}
-
-// static
-LRESULT CALLBACK WidgetWin::WndProc(HWND window, UINT message,
- WPARAM w_param, LPARAM l_param) {
- if (message == WM_NCCREATE) {
- CREATESTRUCT* cs = reinterpret_cast<CREATESTRUCT*>(l_param);
- WidgetWin* widget = reinterpret_cast<WidgetWin*>(cs->lpCreateParams);
- DCHECK(widget);
- win_util::SetWindowUserData(window, widget);
- widget->hwnd_ = window;
- return TRUE;
- }
-
- WidgetWin* widget = reinterpret_cast<WidgetWin*>(
- win_util::GetWindowUserData(window));
- if (!widget)
- return 0;
-
- LRESULT result = 0;
-
- // First allow messages sent by child controls to be processed directly by
- // their associated views. If such a view is present, it will handle the
- // message *instead of* this WidgetWin.
- if (ProcessNativeControlMessage(message, w_param, l_param, &result))
- return result;
-
- // Otherwise we handle everything else.
- if (!widget->ProcessWindowMessage(window, message, w_param, l_param, result))
- result = DefWindowProc(window, message, w_param, l_param);
- if (message == WM_NCDESTROY) {
- TRACK_HWND_DESTRUCTION(window);
- widget->hwnd_ = NULL;
- widget->OnFinalMessage(window);
- }
- return result;
-}
-
-} // namespace views
diff --git a/chrome/views/widget/widget_win.h b/chrome/views/widget/widget_win.h
deleted file mode 100644
index 00ecb93..0000000
--- a/chrome/views/widget/widget_win.h
+++ /dev/null
@@ -1,636 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_WIDGET_WIDGET_WIN_H_
-#define CHROME_VIEWS_WIDGET_WIDGET_WIN_H_
-
-#include <atlbase.h>
-#include <atlcrack.h>
-
-#include "base/message_loop.h"
-#include "base/system_monitor.h"
-#include "chrome/views/focus/focus_manager.h"
-#include "chrome/views/layout_manager.h"
-#include "chrome/views/widget/widget.h"
-
-class ChromeCanvas;
-
-namespace gfx {
-class Rect;
-}
-
-namespace views {
-
-class RootView;
-class TooltipManager;
-class Window;
-
-bool SetRootViewForHWND(HWND hwnd, RootView* root_view);
-RootView* GetRootViewForHWND(HWND hwnd);
-
-// A Windows message reflected from other windows. This message is sent
-// with the following arguments:
-// hWnd - Target window
-// uMsg - kReflectedMessage
-// wParam - Should be 0
-// lParam - Pointer to MSG struct containing the original message.
-static const int kReflectedMessage = WM_APP + 3;
-
-// These two messages aren't defined in winuser.h, but they are sent to windows
-// with captions. They appear to paint the window caption and frame.
-// Unfortunately if you override the standard non-client rendering as we do
-// with CustomFrameWindow, sometimes Windows (not deterministically
-// reproducibly but definitely frequently) will send these messages to the
-// window and paint the standard caption/title over the top of the custom one.
-// So we need to handle these messages in CustomFrameWindow to prevent this
-// from happening.
-static const int WM_NCUAHDRAWCAPTION = 0xAE;
-static const int WM_NCUAHDRAWFRAME = 0xAF;
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// WidgetWin
-// A Widget for a views hierarchy used to represent anything that can be
-// contained within an HWND, e.g. a control, a window, etc. Specializations
-// suitable for specific tasks, e.g. top level window, are derived from this.
-//
-// This Widget contains a RootView which owns the hierarchy of views within it.
-// As long as views are part of this tree, they will be deleted automatically
-// when the RootView is destroyed. If you remove a view from the tree, you are
-// then responsible for cleaning up after it.
-//
-///////////////////////////////////////////////////////////////////////////////
-class WidgetWin : public Widget,
- public MessageLoopForUI::Observer,
- public FocusTraversable,
- public AcceleratorTarget {
- public:
- WidgetWin();
- virtual ~WidgetWin();
-
- // Initialize the Widget with a parent and an initial desired size.
- // |contents_view| is the view that will be the single child of RootView
- // within this Widget. As contents_view is inserted into RootView's tree,
- // RootView assumes ownership of this view and cleaning it up. If you remove
- // this view, you are responsible for its destruction. If this value is NULL,
- // the caller is responsible for populating the RootView, and sizing its
- // contents as the window is sized.
- // If |has_own_focus_manager| is true, the focus traversal stay confined to
- // the window.
- void Init(HWND parent,
- const gfx::Rect& bounds,
- bool has_own_focus_manager);
-
- // Sets the specified view as the contents of this Widget. There can only
- // be one contnets view child of this Widget's RootView. This view is sized to
- // fit the entire size of the RootView. The RootView takes ownership of this
- // View, unless it is set as not being parent-owned.
- virtual void SetContentsView(View* view);
-
- // Sets the window styles. This is ONLY used when the window is created.
- // In other words, if you invoke this after invoking Init, nothing happens.
- void set_window_style(DWORD style) { window_style_ = style; }
- DWORD window_style() const { return window_style_; }
-
- // Sets the extended window styles. See comment about |set_window_style|.
- void set_window_ex_style(DWORD style) { window_ex_style_ = style; }
- DWORD window_ex_style() const { return window_ex_style_; };
-
- // Sets the class style to use. The default is CS_DBLCLKS.
- void set_initial_class_style(UINT class_style) {
- // We dynamically generate the class name, so don't register it globally!
- DCHECK((class_style & CS_GLOBALCLASS) == 0);
- class_style_ = class_style;
- }
- UINT initial_class_style() { return class_style_; }
-
- void set_delete_on_destroy(bool delete_on_destroy) {
- delete_on_destroy_ = delete_on_destroy;
- }
-
- // Sets the initial opacity of a layered window, or updates the window's
- // opacity if it is on the screen.
- void SetLayeredAlpha(BYTE layered_alpha);
-
- // See description of use_layered_buffer_ for details.
- void SetUseLayeredBuffer(bool use_layered_buffer);
-
- // Disable Layered Window updates by setting to false.
- void set_can_update_layered_window(bool can_update_layered_window) {
- can_update_layered_window_ = can_update_layered_window;
- }
-
- // Returns the RootView associated with the specified HWND (if any).
- static RootView* FindRootView(HWND hwnd);
-
- // Closes the window asynchronously by scheduling a task for it. The window
- // is destroyed as a result.
- // This invokes Hide to hide the window, and schedules a task that
- // invokes CloseNow.
- virtual void Close();
-
- // Hides the window. This does NOT delete the window, it just hides it.
- virtual void Hide();
-
- // Shows the window without changing size/position/activation state.
- virtual void Show();
-
- // Closes the window synchronously. Note that this should not be called from
- // an ATL message callback as it deletes the WidgetWin and ATL will
- // dereference it after the callback is processed.
- void CloseNow();
-
- // All classes registered by WidgetWin start with this name.
- static const wchar_t* const kBaseClassName;
-
- BEGIN_MSG_MAP_EX(0)
- // Range handlers must go first!
- MESSAGE_RANGE_HANDLER_EX(WM_MOUSEFIRST, WM_MOUSELAST, OnMouseRange)
- MESSAGE_RANGE_HANDLER_EX(WM_NCMOUSEMOVE, WM_NCMOUSEMOVE, OnMouseRange)
-
- // Reflected message handler
- MESSAGE_HANDLER_EX(kReflectedMessage, OnReflectedMessage)
-
- // CustomFrameWindow hacks
- MESSAGE_HANDLER_EX(WM_NCUAHDRAWCAPTION, OnNCUAHDrawCaption)
- MESSAGE_HANDLER_EX(WM_NCUAHDRAWFRAME, OnNCUAHDrawFrame)
-
- // Vista and newer
- MESSAGE_HANDLER_EX(WM_DWMCOMPOSITIONCHANGED, OnDwmCompositionChanged)
-
- // Non-atlcrack.h handlers
- MESSAGE_HANDLER_EX(WM_GETOBJECT, OnGetObject)
- MESSAGE_HANDLER_EX(WM_NCMOUSELEAVE, OnNCMouseLeave)
- MESSAGE_HANDLER_EX(WM_MOUSELEAVE, OnMouseLeave)
- MESSAGE_HANDLER_EX(WM_MOUSEWHEEL, OnMouseWheel)
-
- // This list is in _ALPHABETICAL_ order! OR I WILL HURT YOU.
- MSG_WM_ACTIVATE(OnActivate)
- MSG_WM_ACTIVATEAPP(OnActivateApp)
- MSG_WM_APPCOMMAND(OnAppCommand)
- MSG_WM_CANCELMODE(OnCancelMode)
- MSG_WM_CAPTURECHANGED(OnCaptureChanged)
- MSG_WM_CLOSE(OnClose)
- MSG_WM_COMMAND(OnCommand)
- MSG_WM_CREATE(OnCreate)
- MSG_WM_DESTROY(OnDestroy)
- MSG_WM_ERASEBKGND(OnEraseBkgnd)
- MSG_WM_ENDSESSION(OnEndSession)
- MSG_WM_ENTERSIZEMOVE(OnEnterSizeMove)
- MSG_WM_EXITMENULOOP(OnExitMenuLoop)
- MSG_WM_GETMINMAXINFO(OnGetMinMaxInfo)
- MSG_WM_HSCROLL(OnHScroll)
- MSG_WM_INITMENU(OnInitMenu)
- MSG_WM_INITMENUPOPUP(OnInitMenuPopup)
- MSG_WM_KEYDOWN(OnKeyDown)
- MSG_WM_KEYUP(OnKeyUp)
- MSG_WM_SYSKEYDOWN(OnKeyDown)
- MSG_WM_SYSKEYUP(OnKeyUp)
- MSG_WM_LBUTTONDBLCLK(OnLButtonDblClk)
- MSG_WM_LBUTTONDOWN(OnLButtonDown)
- MSG_WM_LBUTTONUP(OnLButtonUp)
- MSG_WM_MBUTTONDOWN(OnMButtonDown)
- MSG_WM_MBUTTONUP(OnMButtonUp)
- MSG_WM_MBUTTONDBLCLK(OnMButtonDblClk)
- MSG_WM_MOUSEACTIVATE(OnMouseActivate)
- MSG_WM_MOUSEMOVE(OnMouseMove)
- MSG_WM_MOVE(OnMove)
- MSG_WM_MOVING(OnMoving)
- MSG_WM_NCACTIVATE(OnNCActivate)
- MSG_WM_NCCALCSIZE(OnNCCalcSize)
- MSG_WM_NCHITTEST(OnNCHitTest)
- MSG_WM_NCMOUSEMOVE(OnNCMouseMove)
- MSG_WM_NCLBUTTONDBLCLK(OnNCLButtonDblClk)
- MSG_WM_NCLBUTTONDOWN(OnNCLButtonDown)
- MSG_WM_NCLBUTTONUP(OnNCLButtonUp)
- MSG_WM_NCMBUTTONDBLCLK(OnNCMButtonDblClk)
- MSG_WM_NCMBUTTONDOWN(OnNCMButtonDown)
- MSG_WM_NCMBUTTONUP(OnNCMButtonUp)
- MSG_WM_NCPAINT(OnNCPaint)
- MSG_WM_NCRBUTTONDBLCLK(OnNCRButtonDblClk)
- MSG_WM_NCRBUTTONDOWN(OnNCRButtonDown)
- MSG_WM_NCRBUTTONUP(OnNCRButtonUp)
- MSG_WM_NOTIFY(OnNotify)
- MSG_WM_PAINT(OnPaint)
- MSG_WM_POWERBROADCAST(OnPowerBroadcast)
- MSG_WM_RBUTTONDBLCLK(OnRButtonDblClk)
- MSG_WM_RBUTTONDOWN(OnRButtonDown)
- MSG_WM_RBUTTONUP(OnRButtonUp)
- MSG_WM_SETCURSOR(OnSetCursor)
- MSG_WM_SETFOCUS(OnSetFocus)
- MSG_WM_SETICON(OnSetIcon)
- MSG_WM_SETTEXT(OnSetText)
- MSG_WM_SETTINGCHANGE(OnSettingChange)
- MSG_WM_SIZE(OnSize)
- MSG_WM_SYSCOMMAND(OnSysCommand)
- MSG_WM_THEMECHANGED(OnThemeChanged)
- MSG_WM_VSCROLL(OnVScroll)
- MSG_WM_WINDOWPOSCHANGING(OnWindowPosChanging)
- MSG_WM_WINDOWPOSCHANGED(OnWindowPosChanged)
- END_MSG_MAP()
-
- // Overridden from Widget:
- virtual void GetBounds(gfx::Rect* out, bool including_frame) const;
- virtual gfx::NativeView GetNativeView() const;
- virtual void PaintNow(const gfx::Rect& update_rect);
- virtual RootView* GetRootView();
- virtual bool IsVisible() const;
- virtual bool IsActive() const;
- virtual TooltipManager* GetTooltipManager();
- virtual Window* GetWindow();
- virtual const Window* GetWindow() const;
-
- // Overridden from MessageLoop::Observer:
- void WillProcessMessage(const MSG& msg);
- virtual void DidProcessMessage(const MSG& msg);
-
- // Overridden from FocusTraversable:
- virtual View* FindNextFocusableView(View* starting_view,
- bool reverse,
- Direction direction,
- bool dont_loop,
- FocusTraversable** focus_traversable,
- View** focus_traversable_view);
- virtual FocusTraversable* GetFocusTraversableParent();
- virtual View* GetFocusTraversableParentView();
-
- // Overridden from AcceleratorTarget:
- virtual bool AcceleratorPressed(const Accelerator& accelerator) {
- return false;
- }
-
- void SetFocusTraversableParent(FocusTraversable* parent);
- void SetFocusTraversableParentView(View* parent_view);
-
- virtual bool GetAccelerator(int cmd_id, Accelerator* accelerator) {
- return false;
- }
-
- BOOL IsWindow() const {
- return ::IsWindow(GetNativeView());
- }
-
- BOOL ShowWindow(int command) {
- DCHECK(::IsWindow(GetNativeView()));
- return ::ShowWindow(GetNativeView(), command);
- }
-
- HWND SetCapture() {
- DCHECK(::IsWindow(GetNativeView()));
- return ::SetCapture(GetNativeView());
- }
-
- HWND GetParent() const {
- return ::GetParent(GetNativeView());
- }
-
- LONG GetWindowLong(int index) {
- DCHECK(::IsWindow(GetNativeView()));
- return ::GetWindowLong(GetNativeView(), index);
- }
-
- BOOL GetWindowRect(RECT* rect) const {
- return ::GetWindowRect(GetNativeView(), rect);
- }
-
- LONG SetWindowLong(int index, LONG new_long) {
- DCHECK(::IsWindow(GetNativeView()));
- return ::SetWindowLong(GetNativeView(), index, new_long);
- }
-
- BOOL SetWindowPos(HWND hwnd_after, int x, int y, int cx, int cy, UINT flags) {
- DCHECK(::IsWindow(GetNativeView()));
- return ::SetWindowPos(GetNativeView(), hwnd_after, x, y, cx, cy, flags);
- }
-
- BOOL IsZoomed() const {
- DCHECK(::IsWindow(GetNativeView()));
- return ::IsZoomed(GetNativeView());
- }
-
- BOOL MoveWindow(int x, int y, int width, int height) {
- return MoveWindow(x, y, width, height, TRUE);
- }
-
- BOOL MoveWindow(int x, int y, int width, int height, BOOL repaint) {
- DCHECK(::IsWindow(GetNativeView()));
- return ::MoveWindow(GetNativeView(), x, y, width, height, repaint);
- }
-
- int SetWindowRgn(HRGN region, BOOL redraw) {
- DCHECK(::IsWindow(GetNativeView()));
- return ::SetWindowRgn(GetNativeView(), region, redraw);
- }
-
- BOOL GetClientRect(RECT* rect) const {
- DCHECK(::IsWindow(GetNativeView()));
- return ::GetClientRect(GetNativeView(), rect);
- }
-
- protected:
-
- // Call close instead of this to Destroy the window.
- BOOL DestroyWindow() {
- DCHECK(::IsWindow(GetNativeView()));
- return ::DestroyWindow(GetNativeView());
- }
-
- // Message Handlers
- // These are all virtual so that specialized Widgets can modify or augment
- // processing.
- // This list is in _ALPHABETICAL_ order!
- // Note: in the base class these functions must do nothing but convert point
- // coordinates to client coordinates (if necessary) and forward the
- // handling to the appropriate Process* function. This is so that
- // subclasses can easily override these methods to do different things
- // and have a convenient function to call to get the default behavior.
- virtual void OnActivate(UINT action, BOOL minimized, HWND window) {
- SetMsgHandled(FALSE);
- }
- virtual void OnActivateApp(BOOL active, DWORD thread_id) {
- SetMsgHandled(FALSE);
- }
- virtual LRESULT OnAppCommand(HWND window, short app_command, WORD device,
- int keystate) {
- SetMsgHandled(FALSE);
- return 0;
- }
- virtual void OnCancelMode() {}
- virtual void OnCaptureChanged(HWND hwnd);
- virtual void OnClose();
- virtual void OnCommand(UINT notification_code, int command_id, HWND window) {
- SetMsgHandled(FALSE);
- }
- virtual LRESULT OnCreate(LPCREATESTRUCT create_struct) { return 0; }
- // WARNING: If you override this be sure and invoke super, otherwise we'll
- // leak a few things.
- virtual void OnDestroy();
- virtual LRESULT OnDwmCompositionChanged(UINT msg,
- WPARAM w_param,
- LPARAM l_param) {
- SetMsgHandled(FALSE);
- return 0;
- }
- virtual void OnEndSession(BOOL ending, UINT logoff) { SetMsgHandled(FALSE); }
- virtual void OnEnterSizeMove() { SetMsgHandled(FALSE); }
- virtual void OnExitMenuLoop(BOOL is_track_popup_menu) {
- SetMsgHandled(FALSE);
- }
- virtual LRESULT OnEraseBkgnd(HDC dc);
- virtual LRESULT OnGetObject(UINT uMsg, WPARAM w_param, LPARAM l_param);
- virtual void OnGetMinMaxInfo(MINMAXINFO* minmax_info) {
- SetMsgHandled(FALSE);
- }
- virtual void OnHScroll(int scroll_type, short position, HWND scrollbar) {
- SetMsgHandled(FALSE);
- }
- virtual void OnInitMenu(HMENU menu) { SetMsgHandled(FALSE); }
- virtual void OnInitMenuPopup(HMENU menu, UINT position, BOOL is_system_menu) {
- SetMsgHandled(FALSE);
- }
- virtual void OnKeyDown(TCHAR c, UINT rep_cnt, UINT flags);
- virtual void OnKeyUp(TCHAR c, UINT rep_cnt, UINT flags);
- virtual void OnLButtonDblClk(UINT flags, const CPoint& point);
- virtual void OnLButtonDown(UINT flags, const CPoint& point);
- virtual void OnLButtonUp(UINT flags, const CPoint& point);
- virtual void OnMButtonDblClk(UINT flags, const CPoint& point);
- virtual void OnMButtonDown(UINT flags, const CPoint& point);
- virtual void OnMButtonUp(UINT flags, const CPoint& point);
- virtual LRESULT OnMouseActivate(HWND window, UINT hittest_code, UINT message);
- virtual void OnMouseMove(UINT flags, const CPoint& point);
- virtual LRESULT OnMouseLeave(UINT message, WPARAM w_param, LPARAM l_param);
- virtual LRESULT OnMouseWheel(UINT message, WPARAM w_param, LPARAM l_param);
- virtual void OnMove(const CPoint& point) { SetMsgHandled(FALSE); }
- virtual void OnMoving(UINT param, const LPRECT new_bounds) { }
- virtual LRESULT OnMouseRange(UINT msg, WPARAM w_param, LPARAM l_param);
- virtual LRESULT OnNCActivate(BOOL active) { SetMsgHandled(FALSE); return 0; }
- virtual LRESULT OnNCCalcSize(BOOL w_param, LPARAM l_param) {
- SetMsgHandled(FALSE);
- return 0;
- }
- virtual LRESULT OnNCHitTest(const CPoint& pt) {
- SetMsgHandled(FALSE);
- return 0;
- }
- virtual void OnNCLButtonDblClk(UINT flags, const CPoint& point);
- virtual void OnNCLButtonDown(UINT flags, const CPoint& point);
- virtual void OnNCLButtonUp(UINT flags, const CPoint& point);
- virtual void OnNCMButtonDblClk(UINT flags, const CPoint& point);
- virtual void OnNCMButtonDown(UINT flags, const CPoint& point);
- virtual void OnNCMButtonUp(UINT flags, const CPoint& point);
- virtual LRESULT OnNCMouseLeave(UINT uMsg, WPARAM w_param, LPARAM l_param);
- virtual LRESULT OnNCMouseMove(UINT flags, const CPoint& point);
- virtual void OnNCPaint(HRGN rgn) { SetMsgHandled(FALSE); }
- virtual void OnNCRButtonDblClk(UINT flags, const CPoint& point);
- virtual void OnNCRButtonDown(UINT flags, const CPoint& point);
- virtual void OnNCRButtonUp(UINT flags, const CPoint& point);
- virtual LRESULT OnNCUAHDrawCaption(UINT msg,
- WPARAM w_param,
- LPARAM l_param) {
- SetMsgHandled(FALSE);
- return 0;
- }
- virtual LRESULT OnNCUAHDrawFrame(UINT msg, WPARAM w_param, LPARAM l_param) {
- SetMsgHandled(FALSE);
- return 0;
- }
- virtual LRESULT OnNotify(int w_param, NMHDR* l_param);
- virtual void OnPaint(HDC dc);
- virtual LRESULT OnPowerBroadcast(DWORD power_event, DWORD data) {
- base::SystemMonitor* monitor = base::SystemMonitor::Get();
- if (monitor)
- monitor->ProcessWmPowerBroadcastMessage(power_event);
- SetMsgHandled(FALSE);
- return 0;
- }
- virtual void OnRButtonDblClk(UINT flags, const CPoint& point);
- virtual void OnRButtonDown(UINT flags, const CPoint& point);
- virtual void OnRButtonUp(UINT flags, const CPoint& point);
- virtual LRESULT OnReflectedMessage(UINT msg, WPARAM w_param, LPARAM l_param) {
- SetMsgHandled(FALSE);
- return 0;
- }
- virtual LRESULT OnSetCursor(HWND window, UINT hittest_code, UINT message) {
- SetMsgHandled(FALSE);
- return 0;
- }
- virtual void OnSetFocus(HWND focused_window) {
- SetMsgHandled(FALSE);
- }
- virtual LRESULT OnSetIcon(UINT size_type, HICON new_icon) {
- SetMsgHandled(FALSE);
- return 0;
- }
- virtual LRESULT OnSetText(const wchar_t* text) {
- SetMsgHandled(FALSE);
- return 0;
- }
- virtual void OnSettingChange(UINT flags, const wchar_t* section) {
- SetMsgHandled(FALSE);
- }
- virtual void OnSize(UINT param, const CSize& size);
- virtual void OnSysCommand(UINT notification_code, CPoint click) { }
- virtual void OnThemeChanged();
- virtual void OnVScroll(int scroll_type, short position, HWND scrollbar) {
- SetMsgHandled(FALSE);
- }
- virtual void OnWindowPosChanging(WINDOWPOS* window_pos) {
- SetMsgHandled(FALSE);
- }
- virtual void OnWindowPosChanged(WINDOWPOS* window_pos) {
- SetMsgHandled(FALSE);
- }
-
- // deletes this window as it is destroyed, override to provide different
- // behavior.
- virtual void OnFinalMessage(HWND window);
-
- // Start tracking all mouse events so that this window gets sent mouse leave
- // messages too. |is_nonclient| is true when we should track WM_NCMOUSELEAVE
- // messages instead of WM_MOUSELEAVE ones.
- void TrackMouseEvents(DWORD mouse_tracking_flags);
-
- // Actually handle mouse events. These functions are called by subclasses who
- // override the message handlers above to do the actual real work of handling
- // the event in the View system.
- bool ProcessMousePressed(const CPoint& point,
- UINT flags,
- bool dbl_click,
- bool non_client);
- void ProcessMouseDragged(const CPoint& point, UINT flags);
- void ProcessMouseReleased(const CPoint& point, UINT flags);
- void ProcessMouseMoved(const CPoint& point, UINT flags, bool is_nonclient);
- void ProcessMouseExited();
-
- // Handles re-laying out content in response to a window size change.
- virtual void ChangeSize(UINT size_param, const CSize& size);
-
- // Returns whether capture should be released on mouse release. The default
- // is true.
- virtual bool ReleaseCaptureOnMouseReleased() { return true; }
-
- enum FrameAction {FA_NONE = 0, FA_RESIZING, FA_MOVING, FA_FORWARDING};
-
- virtual RootView* CreateRootView();
-
- // Returns true if this WidgetWin is opaque.
- bool opaque() const { return opaque_; }
-
- // The root of the View hierarchy attached to this window.
- scoped_ptr<RootView> root_view_;
-
- // Current frame ui action
- FrameAction current_action_;
-
- // Whether or not we have capture the mouse.
- bool has_capture_;
-
- // If true, the mouse is currently down.
- bool is_mouse_down_;
-
- scoped_ptr<TooltipManager> tooltip_manager_;
-
- // Are a subclass of WindowWin?
- bool is_window_;
-
- private:
- // Implementation of GetWindow. Ascends the parents of |hwnd| returning the
- // first ancestor that is a Window.
- static Window* GetWindowImpl(HWND hwnd);
-
- // Resize the bitmap used to contain the contents of the layered window. This
- // recreates the entire bitmap.
- void SizeContents(const CRect& window_rect);
-
- // Paint into a DIB and then update the layered window with its contents.
- void PaintLayeredWindow();
-
- // In layered mode, update the layered window. |dib_dc| represents a handle
- // to a device context that contains the contents of the window.
- void UpdateWindowFromContents(HDC dib_dc);
-
- // Invoked from WM_DESTROY. Does appropriate cleanup and invokes OnDestroy
- // so that subclasses can do any cleanup they need to.
- void OnDestroyImpl();
-
- // The windows procedure used by all WidgetWins.
- static LRESULT CALLBACK WndProc(HWND window,
- UINT message,
- WPARAM w_param,
- LPARAM l_param);
-
- // Gets the window class name to use when creating the corresponding HWND.
- // If necessary, this registers the window class.
- std::wstring GetWindowClassName();
-
- // The following factory is used for calls to close the WidgetWin
- // instance.
- ScopedRunnableMethodFactory<WidgetWin> close_widget_factory_;
-
- // The flags currently being used with TrackMouseEvent to track mouse
- // messages. 0 if there is no active tracking. The value of this member is
- // used when tracking is canceled.
- DWORD active_mouse_tracking_flags_;
-
- bool opaque_;
-
- // Window Styles used when creating the window.
- DWORD window_style_;
-
- // Window Extended Styles used when creating the window.
- DWORD window_ex_style_;
-
- // Style of the class to use.
- UINT class_style_;
-
- // Should we keep an offscreen buffer? This is initially true and if the
- // window has WS_EX_LAYERED then it remains true. You can set this to false
- // at any time to ditch the buffer, and similarly set back to true to force
- // creation of the buffer.
- //
- // NOTE: this is intended to be used with a layered window (a window with an
- // extended window style of WS_EX_LAYERED). If you are using a layered window
- // and NOT changing the layered alpha or anything else, then leave this value
- // alone. OTOH if you are invoking SetLayeredWindowAttributes then you'll
- // must likely want to set this to false, or after changing the alpha toggle
- // the extended style bit to false than back to true. See MSDN for more
- // details.
- bool use_layered_buffer_;
-
- // The default alpha to be applied to the layered window.
- BYTE layered_alpha_;
-
- // A canvas that contains the window contents in the case of a layered
- // window.
- scoped_ptr<ChromeCanvas> contents_;
-
- // Whether or not the window should delete itself when it is destroyed.
- // Set this to false via its setter for stack allocated instances.
- bool delete_on_destroy_;
-
- // True if we are allowed to update the layered window from the DIB backing
- // store if necessary.
- bool can_update_layered_window_;
-
- // The following are used to detect duplicate mouse move events and not
- // deliver them. Displaying a window may result in the system generating
- // duplicate move events even though the mouse hasn't moved.
-
- // If true, the last event was a mouse move event.
- bool last_mouse_event_was_move_;
-
- // Coordinates of the last mouse move event, in screen coordinates.
- int last_mouse_move_x_;
- int last_mouse_move_y_;
-
- // Instance of accessibility information and handling for MSAA root
- CComPtr<IAccessible> accessibility_root_;
-
- // Our hwnd.
- HWND hwnd_;
-};
-
-} // namespace views
-
-#endif // #ifndef CHROME_VIEWS_WIDGET_WIDGET_WIN_H_
diff --git a/chrome/views/window/client_view.cc b/chrome/views/window/client_view.cc
deleted file mode 100644
index 9b1e578..0000000
--- a/chrome/views/window/client_view.cc
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "base/logging.h"
-#include "chrome/views/window/client_view.h"
-#if defined(OS_LINUX)
-#include "chrome/views/window/hit_test.h"
-#endif
-#include "chrome/views/window/window.h"
-#include "chrome/views/window/window_delegate.h"
-
-namespace views {
-
-///////////////////////////////////////////////////////////////////////////////
-// ClientView, public:
-
-ClientView::ClientView(Window* window, View* contents_view)
- : window_(window),
- contents_view_(contents_view) {
-}
-
-int ClientView::NonClientHitTest(const gfx::Point& point) {
- return bounds().Contains(point) ? HTCLIENT : HTNOWHERE;
-}
-
-void ClientView::WindowClosing() {
- window_->GetDelegate()->WindowClosing();
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// ClientView, View overrides:
-
-gfx::Size ClientView::GetPreferredSize() {
- // |contents_view_| is allowed to be NULL up until the point where this view
- // is attached to a Container.
- if (contents_view_)
- return contents_view_->GetPreferredSize();
- return gfx::Size();
-}
-
-void ClientView::Layout() {
- // |contents_view_| is allowed to be NULL up until the point where this view
- // is attached to a Container.
- if (contents_view_)
- contents_view_->SetBounds(0, 0, width(), height());
-}
-
-void ClientView::ViewHierarchyChanged(bool is_add, View* parent, View* child) {
- if (is_add && child == this) {
- DCHECK(GetWidget());
- DCHECK(contents_view_); // |contents_view_| must be valid now!
- AddChildView(contents_view_);
- }
-}
-
-void ClientView::DidChangeBounds(const gfx::Rect& previous,
- const gfx::Rect& current) {
- // Overridden to do nothing. The NonClientView manually calls Layout on the
- // ClientView when it is itself laid out, see comment in
- // NonClientView::Layout.
-}
-
-} // namespace views
diff --git a/chrome/views/window/client_view.h b/chrome/views/window/client_view.h
deleted file mode 100644
index 9db0c69..0000000
--- a/chrome/views/window/client_view.h
+++ /dev/null
@@ -1,84 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_WINDOW_CLIENT_VIEW_H_
-#define CHROME_VIEWS_WINDOW_CLIENT_VIEW_H_
-
-#include "chrome/views/view.h"
-
-namespace views {
-
-class DialogClientView;
-class Window;
-
-///////////////////////////////////////////////////////////////////////////////
-// ClientView
-//
-// A ClientView is a View subclass that is used to occupy the "client area"
-// of a window. It provides basic information to the window that contains it
-// such as non-client hit testing information, sizing etc. Sub-classes of
-// ClientView are used to create more elaborate contents, e.g.
-// "DialogClientView".
-class ClientView : public View {
- public:
- // Constructs a ClientView object for the specified window with the specified
- // contents. Since this object is created during the process of creating
- // |window|, |contents_view| must be valid if you want the initial size of
- // the window to be based on |contents_view|'s preferred size.
- ClientView(Window* window, View* contents_view);
- virtual ~ClientView() {}
-
- // Manual RTTI ftw.
- virtual DialogClientView* AsDialogClientView() { return NULL; }
-
- // Returns true to signal that the Window can be closed. Specialized
- // ClientView subclasses can override this default behavior to allow the
- // close to be blocked until the user corrects mistakes, accepts a warning
- // dialog, etc.
- virtual bool CanClose() const { return true; }
-
- // Notification that the window is closing. The default implementation
- // forwards the notification to the delegate.
- virtual void WindowClosing();
-
- // Tests to see if the specified point (in view coordinates) is within the
- // bounds of this view. If so, it returns HTCLIENT in this default
- // implementation. If it is outside the bounds of this view, this must return
- // HTNOWHERE to tell the caller to do further processing to determine where
- // in the non-client area it is (if it is).
- // Subclasses of ClientView can extend this logic by overriding this method
- // to detect if regions within the client area count as parts of the "non-
- // client" area. A good example of this is the size box at the bottom right
- // corner of resizable dialog boxes.
- virtual int NonClientHitTest(const gfx::Point& point);
-
- // Overridden from View:
- virtual gfx::Size GetPreferredSize();
- virtual void Layout();
-
- protected:
- // Overridden from View:
- virtual void ViewHierarchyChanged(bool is_add, View* parent, View* child);
- virtual void DidChangeBounds(const gfx::Rect& previous,
- const gfx::Rect& current);
-
- // Accessors for private data members.
- Window* window() const { return window_; }
- void set_window(Window* window) { window_ = window; }
- View* contents_view() const { return contents_view_; }
- void set_contents_view(View* contents_view) {
- contents_view_ = contents_view;
- }
-
- private:
- // The Window that hosts this ClientView.
- Window* window_;
-
- // The View that this ClientView contains.
- View* contents_view_;
-};
-
-} // namespace views
-
-#endif // #ifndef CHROME_VIEWS_WINDOW_CLIENT_VIEW_H_
diff --git a/chrome/views/window/custom_frame_view.cc b/chrome/views/window/custom_frame_view.cc
deleted file mode 100644
index c8a33fd..0000000
--- a/chrome/views/window/custom_frame_view.cc
+++ /dev/null
@@ -1,705 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/window/custom_frame_view.h"
-
-#include "app/gfx/chrome_canvas.h"
-#include "app/gfx/chrome_font.h"
-#include "app/gfx/path.h"
-#include "app/resource_bundle.h"
-#if defined(OS_WIN)
-#include "base/win_util.h"
-#include "chrome/common/win_util.h"
-#endif
-#include "chrome/views/window/client_view.h"
-#if defined(OS_LINUX)
-#include "chrome/views/window/hit_test.h"
-#endif
-#include "chrome/views/window/window_delegate.h"
-#include "grit/theme_resources.h"
-
-namespace views {
-
-// An enumeration of bitmap resources used by this window.
-enum {
- FRAME_PART_BITMAP_FIRST = 0, // Must be first.
-
- // Window Controls.
- FRAME_CLOSE_BUTTON_ICON,
- FRAME_CLOSE_BUTTON_ICON_H,
- FRAME_CLOSE_BUTTON_ICON_P,
- FRAME_CLOSE_BUTTON_ICON_SA,
- FRAME_CLOSE_BUTTON_ICON_SA_H,
- FRAME_CLOSE_BUTTON_ICON_SA_P,
- FRAME_RESTORE_BUTTON_ICON,
- FRAME_RESTORE_BUTTON_ICON_H,
- FRAME_RESTORE_BUTTON_ICON_P,
- FRAME_MAXIMIZE_BUTTON_ICON,
- FRAME_MAXIMIZE_BUTTON_ICON_H,
- FRAME_MAXIMIZE_BUTTON_ICON_P,
- FRAME_MINIMIZE_BUTTON_ICON,
- FRAME_MINIMIZE_BUTTON_ICON_H,
- FRAME_MINIMIZE_BUTTON_ICON_P,
-
- // Window Frame Border.
- FRAME_BOTTOM_EDGE,
- FRAME_BOTTOM_LEFT_CORNER,
- FRAME_BOTTOM_RIGHT_CORNER,
- FRAME_LEFT_EDGE,
- FRAME_RIGHT_EDGE,
- FRAME_TOP_EDGE,
- FRAME_TOP_LEFT_CORNER,
- FRAME_TOP_RIGHT_CORNER,
-
- // Client Edge Border.
- FRAME_CLIENT_EDGE_TOP_LEFT,
- FRAME_CLIENT_EDGE_TOP,
- FRAME_CLIENT_EDGE_TOP_RIGHT,
- FRAME_CLIENT_EDGE_RIGHT,
- FRAME_CLIENT_EDGE_BOTTOM_RIGHT,
- FRAME_CLIENT_EDGE_BOTTOM,
- FRAME_CLIENT_EDGE_BOTTOM_LEFT,
- FRAME_CLIENT_EDGE_LEFT,
-
- FRAME_PART_BITMAP_COUNT // Must be last.
-};
-
-class ActiveWindowResources : public WindowResources {
- public:
- ActiveWindowResources() {
- InitClass();
- }
- virtual ~ActiveWindowResources() {
- }
-
- // WindowResources implementation:
- virtual SkBitmap* GetPartBitmap(FramePartBitmap part) const {
- return standard_frame_bitmaps_[part];
- }
-
- private:
- static void InitClass() {
- static bool initialized = false;
- if (!initialized) {
- static const int kFramePartBitmapIds[] = {
- 0,
- IDR_CLOSE, IDR_CLOSE_H, IDR_CLOSE_P,
- IDR_CLOSE_SA, IDR_CLOSE_SA_H, IDR_CLOSE_SA_P,
- IDR_RESTORE, IDR_RESTORE_H, IDR_RESTORE_P,
- IDR_MAXIMIZE, IDR_MAXIMIZE_H, IDR_MAXIMIZE_P,
- IDR_MINIMIZE, IDR_MINIMIZE_H, IDR_MINIMIZE_P,
- IDR_WINDOW_BOTTOM_CENTER, IDR_WINDOW_BOTTOM_LEFT_CORNER,
- IDR_WINDOW_BOTTOM_RIGHT_CORNER, IDR_WINDOW_LEFT_SIDE,
- IDR_WINDOW_RIGHT_SIDE, IDR_WINDOW_TOP_CENTER,
- IDR_WINDOW_TOP_LEFT_CORNER, IDR_WINDOW_TOP_RIGHT_CORNER,
- IDR_APP_TOP_LEFT, IDR_APP_TOP_CENTER, IDR_APP_TOP_RIGHT,
- IDR_CONTENT_RIGHT_SIDE, IDR_CONTENT_BOTTOM_RIGHT_CORNER,
- IDR_CONTENT_BOTTOM_CENTER, IDR_CONTENT_BOTTOM_LEFT_CORNER,
- IDR_CONTENT_LEFT_SIDE,
- 0
- };
-
- ResourceBundle& rb = ResourceBundle::GetSharedInstance();
- for (int i = 0; i < FRAME_PART_BITMAP_COUNT; ++i) {
- int id = kFramePartBitmapIds[i];
- if (id != 0)
- standard_frame_bitmaps_[i] = rb.GetBitmapNamed(id);
- }
- initialized = true;
- }
- }
-
- static SkBitmap* standard_frame_bitmaps_[FRAME_PART_BITMAP_COUNT];
-
- DISALLOW_EVIL_CONSTRUCTORS(ActiveWindowResources);
-};
-
-class InactiveWindowResources : public WindowResources {
- public:
- InactiveWindowResources() {
- InitClass();
- }
- virtual ~InactiveWindowResources() {
- }
-
- // WindowResources implementation:
- virtual SkBitmap* GetPartBitmap(FramePartBitmap part) const {
- return standard_frame_bitmaps_[part];
- }
-
- private:
- static void InitClass() {
- static bool initialized = false;
- if (!initialized) {
- static const int kFramePartBitmapIds[] = {
- 0,
- IDR_CLOSE, IDR_CLOSE_H, IDR_CLOSE_P,
- IDR_CLOSE_SA, IDR_CLOSE_SA_H, IDR_CLOSE_SA_P,
- IDR_RESTORE, IDR_RESTORE_H, IDR_RESTORE_P,
- IDR_MAXIMIZE, IDR_MAXIMIZE_H, IDR_MAXIMIZE_P,
- IDR_MINIMIZE, IDR_MINIMIZE_H, IDR_MINIMIZE_P,
- IDR_DEWINDOW_BOTTOM_CENTER, IDR_DEWINDOW_BOTTOM_LEFT_CORNER,
- IDR_DEWINDOW_BOTTOM_RIGHT_CORNER, IDR_DEWINDOW_LEFT_SIDE,
- IDR_DEWINDOW_RIGHT_SIDE, IDR_DEWINDOW_TOP_CENTER,
- IDR_DEWINDOW_TOP_LEFT_CORNER, IDR_DEWINDOW_TOP_RIGHT_CORNER,
- IDR_APP_TOP_LEFT, IDR_APP_TOP_CENTER, IDR_APP_TOP_RIGHT,
- IDR_CONTENT_RIGHT_SIDE, IDR_CONTENT_BOTTOM_RIGHT_CORNER,
- IDR_CONTENT_BOTTOM_CENTER, IDR_CONTENT_BOTTOM_LEFT_CORNER,
- IDR_CONTENT_LEFT_SIDE,
- 0
- };
-
- ResourceBundle& rb = ResourceBundle::GetSharedInstance();
- for (int i = 0; i < FRAME_PART_BITMAP_COUNT; ++i) {
- int id = kFramePartBitmapIds[i];
- if (id != 0)
- standard_frame_bitmaps_[i] = rb.GetBitmapNamed(id);
- }
- initialized = true;
- }
- }
-
- static SkBitmap* standard_frame_bitmaps_[FRAME_PART_BITMAP_COUNT];
-
- DISALLOW_EVIL_CONSTRUCTORS(InactiveWindowResources);
-};
-
-// static
-SkBitmap* ActiveWindowResources::standard_frame_bitmaps_[];
-SkBitmap* InactiveWindowResources::standard_frame_bitmaps_[];
-
-// static
-WindowResources* CustomFrameView::active_resources_ = NULL;
-WindowResources* CustomFrameView::inactive_resources_ = NULL;
-ChromeFont* CustomFrameView::title_font_ = NULL;
-
-namespace {
-// The frame border is only visible in restored mode and is hardcoded to 4 px on
-// each side regardless of the system window border size.
-const int kFrameBorderThickness = 4;
-// Various edges of the frame border have a 1 px shadow along their edges; in a
-// few cases we shift elements based on this amount for visual appeal.
-const int kFrameShadowThickness = 1;
-// While resize areas on Windows are normally the same size as the window
-// borders, our top area is shrunk by 1 px to make it easier to move the window
-// around with our thinner top grabbable strip. (Incidentally, our side and
-// bottom resize areas don't match the frame border thickness either -- they
-// span the whole nonclient area, so there's no "dead zone" for the mouse.)
-const int kTopResizeAdjust = 1;
-// In the window corners, the resize areas don't actually expand bigger, but the
-// 16 px at the end of each edge triggers diagonal resizing.
-const int kResizeAreaCornerSize = 16;
-// The titlebar never shrinks to less than 18 px tall, plus the height of the
-// frame border and any bottom edge.
-const int kTitlebarMinimumHeight = 18;
-// The icon is inset 2 px from the left frame border.
-const int kIconLeftSpacing = 2;
-// The icon takes up 16/25th of the available titlebar height. (This is
-// expressed as two ints to avoid precision losses leading to off-by-one pixel
-// errors.)
-const int kIconHeightFractionNumerator = 16;
-const int kIconHeightFractionDenominator = 25;
-// The icon never shrinks below 16 px on a side.
-const int kIconMinimumSize = 16;
-// Because our frame border has a different "3D look" than Windows', with a less
-// cluttered top edge, we need to shift the icon up by 1 px in restored mode so
-// it looks more centered.
-const int kIconRestoredAdjust = 1;
-// There is a 4 px gap between the icon and the title text.
-const int kIconTitleSpacing = 4;
-// The title text starts 2 px below the bottom of the top frame border.
-const int kTitleTopSpacing = 2;
-// There is a 5 px gap between the title text and the caption buttons.
-const int kTitleCaptionSpacing = 5;
-// The caption buttons are always drawn 1 px down from the visible top of the
-// window (the true top in restored mode, or the top of the screen in maximized
-// mode).
-const int kCaptionTopSpacing = 1;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// CustomFrameView, public:
-
-CustomFrameView::CustomFrameView(Window* frame)
- : NonClientFrameView(),
- close_button_(new ImageButton(this)),
- restore_button_(new ImageButton(this)),
- maximize_button_(new ImageButton(this)),
- minimize_button_(new ImageButton(this)),
- system_menu_button_(new ImageButton(this)),
- should_show_minmax_buttons_(false),
- frame_(frame) {
- InitClass();
- WindowResources* resources = active_resources_;
-
- // Close button images will be set in LayoutWindowControls().
- AddChildView(close_button_);
-
- restore_button_->SetImage(CustomButton::BS_NORMAL,
- resources->GetPartBitmap(FRAME_RESTORE_BUTTON_ICON));
- restore_button_->SetImage(CustomButton::BS_HOT,
- resources->GetPartBitmap(FRAME_RESTORE_BUTTON_ICON_H));
- restore_button_->SetImage(CustomButton::BS_PUSHED,
- resources->GetPartBitmap(FRAME_RESTORE_BUTTON_ICON_P));
- AddChildView(restore_button_);
-
- maximize_button_->SetImage(CustomButton::BS_NORMAL,
- resources->GetPartBitmap(FRAME_MAXIMIZE_BUTTON_ICON));
- maximize_button_->SetImage(CustomButton::BS_HOT,
- resources->GetPartBitmap(FRAME_MAXIMIZE_BUTTON_ICON_H));
- maximize_button_->SetImage(CustomButton::BS_PUSHED,
- resources->GetPartBitmap(FRAME_MAXIMIZE_BUTTON_ICON_P));
- AddChildView(maximize_button_);
-
- minimize_button_->SetImage(CustomButton::BS_NORMAL,
- resources->GetPartBitmap(FRAME_MINIMIZE_BUTTON_ICON));
- minimize_button_->SetImage(CustomButton::BS_HOT,
- resources->GetPartBitmap(FRAME_MINIMIZE_BUTTON_ICON_H));
- minimize_button_->SetImage(CustomButton::BS_PUSHED,
- resources->GetPartBitmap(FRAME_MINIMIZE_BUTTON_ICON_P));
- AddChildView(minimize_button_);
-
- should_show_minmax_buttons_ = frame_->GetDelegate()->CanMaximize();
-
- AddChildView(system_menu_button_);
-}
-
-CustomFrameView::~CustomFrameView() {
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// CustomFrameView, NonClientFrameView implementation:
-
-gfx::Rect CustomFrameView::GetBoundsForClientView() const {
- return client_view_bounds_;
-}
-
-gfx::Rect CustomFrameView::GetWindowBoundsForClientBounds(
- const gfx::Rect& client_bounds) const {
- int top_height = NonClientTopBorderHeight();
- int border_thickness = NonClientBorderThickness();
- return gfx::Rect(std::max(0, client_bounds.x() - border_thickness),
- std::max(0, client_bounds.y() - top_height),
- client_bounds.width() + (2 * border_thickness),
- client_bounds.height() + top_height + border_thickness);
-}
-
-gfx::Point CustomFrameView::GetSystemMenuPoint() const {
- gfx::Point system_menu_point(
- MirroredXCoordinateInsideView(FrameBorderThickness()),
- NonClientTopBorderHeight() - BottomEdgeThicknessWithinNonClientHeight());
- ConvertPointToScreen(this, &system_menu_point);
- return system_menu_point;
-}
-
-int CustomFrameView::NonClientHitTest(const gfx::Point& point) {
- // Then see if the point is within any of the window controls.
- if (close_button_->GetBounds(APPLY_MIRRORING_TRANSFORMATION).Contains(point))
- return HTCLOSE;
- if (restore_button_->GetBounds(APPLY_MIRRORING_TRANSFORMATION).Contains(
- point))
- return HTMAXBUTTON;
- if (maximize_button_->GetBounds(APPLY_MIRRORING_TRANSFORMATION).Contains(
- point))
- return HTMAXBUTTON;
- if (minimize_button_->GetBounds(APPLY_MIRRORING_TRANSFORMATION).Contains(
- point))
- return HTMINBUTTON;
- if (system_menu_button_->GetBounds(APPLY_MIRRORING_TRANSFORMATION).Contains(
- point))
- return HTSYSMENU;
-
- int window_component = GetHTComponentForFrame(point, FrameBorderThickness(),
- NonClientBorderThickness(), kResizeAreaCornerSize, kResizeAreaCornerSize,
- frame_->GetDelegate()->CanResize());
- // Fall back to the caption if no other component matches.
- return (window_component == HTNOWHERE) ? HTCAPTION : window_component;
-}
-
-void CustomFrameView::GetWindowMask(const gfx::Size& size,
- gfx::Path* window_mask) {
- DCHECK(window_mask);
-
- if (frame_->IsMaximized())
- return;
-
- // Redefine the window visible region for the new size.
- window_mask->moveTo(0, 3);
- window_mask->lineTo(1, 2);
- window_mask->lineTo(1, 1);
- window_mask->lineTo(2, 1);
- window_mask->lineTo(3, 0);
-
- window_mask->lineTo(SkIntToScalar(size.width() - 3), 0);
- window_mask->lineTo(SkIntToScalar(size.width() - 2), 1);
- window_mask->lineTo(SkIntToScalar(size.width() - 1), 1);
- window_mask->lineTo(SkIntToScalar(size.width() - 1), 2);
- window_mask->lineTo(SkIntToScalar(size.width()), 3);
-
- window_mask->lineTo(SkIntToScalar(size.width()),
- SkIntToScalar(size.height()));
- window_mask->lineTo(0, SkIntToScalar(size.height()));
- window_mask->close();
-}
-
-void CustomFrameView::EnableClose(bool enable) {
- close_button_->SetEnabled(enable);
-}
-
-void CustomFrameView::ResetWindowControls() {
- restore_button_->SetState(CustomButton::BS_NORMAL);
- minimize_button_->SetState(CustomButton::BS_NORMAL);
- maximize_button_->SetState(CustomButton::BS_NORMAL);
- // The close button isn't affected by this constraint.
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// CustomFrameView, View overrides:
-
-void CustomFrameView::Paint(ChromeCanvas* canvas) {
- if (frame_->IsMaximized())
- PaintMaximizedFrameBorder(canvas);
- else
- PaintRestoredFrameBorder(canvas);
- PaintTitleBar(canvas);
- if (!frame_->IsMaximized())
- PaintRestoredClientEdge(canvas);
-}
-
-void CustomFrameView::Layout() {
- LayoutWindowControls();
- LayoutTitleBar();
- LayoutClientView();
-}
-
-gfx::Size CustomFrameView::GetPreferredSize() {
- gfx::Size pref = frame_->GetClientView()->GetPreferredSize();
- gfx::Rect bounds(0, 0, pref.width(), pref.height());
- return frame_->GetNonClientView()->GetWindowBoundsForClientBounds(
- bounds).size();
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// CustomFrameView, ButtonListener implementation:
-
-void CustomFrameView::ButtonPressed(Button* sender) {
- if (sender == close_button_)
- frame_->Close();
- else if (sender == minimize_button_)
- frame_->Minimize();
- else if (sender == maximize_button_)
- frame_->Maximize();
- else if (sender == restore_button_)
- frame_->Restore();
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// CustomFrameView, private:
-
-int CustomFrameView::FrameBorderThickness() const {
- return frame_->IsMaximized() ? 0 : kFrameBorderThickness;
-}
-
-int CustomFrameView::NonClientBorderThickness() const {
- // In maximized mode, we don't show a client edge.
- return FrameBorderThickness() +
- (frame_->IsMaximized() ? 0 : kClientEdgeThickness);
-}
-
-int CustomFrameView::NonClientTopBorderHeight() const {
- int title_top_spacing, title_thickness;
- return TitleCoordinates(&title_top_spacing, &title_thickness);
-}
-
-int CustomFrameView::BottomEdgeThicknessWithinNonClientHeight() const {
- return kFrameShadowThickness +
- (frame_->IsMaximized() ? 0 : kClientEdgeThickness);
-}
-
-int CustomFrameView::TitleCoordinates(int* title_top_spacing,
- int* title_thickness) const {
- int frame_thickness = FrameBorderThickness();
- int min_titlebar_height = kTitlebarMinimumHeight + frame_thickness;
- *title_top_spacing = frame_thickness + kTitleTopSpacing;
- // The bottom spacing should be the same apparent height as the top spacing.
- // Because the actual top spacing height varies based on the system border
- // thickness, we calculate this based on the restored top spacing and then
- // adjust for maximized mode. We also don't include the frame shadow here,
- // since while it's part of the bottom spacing it will be added in at the end.
- int title_bottom_spacing =
- kFrameBorderThickness + kTitleTopSpacing - kFrameShadowThickness;
- if (frame_->IsMaximized()) {
- // When we maximize, the top border appears to be chopped off; shift the
- // title down to stay centered within the remaining space.
- int title_adjust = (kFrameBorderThickness / 2);
- *title_top_spacing += title_adjust;
- title_bottom_spacing -= title_adjust;
- }
- *title_thickness = std::max(title_font_->height(),
- min_titlebar_height - *title_top_spacing - title_bottom_spacing);
- return *title_top_spacing + *title_thickness + title_bottom_spacing +
- BottomEdgeThicknessWithinNonClientHeight();
-}
-
-void CustomFrameView::PaintRestoredFrameBorder(ChromeCanvas* canvas) {
- SkBitmap* top_left_corner = resources()->GetPartBitmap(FRAME_TOP_LEFT_CORNER);
- SkBitmap* top_right_corner =
- resources()->GetPartBitmap(FRAME_TOP_RIGHT_CORNER);
- SkBitmap* top_edge = resources()->GetPartBitmap(FRAME_TOP_EDGE);
- SkBitmap* right_edge = resources()->GetPartBitmap(FRAME_RIGHT_EDGE);
- SkBitmap* left_edge = resources()->GetPartBitmap(FRAME_LEFT_EDGE);
- SkBitmap* bottom_left_corner =
- resources()->GetPartBitmap(FRAME_BOTTOM_LEFT_CORNER);
- SkBitmap* bottom_right_corner =
- resources()->GetPartBitmap(FRAME_BOTTOM_RIGHT_CORNER);
- SkBitmap* bottom_edge = resources()->GetPartBitmap(FRAME_BOTTOM_EDGE);
-
- // Top.
- canvas->DrawBitmapInt(*top_left_corner, 0, 0);
- canvas->TileImageInt(*top_edge, top_left_corner->width(), 0,
- width() - top_right_corner->width(), top_edge->height());
- canvas->DrawBitmapInt(*top_right_corner,
- width() - top_right_corner->width(), 0);
-
- // Right.
- canvas->TileImageInt(*right_edge, width() - right_edge->width(),
- top_right_corner->height(), right_edge->width(),
- height() - top_right_corner->height() -
- bottom_right_corner->height());
-
- // Bottom.
- canvas->DrawBitmapInt(*bottom_right_corner,
- width() - bottom_right_corner->width(),
- height() - bottom_right_corner->height());
- canvas->TileImageInt(*bottom_edge, bottom_left_corner->width(),
- height() - bottom_edge->height(),
- width() - bottom_left_corner->width() -
- bottom_right_corner->width(),
- bottom_edge->height());
- canvas->DrawBitmapInt(*bottom_left_corner, 0,
- height() - bottom_left_corner->height());
-
- // Left.
- canvas->TileImageInt(*left_edge, 0, top_left_corner->height(),
- left_edge->width(),
- height() - top_left_corner->height() - bottom_left_corner->height());
-}
-
-void CustomFrameView::PaintMaximizedFrameBorder(
- ChromeCanvas* canvas) {
- SkBitmap* top_edge = resources()->GetPartBitmap(FRAME_TOP_EDGE);
- canvas->TileImageInt(*top_edge, 0, FrameBorderThickness(), width(),
- top_edge->height());
-
- // The bottom of the titlebar actually comes from the top of the Client Edge
- // graphic, with the actual client edge clipped off the bottom.
- SkBitmap* titlebar_bottom = resources()->GetPartBitmap(FRAME_CLIENT_EDGE_TOP);
- int edge_height = titlebar_bottom->height() - kClientEdgeThickness;
- canvas->TileImageInt(*titlebar_bottom, 0,
- frame_->GetClientView()->y() - edge_height, width(), edge_height);
-}
-
-void CustomFrameView::PaintTitleBar(ChromeCanvas* canvas) {
- WindowDelegate* d = frame_->GetDelegate();
-
- // It seems like in some conditions we can be asked to paint after the window
- // that contains us is WM_DESTROYed. At this point, our delegate is NULL. The
- // correct long term fix may be to shut down the RootView in WM_DESTROY.
- if (!d)
- return;
-
- canvas->DrawStringInt(d->GetWindowTitle(), *title_font_, SK_ColorWHITE,
- MirroredLeftPointForRect(title_bounds_), title_bounds_.y(),
- title_bounds_.width(), title_bounds_.height());
-}
-
-void CustomFrameView::PaintRestoredClientEdge(ChromeCanvas* canvas) {
- gfx::Rect client_area_bounds = frame_->GetClientView()->bounds();
- int client_area_top = client_area_bounds.y();
-
- SkBitmap* top_left = resources()->GetPartBitmap(FRAME_CLIENT_EDGE_TOP_LEFT);
- SkBitmap* top = resources()->GetPartBitmap(FRAME_CLIENT_EDGE_TOP);
- SkBitmap* top_right = resources()->GetPartBitmap(FRAME_CLIENT_EDGE_TOP_RIGHT);
- SkBitmap* right = resources()->GetPartBitmap(FRAME_CLIENT_EDGE_RIGHT);
- SkBitmap* bottom_right =
- resources()->GetPartBitmap(FRAME_CLIENT_EDGE_BOTTOM_RIGHT);
- SkBitmap* bottom = resources()->GetPartBitmap(FRAME_CLIENT_EDGE_BOTTOM);
- SkBitmap* bottom_left =
- resources()->GetPartBitmap(FRAME_CLIENT_EDGE_BOTTOM_LEFT);
- SkBitmap* left = resources()->GetPartBitmap(FRAME_CLIENT_EDGE_LEFT);
-
- // Top.
- // This next calculation is necessary because the top center bitmap is shorter
- // than the top left and right bitmaps. We need their top edges to line up,
- // and we need the left and right edges to start below the corners' bottoms.
- int top_edge_y = client_area_top - top->height();
- client_area_top = top_edge_y + top_left->height();
- canvas->DrawBitmapInt(*top_left, client_area_bounds.x() - top_left->width(),
- top_edge_y);
- canvas->TileImageInt(*top, client_area_bounds.x(), top_edge_y,
- client_area_bounds.width(), top->height());
- canvas->DrawBitmapInt(*top_right, client_area_bounds.right(), top_edge_y);
-
- // Right.
- int client_area_bottom =
- std::max(client_area_top, client_area_bounds.bottom());
- int client_area_height = client_area_bottom - client_area_top;
- canvas->TileImageInt(*right, client_area_bounds.right(), client_area_top,
- right->width(), client_area_height);
-
- // Bottom.
- canvas->DrawBitmapInt(*bottom_right, client_area_bounds.right(),
- client_area_bottom);
- canvas->TileImageInt(*bottom, client_area_bounds.x(), client_area_bottom,
- client_area_bounds.width(), bottom_right->height());
- canvas->DrawBitmapInt(*bottom_left,
- client_area_bounds.x() - bottom_left->width(), client_area_bottom);
-
- // Left.
- canvas->TileImageInt(*left, client_area_bounds.x() - left->width(),
- client_area_top, left->width(), client_area_height);
-}
-
-void CustomFrameView::LayoutWindowControls() {
- close_button_->SetImageAlignment(ImageButton::ALIGN_LEFT,
- ImageButton::ALIGN_BOTTOM);
- // Maximized buttons start at window top so that even if their images aren't
- // drawn flush with the screen edge, they still obey Fitts' Law.
- bool is_maximized = frame_->IsMaximized();
- int frame_thickness = FrameBorderThickness();
- int caption_y = is_maximized ? frame_thickness : kCaptionTopSpacing;
- int top_extra_height = is_maximized ? kCaptionTopSpacing : 0;
- // There should always be the same number of non-shadow pixels visible to the
- // side of the caption buttons. In maximized mode we extend the rightmost
- // button to the screen corner to obey Fitts' Law.
- int right_extra_width = is_maximized ?
- (kFrameBorderThickness - kFrameShadowThickness) : 0;
- gfx::Size close_button_size = close_button_->GetPreferredSize();
- close_button_->SetBounds(width() - close_button_size.width() -
- right_extra_width - frame_thickness, caption_y,
- close_button_size.width() + right_extra_width,
- close_button_size.height() + top_extra_height);
-
- // When the window is restored, we show a maximized button; otherwise, we show
- // a restore button.
- bool is_restored = !is_maximized && !frame_->IsMinimized();
- views::ImageButton* invisible_button = is_restored ?
- restore_button_ : maximize_button_;
- invisible_button->SetVisible(false);
-
- views::ImageButton* visible_button = is_restored ?
- maximize_button_ : restore_button_;
- FramePartBitmap normal_part, hot_part, pushed_part;
- if (should_show_minmax_buttons_) {
- visible_button->SetVisible(true);
- visible_button->SetImageAlignment(ImageButton::ALIGN_LEFT,
- ImageButton::ALIGN_BOTTOM);
- gfx::Size visible_button_size = visible_button->GetPreferredSize();
- visible_button->SetBounds(close_button_->x() - visible_button_size.width(),
- caption_y, visible_button_size.width(),
- visible_button_size.height() + top_extra_height);
-
- minimize_button_->SetVisible(true);
- minimize_button_->SetImageAlignment(ImageButton::ALIGN_LEFT,
- ImageButton::ALIGN_BOTTOM);
- gfx::Size minimize_button_size = minimize_button_->GetPreferredSize();
- minimize_button_->SetBounds(
- visible_button->x() - minimize_button_size.width(), caption_y,
- minimize_button_size.width(),
- minimize_button_size.height() + top_extra_height);
-
- normal_part = FRAME_CLOSE_BUTTON_ICON;
- hot_part = FRAME_CLOSE_BUTTON_ICON_H;
- pushed_part = FRAME_CLOSE_BUTTON_ICON_P;
- } else {
- visible_button->SetVisible(false);
- minimize_button_->SetVisible(false);
-
- normal_part = FRAME_CLOSE_BUTTON_ICON_SA;
- hot_part = FRAME_CLOSE_BUTTON_ICON_SA_H;
- pushed_part = FRAME_CLOSE_BUTTON_ICON_SA_P;
- }
-
- close_button_->SetImage(CustomButton::BS_NORMAL,
- active_resources_->GetPartBitmap(normal_part));
- close_button_->SetImage(CustomButton::BS_HOT,
- active_resources_->GetPartBitmap(hot_part));
- close_button_->SetImage(CustomButton::BS_PUSHED,
- active_resources_->GetPartBitmap(pushed_part));
-}
-
-void CustomFrameView::LayoutTitleBar() {
- // Always lay out the icon, even when it's not present, so we can lay out the
- // window title based on its position.
- int frame_thickness = FrameBorderThickness();
- int icon_x = frame_thickness + kIconLeftSpacing;
-
- // The usable height of the titlebar area is the total height minus the top
- // resize border and any edge area we draw at its bottom.
- int title_top_spacing, title_thickness;
- int top_height = TitleCoordinates(&title_top_spacing, &title_thickness);
- int available_height = top_height - frame_thickness -
- BottomEdgeThicknessWithinNonClientHeight();
-
- // The icon takes up a constant fraction of the available height, down to a
- // minimum size, and is always an even number of pixels on a side (presumably
- // to make scaled icons look better). It's centered within the usable height.
- int icon_size = std::max((available_height * kIconHeightFractionNumerator /
- kIconHeightFractionDenominator) / 2 * 2, kIconMinimumSize);
- int icon_y = ((available_height - icon_size) / 2) + frame_thickness;
-
- // Hack: Our frame border has a different "3D look" than Windows'. Theirs has
- // a more complex gradient on the top that they push their icon/title below;
- // then the maximized window cuts this off and the icon/title are centered in
- // the remaining space. Because the apparent shape of our border is simpler,
- // using the same positioning makes things look slightly uncentered with
- // restored windows, so we come up to compensate.
- if (!frame_->IsMaximized())
- icon_y -= kIconRestoredAdjust;
-
- views::WindowDelegate* d = frame_->GetDelegate();
- if (!d->ShouldShowWindowIcon())
- icon_size = 0;
- system_menu_button_->SetBounds(icon_x, icon_y, icon_size, icon_size);
-
- // Size the title.
- int icon_right = icon_x + icon_size;
- int title_x =
- icon_right + (d->ShouldShowWindowIcon() ? kIconTitleSpacing : 0);
- int title_right = (should_show_minmax_buttons_ ?
- minimize_button_->x() : close_button_->x()) - kTitleCaptionSpacing;
- title_bounds_.SetRect(title_x,
- title_top_spacing + ((title_thickness - title_font_->height()) / 2),
- std::max(0, title_right - title_x), title_font_->height());
-}
-
-void CustomFrameView::LayoutClientView() {
- int top_height = NonClientTopBorderHeight();
- int border_thickness = NonClientBorderThickness();
- client_view_bounds_.SetRect(
- border_thickness,
- top_height,
- std::max(0, width() - (2 * border_thickness)),
- std::max(0, height() - top_height - border_thickness));
-}
-
-// static
-void CustomFrameView::InitClass() {
- static bool initialized = false;
- if (!initialized) {
- active_resources_ = new ActiveWindowResources;
- inactive_resources_ = new InactiveWindowResources;
-
-#if defined(OS_WIN)
- title_font_ = new ChromeFont(win_util::GetWindowTitleFont());
-#elif defined(OS_LINUX)
- // TODO: need to resolve what font this is.
- title_font_ = new ChromeFont();
-#endif
-
- initialized = true;
- }
-}
-
-} // namespace views
diff --git a/chrome/views/window/custom_frame_view.h b/chrome/views/window/custom_frame_view.h
deleted file mode 100644
index 1170355..0000000
--- a/chrome/views/window/custom_frame_view.h
+++ /dev/null
@@ -1,122 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_WINDOW_CUSTOM_FRAME_VIEW_H_
-#define CHROME_VIEWS_WINDOW_CUSTOM_FRAME_VIEW_H_
-
-#include "chrome/views/controls/button/image_button.h"
-#include "chrome/views/window/non_client_view.h"
-#include "chrome/views/window/window.h"
-#include "chrome/views/window/window_resources.h"
-
-namespace gfx{
-class Size;
-class Path;
-class Point;
-}
-class ChromeCanvas;
-class ChromeFont;
-
-namespace views {
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// CustomFrameView
-//
-// A ChromeView that provides the non client frame for Windows. This means
-// rendering the non-standard window caption, border, and controls.
-//
-////////////////////////////////////////////////////////////////////////////////
-class CustomFrameView : public NonClientFrameView,
- public ButtonListener {
- public:
- explicit CustomFrameView(Window* frame);
- virtual ~CustomFrameView();
-
- // Overridden from views::NonClientFrameView:
- virtual gfx::Rect GetBoundsForClientView() const;
- virtual gfx::Rect GetWindowBoundsForClientBounds(
- const gfx::Rect& client_bounds) const;
- virtual gfx::Point GetSystemMenuPoint() const;
- virtual int NonClientHitTest(const gfx::Point& point);
- virtual void GetWindowMask(const gfx::Size& size, gfx::Path* window_mask);
- virtual void EnableClose(bool enable);
- virtual void ResetWindowControls();
-
- // View overrides:
- virtual void Paint(ChromeCanvas* canvas);
- virtual void Layout();
- virtual gfx::Size GetPreferredSize();
-
- // ButtonListener implementation:
- virtual void ButtonPressed(Button* sender);
-
- private:
- // Returns the thickness of the border that makes up the window frame edges.
- // This does not include any client edge.
- int FrameBorderThickness() const;
-
- // Returns the thickness of the entire nonclient left, right, and bottom
- // borders, including both the window frame and any client edge.
- int NonClientBorderThickness() const;
-
- // Returns the height of the entire nonclient top border, including the window
- // frame, any title area, and any connected client edge.
- int NonClientTopBorderHeight() const;
-
- // A bottom border, and, in restored mode, a client edge are drawn at the
- // bottom of the titlebar. This returns the total height drawn.
- int BottomEdgeThicknessWithinNonClientHeight() const;
-
- // Calculates multiple values related to title layout. Returns the height of
- // the entire titlebar including any connected client edge.
- int TitleCoordinates(int* title_top_spacing,
- int* title_thickness) const;
-
- // Paint various sub-components of this view.
- void PaintRestoredFrameBorder(ChromeCanvas* canvas);
- void PaintMaximizedFrameBorder(ChromeCanvas* canvas);
- void PaintTitleBar(ChromeCanvas* canvas);
- void PaintRestoredClientEdge(ChromeCanvas* canvas);
-
- // Layout various sub-components of this view.
- void LayoutWindowControls();
- void LayoutTitleBar();
- void LayoutClientView();
-
- // Returns the resource collection to be used when rendering the window.
- WindowResources* resources() const {
- return frame_->IsActive() || paint_as_active() ? active_resources_
- : inactive_resources_;
- }
-
- // The bounds of the client view, in this view's coordinates.
- gfx::Rect client_view_bounds_;
-
- // The layout rect of the title, if visible.
- gfx::Rect title_bounds_;
-
- // Window controls.
- ImageButton* close_button_;
- ImageButton* restore_button_;
- ImageButton* maximize_button_;
- ImageButton* minimize_button_;
- ImageButton* system_menu_button_; // Uses the window icon if visible.
- bool should_show_minmax_buttons_;
-
- // The window that owns this view.
- Window* frame_;
-
- // Initialize various static resources.
- static void InitClass();
- static WindowResources* active_resources_;
- static WindowResources* inactive_resources_;
- static ChromeFont* title_font_;
-
- DISALLOW_EVIL_CONSTRUCTORS(CustomFrameView);
-};
-
-} // namespace views
-
-#endif // #ifndef CHROME_VIEWS_WINDOW_CUSTOM_FRAME_VIEW_H_
diff --git a/chrome/views/window/dialog_client_view.cc b/chrome/views/window/dialog_client_view.cc
deleted file mode 100644
index 0357da4..0000000
--- a/chrome/views/window/dialog_client_view.cc
+++ /dev/null
@@ -1,440 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/window/dialog_client_view.h"
-
-#include <windows.h>
-#include <uxtheme.h>
-#include <vsstyle.h>
-
-#include "app/gfx/chrome_canvas.h"
-#include "app/gfx/chrome_font.h"
-#include "app/l10n_util.h"
-#include "app/resource_bundle.h"
-#include "base/gfx/native_theme.h"
-#include "chrome/browser/views/standard_layout.h"
-#include "chrome/views/controls/button/native_button.h"
-#include "chrome/views/window/dialog_delegate.h"
-#include "chrome/views/window/window.h"
-#include "grit/generated_resources.h"
-
-namespace views {
-
-namespace {
-
-// Updates any of the standard buttons according to the delegate.
-void UpdateButtonHelper(NativeButton* button_view,
- DialogDelegate* delegate,
- MessageBoxFlags::DialogButton button) {
- std::wstring label = delegate->GetDialogButtonLabel(button);
- if (!label.empty())
- button_view->SetLabel(label);
- button_view->SetEnabled(delegate->IsDialogButtonEnabled(button));
- button_view->SetVisible(delegate->IsDialogButtonVisible(button));
-}
-
-void FillViewWithSysColor(ChromeCanvas* canvas, View* view, COLORREF color) {
- SkColor sk_color =
- SkColorSetRGB(GetRValue(color), GetGValue(color), GetBValue(color));
- canvas->FillRectInt(sk_color, 0, 0, view->width(), view->height());
-}
-
-// DialogButton ----------------------------------------------------------------
-
-// DialogButtons is used for the ok/cancel buttons of the window. DialogButton
-// forwards AcceleratorPressed to the delegate.
-
-class DialogButton : public NativeButton {
- public:
- DialogButton(ButtonListener* listener,
- Window* owner,
- MessageBoxFlags::DialogButton type,
- const std::wstring& title,
- bool is_default)
- : NativeButton(listener, title),
- owner_(owner),
- type_(type) {
- SetIsDefault(is_default);
- }
-
- // Overridden to forward to the delegate.
- virtual bool AcceleratorPressed(const Accelerator& accelerator) {
- if (!owner_->GetDelegate()->AsDialogDelegate()->
- AreAcceleratorsEnabled(type_)) {
- return false;
- }
- return NativeButton::AcceleratorPressed(accelerator);
- }
-
- private:
- Window* owner_;
- const MessageBoxFlags::DialogButton type_;
-
- DISALLOW_COPY_AND_ASSIGN(DialogButton);
-};
-
-} // namespace
-
-// static
-ChromeFont* DialogClientView::dialog_button_font_ = NULL;
-static const int kDialogMinButtonWidth = 75;
-static const int kDialogButtonLabelSpacing = 16;
-static const int kDialogButtonContentSpacing = 5;
-
-// The group used by the buttons. This name is chosen voluntarily big not to
-// conflict with other groups that could be in the dialog content.
-static const int kButtonGroup = 6666;
-
-///////////////////////////////////////////////////////////////////////////////
-// DialogClientView, public:
-
-DialogClientView::DialogClientView(Window* owner, View* contents_view)
- : ClientView(owner, contents_view),
- ok_button_(NULL),
- cancel_button_(NULL),
- extra_view_(NULL),
- accepted_(false),
- default_button_(NULL) {
- InitClass();
-}
-
-DialogClientView::~DialogClientView() {
-}
-
-void DialogClientView::ShowDialogButtons() {
- DialogDelegate* dd = GetDialogDelegate();
- int buttons = dd->GetDialogButtons();
- if (buttons & MessageBoxFlags::DIALOGBUTTON_OK && !ok_button_) {
- std::wstring label =
- dd->GetDialogButtonLabel(MessageBoxFlags::DIALOGBUTTON_OK);
- if (label.empty())
- label = l10n_util::GetString(IDS_OK);
- bool is_default_button =
- (dd->GetDefaultDialogButton() & MessageBoxFlags::DIALOGBUTTON_OK) != 0;
- ok_button_ = new DialogButton(this, window(),
- MessageBoxFlags::DIALOGBUTTON_OK, label,
- is_default_button);
- ok_button_->SetGroup(kButtonGroup);
- if (is_default_button)
- default_button_ = ok_button_;
- if (!(buttons & MessageBoxFlags::DIALOGBUTTON_CANCEL))
- ok_button_->AddAccelerator(Accelerator(VK_ESCAPE, false, false, false));
- AddChildView(ok_button_);
- }
- if (buttons & MessageBoxFlags::DIALOGBUTTON_CANCEL && !cancel_button_) {
- std::wstring label =
- dd->GetDialogButtonLabel(MessageBoxFlags::DIALOGBUTTON_CANCEL);
- if (label.empty()) {
- if (buttons & MessageBoxFlags::DIALOGBUTTON_OK) {
- label = l10n_util::GetString(IDS_CANCEL);
- } else {
- label = l10n_util::GetString(IDS_CLOSE);
- }
- }
- bool is_default_button =
- (dd->GetDefaultDialogButton() & MessageBoxFlags::DIALOGBUTTON_CANCEL)
- != 0;
- cancel_button_ = new DialogButton(this, window(),
- MessageBoxFlags::DIALOGBUTTON_CANCEL,
- label, is_default_button);
- cancel_button_->SetGroup(kButtonGroup);
- cancel_button_->AddAccelerator(Accelerator(VK_ESCAPE, false, false, false));
- if (is_default_button)
- default_button_ = ok_button_;
- AddChildView(cancel_button_);
- }
- if (!buttons) {
- // Register the escape key as an accelerator which will close the window
- // if there are no dialog buttons.
- AddAccelerator(Accelerator(VK_ESCAPE, false, false, false));
- }
-}
-
-void DialogClientView::SetDefaultButton(NativeButton* new_default_button) {
- if (default_button_ && default_button_ != new_default_button) {
- default_button_->SetIsDefault(false);
- default_button_ = NULL;
- }
-
- if (new_default_button) {
- default_button_ = new_default_button;
- default_button_->SetIsDefault(true);
- }
-}
-
-void DialogClientView::FocusWillChange(View* focused_before,
- View* focused_now) {
- NativeButton* new_default_button = NULL;
- if (focused_now &&
- focused_now->GetClassName() == NativeButton::kViewClassName) {
- new_default_button = static_cast<NativeButton*>(focused_now);
- } else {
- // The focused view is not a button, get the default button from the
- // delegate.
- DialogDelegate* dd = GetDialogDelegate();
- if ((dd->GetDefaultDialogButton() & MessageBoxFlags::DIALOGBUTTON_OK) != 0)
- new_default_button = ok_button_;
- if ((dd->GetDefaultDialogButton() & MessageBoxFlags::DIALOGBUTTON_CANCEL)
- != 0)
- new_default_button = cancel_button_;
- }
- SetDefaultButton(new_default_button);
-}
-
-// Changing dialog labels will change button widths.
-void DialogClientView::UpdateDialogButtons() {
- DialogDelegate* dd = GetDialogDelegate();
- int buttons = dd->GetDialogButtons();
-
- if (buttons & MessageBoxFlags::DIALOGBUTTON_OK)
- UpdateButtonHelper(ok_button_, dd, MessageBoxFlags::DIALOGBUTTON_OK);
-
- if (buttons & MessageBoxFlags::DIALOGBUTTON_CANCEL) {
- UpdateButtonHelper(cancel_button_, dd,
- MessageBoxFlags::DIALOGBUTTON_CANCEL);
- }
-
- LayoutDialogButtons();
- SchedulePaint();
-}
-
-void DialogClientView::AcceptWindow() {
- if (accepted_) {
- // We should only get into AcceptWindow once.
- NOTREACHED();
- return;
- }
- if (GetDialogDelegate()->Accept(false)) {
- accepted_ = true;
- window()->Close();
- }
-}
-
-void DialogClientView::CancelWindow() {
- // Call the standard Close handler, which checks with the delegate before
- // proceeding. This checking _isn't_ done here, but in the WM_CLOSE handler,
- // so that the close box on the window also shares this code path.
- window()->Close();
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// DialogClientView, ClientView overrides:
-
-bool DialogClientView::CanClose() const {
- if (!accepted_) {
- DialogDelegate* dd = GetDialogDelegate();
- int buttons = dd->GetDialogButtons();
- if (buttons & MessageBoxFlags::DIALOGBUTTON_CANCEL)
- return dd->Cancel();
- if (buttons & MessageBoxFlags::DIALOGBUTTON_OK)
- return dd->Accept(true);
- }
- return true;
-}
-
-void DialogClientView::WindowClosing() {
- FocusManager* focus_manager = GetFocusManager();
- DCHECK(focus_manager);
- if (focus_manager)
- focus_manager->RemoveFocusChangeListener(this);
- ClientView::WindowClosing();
-}
-
-int DialogClientView::NonClientHitTest(const gfx::Point& point) {
- if (size_box_bounds_.Contains(point.x() - x(), point.y() - y()))
- return HTBOTTOMRIGHT;
- return ClientView::NonClientHitTest(point);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// DialogClientView, View overrides:
-
-void DialogClientView::Paint(ChromeCanvas* canvas) {
- FillViewWithSysColor(canvas, this, GetSysColor(COLOR_3DFACE));
-}
-
-void DialogClientView::PaintChildren(ChromeCanvas* canvas) {
- View::PaintChildren(canvas);
- if (!window()->IsMaximized() && !window()->IsMinimized())
- PaintSizeBox(canvas);
-}
-
-void DialogClientView::Layout() {
- if (has_dialog_buttons())
- LayoutDialogButtons();
- LayoutContentsView();
-}
-
-void DialogClientView::ViewHierarchyChanged(bool is_add, View* parent,
- View* child) {
- if (is_add && child == this) {
- // Can only add and update the dialog buttons _after_ they are added to the
- // view hierarchy since they are native controls and require the
- // Container's HWND.
- ShowDialogButtons();
- ClientView::ViewHierarchyChanged(is_add, parent, child);
-
- FocusManager* focus_manager = GetFocusManager();
- // Listen for focus change events so we can update the default button.
- DCHECK(focus_manager); // bug #1291225: crash reports seem to indicate it
- // can be NULL.
- if (focus_manager)
- focus_manager->AddFocusChangeListener(this);
-
- // The "extra view" must be created and installed after the contents view
- // has been inserted into the view hierarchy.
- CreateExtraView();
- UpdateDialogButtons();
- Layout();
- }
-}
-
-gfx::Size DialogClientView::GetPreferredSize() {
- gfx::Size prefsize = contents_view()->GetPreferredSize();
- int button_height = 0;
- if (has_dialog_buttons()) {
- if (cancel_button_)
- button_height = cancel_button_->height();
- else
- button_height = ok_button_->height();
- // Account for padding above and below the button.
- button_height += kDialogButtonContentSpacing + kButtonVEdgeMargin;
- }
- prefsize.Enlarge(0, button_height);
- return prefsize;
-}
-
-bool DialogClientView::AcceleratorPressed(const Accelerator& accelerator) {
- DCHECK(accelerator.GetKeyCode() == VK_ESCAPE); // We only expect Escape key.
- window()->Close();
- return true;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// DialogClientView, ButtonListener implementation:
-
-void DialogClientView::ButtonPressed(Button* sender) {
- if (sender == ok_button_) {
- AcceptWindow();
- } else if (sender == cancel_button_) {
- CancelWindow();
- } else {
- NOTREACHED();
- }
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// DialogClientView, private:
-
-void DialogClientView::PaintSizeBox(ChromeCanvas* canvas) {
- if (window()->GetDelegate()->CanResize() ||
- window()->GetDelegate()->CanMaximize()) {
- HDC dc = canvas->beginPlatformPaint();
- SIZE gripper_size = { 0, 0 };
- gfx::NativeTheme::instance()->GetThemePartSize(
- gfx::NativeTheme::STATUS, dc, SP_GRIPPER, 1, NULL, TS_TRUE,
- &gripper_size);
-
- // TODO(beng): (http://b/1085509) In "classic" rendering mode, there isn't
- // a theme-supplied gripper. We should probably improvise
- // something, which would also require changing |gripper_size|
- // to have different default values, too...
- size_box_bounds_ = GetLocalBounds(false);
- size_box_bounds_.set_x(size_box_bounds_.right() - gripper_size.cx);
- size_box_bounds_.set_y(size_box_bounds_.bottom() - gripper_size.cy);
- RECT native_bounds = size_box_bounds_.ToRECT();
- gfx::NativeTheme::instance()->PaintStatusGripper(
- dc, SP_PANE, 1, 0, &native_bounds);
- canvas->endPlatformPaint();
- }
-}
-
-int DialogClientView::GetButtonWidth(int button) const {
- DialogDelegate* dd = GetDialogDelegate();
- std::wstring button_label = dd->GetDialogButtonLabel(
- static_cast<MessageBoxFlags::DialogButton>(button));
- int string_width = dialog_button_font_->GetStringWidth(button_label);
- return std::max(string_width + kDialogButtonLabelSpacing,
- kDialogMinButtonWidth);
-}
-
-int DialogClientView::GetButtonsHeight() const {
- if (has_dialog_buttons()) {
- if (cancel_button_)
- return cancel_button_->height() + kDialogButtonContentSpacing;
- return ok_button_->height() + kDialogButtonContentSpacing;
- }
- return 0;
-}
-
-void DialogClientView::LayoutDialogButtons() {
- gfx::Rect extra_bounds;
- if (cancel_button_) {
- gfx::Size ps = cancel_button_->GetPreferredSize();
- gfx::Rect lb = GetLocalBounds(false);
- int button_width = GetButtonWidth(MessageBoxFlags::DIALOGBUTTON_CANCEL);
- int button_x = lb.right() - button_width - kButtonHEdgeMargin;
- int button_y = lb.bottom() - ps.height() - kButtonVEdgeMargin;
- cancel_button_->SetBounds(button_x, button_y, button_width, ps.height());
- // The extra view bounds are dependent on this button.
- extra_bounds.set_width(std::max(0, cancel_button_->x()));
- extra_bounds.set_y(cancel_button_->y());
- }
- if (ok_button_) {
- gfx::Size ps = ok_button_->GetPreferredSize();
- gfx::Rect lb = GetLocalBounds(false);
- int button_width = GetButtonWidth(MessageBoxFlags::DIALOGBUTTON_OK);
- int ok_button_right = lb.right() - kButtonHEdgeMargin;
- if (cancel_button_)
- ok_button_right = cancel_button_->x() - kRelatedButtonHSpacing;
- int button_x = ok_button_right - button_width;
- int button_y = lb.bottom() - ps.height() - kButtonVEdgeMargin;
- ok_button_->SetBounds(button_x, button_y, ok_button_right - button_x,
- ps.height());
- // The extra view bounds are dependent on this button.
- extra_bounds.set_width(std::max(0, ok_button_->x()));
- extra_bounds.set_y(ok_button_->y());
- }
- if (extra_view_) {
- gfx::Size ps = extra_view_->GetPreferredSize();
- gfx::Rect lb = GetLocalBounds(false);
- extra_bounds.set_x(lb.x() + kButtonHEdgeMargin);
- extra_bounds.set_height(ps.height());
- extra_view_->SetBounds(extra_bounds);
- }
-}
-
-void DialogClientView::LayoutContentsView() {
- gfx::Rect lb = GetLocalBounds(false);
- lb.set_height(std::max(0, lb.height() - GetButtonsHeight()));
- contents_view()->SetBounds(lb);
- contents_view()->Layout();
-}
-
-void DialogClientView::CreateExtraView() {
- View* extra_view = GetDialogDelegate()->GetExtraView();
- if (extra_view && !extra_view_) {
- extra_view_ = extra_view;
- extra_view_->SetGroup(kButtonGroup);
- AddChildView(extra_view_);
- }
-}
-
-DialogDelegate* DialogClientView::GetDialogDelegate() const {
- DialogDelegate* dd = window()->GetDelegate()->AsDialogDelegate();
- DCHECK(dd);
- return dd;
-}
-
-// static
-void DialogClientView::InitClass() {
- static bool initialized = false;
- if (!initialized) {
- ResourceBundle& rb = ResourceBundle::GetSharedInstance();
- dialog_button_font_ = new ChromeFont(rb.GetFont(ResourceBundle::BaseFont));
- initialized = true;
- }
-}
-
-} // namespace views
diff --git a/chrome/views/window/dialog_client_view.h b/chrome/views/window/dialog_client_view.h
deleted file mode 100644
index 0a88e19..0000000
--- a/chrome/views/window/dialog_client_view.h
+++ /dev/null
@@ -1,123 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_WINDOW_DIALOG_CLIENT_VIEW_H_
-#define CHROME_VIEWS_WINDOW_DIALOG_CLIENT_VIEW_H_
-
-#include "app/gfx/chrome_font.h"
-#include "chrome/views/focus/focus_manager.h"
-#include "chrome/views/controls/button/button.h"
-#include "chrome/views/window/client_view.h"
-
-namespace views {
-
-class DialogDelegate;
-class NativeButton;
-class Window;
-
-///////////////////////////////////////////////////////////////////////////////
-// DialogClientView
-//
-// This ClientView subclass provides the content of a typical dialog box,
-// including a strip of buttons at the bottom right of the window, default
-// accelerator handlers for accept and cancel, and the ability for the
-// embedded contents view to provide extra UI to be shown in the row of
-// buttons.
-//
-class DialogClientView : public ClientView,
- public ButtonListener,
- public FocusChangeListener {
- public:
- DialogClientView(Window* window, View* contents_view);
- virtual ~DialogClientView();
-
- // Adds the dialog buttons required by the supplied WindowDelegate to the
- // view.
- void ShowDialogButtons();
-
- // Updates the enabled state and label of the buttons required by the
- // supplied WindowDelegate
- void UpdateDialogButtons();
-
- // Accept the changes made in the window that contains this ClientView.
- void AcceptWindow();
-
- // Cancel the changes made in the window that contains this ClientView.
- void CancelWindow();
-
- // Accessors in case the user wishes to adjust these buttons.
- NativeButton* ok_button() const { return ok_button_; }
- NativeButton* cancel_button() const { return cancel_button_; }
-
- // Overridden from ClientView:
- virtual bool CanClose() const;
- virtual void WindowClosing();
- virtual int NonClientHitTest(const gfx::Point& point);
- virtual DialogClientView* AsDialogClientView() { return this; }
-
- // FocusChangeListener implementation:
- virtual void FocusWillChange(View* focused_before, View* focused_now);
-
- protected:
- // View overrides:
- virtual void Paint(ChromeCanvas* canvas);
- virtual void PaintChildren(ChromeCanvas* canvas);
- virtual void Layout();
- virtual void ViewHierarchyChanged(bool is_add, View* parent, View* child);
- virtual gfx::Size GetPreferredSize();
- virtual bool AcceleratorPressed(const Accelerator& accelerator);
-
- // ButtonListener implementation:
- virtual void ButtonPressed(Button* sender);
-
- private:
- // Paint the size box in the bottom right corner of the window if it is
- // resizable.
- void PaintSizeBox(ChromeCanvas* canvas);
-
- // Returns the width of the specified dialog button using the correct font.
- int GetButtonWidth(int button) const;
- int GetButtonsHeight() const;
-
- // Position and size various sub-views.
- void LayoutDialogButtons();
- void LayoutContentsView();
-
- // Makes the specified button the default button.
- void SetDefaultButton(NativeButton* button);
-
- bool has_dialog_buttons() const { return ok_button_ || cancel_button_; }
-
- // Create and add the extra view, if supplied by the delegate.
- void CreateExtraView();
-
- // Returns the DialogDelegate for the window.
- DialogDelegate* GetDialogDelegate() const;
-
- // The dialog buttons.
- NativeButton* ok_button_;
- NativeButton* cancel_button_;
-
- // The button that is currently the default button if any.
- NativeButton* default_button_;
-
- // The button-level extra view, NULL unless the dialog delegate supplies one.
- View* extra_view_;
-
- // The layout rect of the size box, when visible.
- gfx::Rect size_box_bounds_;
-
- // True if the window was Accepted by the user using the OK button.
- bool accepted_;
-
- // Static resource initialization
- static void InitClass();
- static ChromeFont* dialog_button_font_;
-
- DISALLOW_COPY_AND_ASSIGN(DialogClientView);
-};
-
-} // namespace views
-
-#endif // #ifndef CHROME_VIEWS_WINDOW_DIALOG_CLIENT_VIEW_H_
diff --git a/chrome/views/window/dialog_delegate.cc b/chrome/views/window/dialog_delegate.cc
deleted file mode 100644
index bc4f1fd8..0000000
--- a/chrome/views/window/dialog_delegate.cc
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/window/dialog_delegate.h"
-
-#include "base/logging.h"
-#include "chrome/views/controls/button/native_button.h"
-#include "chrome/views/window/window.h"
-
-namespace views {
-
-// Overridden from WindowDelegate:
-
-int DialogDelegate::GetDefaultDialogButton() const {
- if (GetDialogButtons() & MessageBoxFlags::DIALOGBUTTON_OK)
- return MessageBoxFlags::DIALOGBUTTON_OK;
- if (GetDialogButtons() & MessageBoxFlags::DIALOGBUTTON_CANCEL)
- return MessageBoxFlags::DIALOGBUTTON_CANCEL;
- return MessageBoxFlags::DIALOGBUTTON_NONE;
-}
-
-View* DialogDelegate::GetInitiallyFocusedView() {
- // Focus the default button if any.
- DialogClientView* dcv = GetDialogClientView();
- int default_button = GetDefaultDialogButton();
- if (default_button == MessageBoxFlags::DIALOGBUTTON_NONE)
- return NULL;
-
- if ((default_button & GetDialogButtons()) == 0) {
- // The default button is a button we don't have.
- NOTREACHED();
- return NULL;
- }
-
- if (default_button & MessageBoxFlags::DIALOGBUTTON_OK)
- return dcv->ok_button();
- if (default_button & MessageBoxFlags::DIALOGBUTTON_CANCEL)
- return dcv->cancel_button();
- return NULL;
-}
-
-ClientView* DialogDelegate::CreateClientView(Window* window) {
- return new DialogClientView(window, GetContentsView());
-}
-
-DialogClientView* DialogDelegate::GetDialogClientView() const {
- ClientView* client_view = window()->GetClientView();
- DialogClientView* dialog_client_view = client_view->AsDialogClientView();
- DCHECK(dialog_client_view);
- return dialog_client_view;
-}
-
-} // namespace views
diff --git a/chrome/views/window/dialog_delegate.h b/chrome/views/window/dialog_delegate.h
deleted file mode 100644
index a38100c..0000000
--- a/chrome/views/window/dialog_delegate.h
+++ /dev/null
@@ -1,113 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_WINDOW_DIALOG_DELEGATE_H_
-#define CHROME_VIEWS_WINDOW_DIALOG_DELEGATE_H_
-
-#include "app/message_box_flags.h"
-#include "chrome/views/window/dialog_client_view.h"
-#include "chrome/views/window/window_delegate.h"
-
-namespace views {
-
-class View;
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// DialogDelegate
-//
-// DialogDelegate is an interface implemented by objects that wish to show a
-// dialog box Window. The window that is displayed uses this interface to
-// determine how it should be displayed and notify the delegate object of
-// certain events.
-//
-///////////////////////////////////////////////////////////////////////////////
-class DialogDelegate : public WindowDelegate {
- public:
- virtual DialogDelegate* AsDialogDelegate() { return this; }
-
- // Returns a mask specifying which of the available DialogButtons are visible
- // for the dialog. Note: If an OK button is provided, you should provide a
- // CANCEL button. A dialog box with just an OK button is frowned upon and
- // considered a very special case, so if you're planning on including one,
- // you should reconsider, or beng says there will be stabbings.
- //
- // To use the extra button you need to override GetDialogButtons()
- virtual int GetDialogButtons() const {
- return MessageBoxFlags::DIALOGBUTTON_OK |
- MessageBoxFlags::DIALOGBUTTON_CANCEL;
- }
-
- // Returns whether accelerators are enabled on the button. This is invoked
- // when an accelerator is pressed, not at construction time. This
- // returns true.
- virtual bool AreAcceleratorsEnabled(MessageBoxFlags::DialogButton button) {
- return true;
- }
-
- // Returns the label of the specified DialogButton.
- virtual std::wstring GetDialogButtonLabel(
- MessageBoxFlags::DialogButton button) const {
- // empty string results in defaults for MessageBoxFlags::DIALOGBUTTON_OK,
- // MessageBoxFlags::DIALOGBUTTON_CANCEL.
- return L"";
- }
-
- // Override this function if with a view which will be shown in the same
- // row as the OK and CANCEL buttons but flush to the left and extending
- // up to the buttons.
- virtual View* GetExtraView() { return NULL; }
-
- // Returns the default dialog button. This should not be a mask as only
- // one button should ever be the default button. Return
- // MessageBoxFlags::DIALOGBUTTON_NONE if there is no default. Default
- // behavior is to return MessageBoxFlags::DIALOGBUTTON_OK or
- // MessageBoxFlags::DIALOGBUTTON_CANCEL (in that order) if they are
- // present, MessageBoxFlags::DIALOGBUTTON_NONE otherwise.
- virtual int GetDefaultDialogButton() const;
-
- // Returns whether the specified dialog button is enabled.
- virtual bool IsDialogButtonEnabled(
- MessageBoxFlags::DialogButton button) const {
- return true;
- }
-
- // Returns whether the specified dialog button is visible.
- virtual bool IsDialogButtonVisible(
- MessageBoxFlags::DialogButton button) const {
- return true;
- }
-
- // For Dialog boxes, if there is a "Cancel" button, this is called when the
- // user presses the "Cancel" button or the Close button on the window or
- // in the system menu, or presses the Esc key. This function should return
- // true if the window can be closed after it returns, or false if it must
- // remain open.
- virtual bool Cancel() { return true; }
-
- // For Dialog boxes, this is called when the user presses the "OK" button,
- // or the Enter key. Can also be called on Esc key or close button
- // presses if there is no "Cancel" button. This function should return
- // true if the window can be closed after the window can be closed after
- // it returns, or false if it must remain open. If |window_closing| is
- // true, it means that this handler is being called because the window is
- // being closed (e.g. by Window::Close) and there is no Cancel handler,
- // so Accept is being called instead.
- virtual bool Accept(bool window_closing) { return Accept(); }
- virtual bool Accept() { return true; }
-
- // Overridden from WindowDelegate:
- virtual View* GetInitiallyFocusedView();
-
- // Overridden from WindowDelegate:
- virtual ClientView* CreateClientView(Window* window);
-
- // A helper for accessing the DialogClientView object contained by this
- // delegate's Window.
- DialogClientView* GetDialogClientView() const;
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_WINDOW_DIALOG_DELEGATE_H_
diff --git a/chrome/views/window/hit_test.h b/chrome/views/window/hit_test.h
deleted file mode 100644
index 8b8caba..0000000
--- a/chrome/views/window/hit_test.h
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_WINDOW_HIT_TEST_H_
-#define CHROME_VIEWS_WINDOW_HIT_TEST_H_
-
-// Defines the same symbolic names used by the WM_NCHITTEST Notification under
-// win32 (the integer values are not guaranteed to be equivalent). We do this
-// because we have a whole bunch of code that deals with window resizing and
-// such that requires these values.
-enum HitTestCompat {
- HTBORDER = 1,
- HTBOTTOM,
- HTBOTTOMLEFT,
- HTBOTTOMRIGHT,
- HTCAPTION,
- HTCLIENT,
- HTCLOSE,
- HTERROR,
- HTGROWBOX,
- HTHELP,
- HTHSCROLL,
- HTLEFT,
- HTMENU,
- HTMAXBUTTON,
- HTMINBUTTON,
- HTNOWHERE,
- HTREDUCE,
- HTRIGHT,
- HTSIZE,
- HTSYSMENU,
- HTTOP,
- HTTOPLEFT,
- HTTOPRIGHT,
- HTTRANSPARENT,
- HTVSCROLL,
- HTZOOM
-};
-
-#endif // CHROME_VIEWS_WINDOW_HIT_TEST_H_
diff --git a/chrome/views/window/native_frame_view.cc b/chrome/views/window/native_frame_view.cc
deleted file mode 100644
index 4446f30..0000000
--- a/chrome/views/window/native_frame_view.cc
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/window/native_frame_view.h"
-
-#include "chrome/views/window/window_win.h"
-
-namespace views {
-
-////////////////////////////////////////////////////////////////////////////////
-// NativeFrameView, public:
-
-NativeFrameView::NativeFrameView(WindowWin* frame)
- : NonClientFrameView(),
- frame_(frame) {
-}
-
-NativeFrameView::~NativeFrameView() {
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// NativeFrameView, NonClientFrameView overrides:
-
-gfx::Rect NativeFrameView::GetBoundsForClientView() const {
- return gfx::Rect(0, 0, width(), height());
-}
-
-gfx::Rect NativeFrameView::GetWindowBoundsForClientBounds(
- const gfx::Rect& client_bounds) const {
- RECT rect = client_bounds.ToRECT();
- AdjustWindowRectEx(&rect, frame_->window_style(), FALSE,
- frame_->window_ex_style());
- return gfx::Rect(rect);
-}
-
-gfx::Point NativeFrameView::GetSystemMenuPoint() const {
- POINT temp = {0, -kFrameShadowThickness };
- MapWindowPoints(frame_->GetNativeView(), HWND_DESKTOP, &temp, 1);
- return gfx::Point(temp);
-}
-
-int NativeFrameView::NonClientHitTest(const gfx::Point& point) {
- return HTNOWHERE;
-}
-
-void NativeFrameView::GetWindowMask(const gfx::Size& size,
- gfx::Path* window_mask) {
- // Nothing to do, we use the default window mask.
-}
-
-void NativeFrameView::EnableClose(bool enable) {
- // Nothing to do, handled automatically by Window.
-}
-
-void NativeFrameView::ResetWindowControls() {
- // Nothing to do.
-}
-
-} // namespace views
diff --git a/chrome/views/window/native_frame_view.h b/chrome/views/window/native_frame_view.h
deleted file mode 100644
index 336d7c4..0000000
--- a/chrome/views/window/native_frame_view.h
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_WINDOW_NATIVE_FRAME_VIEW_H_
-#define CHROME_VIEWS_WINDOW_NATIVE_FRAME_VIEW_H_
-
-#include "chrome/views/window/non_client_view.h"
-
-namespace views {
-
-class WindowWin;
-
-class NativeFrameView : public NonClientFrameView {
- public:
- explicit NativeFrameView(WindowWin* frame);
- virtual ~NativeFrameView();
-
- // NonClientFrameView overrides:
- virtual gfx::Rect GetBoundsForClientView() const;
- virtual gfx::Rect GetWindowBoundsForClientBounds(
- const gfx::Rect& client_bounds) const;
- virtual gfx::Point GetSystemMenuPoint() const;
- virtual int NonClientHitTest(const gfx::Point& point);
- virtual void GetWindowMask(const gfx::Size& size,
- gfx::Path* window_mask);
- virtual void EnableClose(bool enable);
- virtual void ResetWindowControls();
-
- private:
- // Our containing frame.
- WindowWin* frame_;
-
- DISALLOW_COPY_AND_ASSIGN(NativeFrameView);
-};
-
-} // namespace views
-
-#endif // #ifndef CHROME_VIEWS_WINDOW_NATIVE_FRAME_VIEW_H_
diff --git a/chrome/views/window/non_client_view.cc b/chrome/views/window/non_client_view.cc
deleted file mode 100644
index 8a8fb71..0000000
--- a/chrome/views/window/non_client_view.cc
+++ /dev/null
@@ -1,264 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/window/non_client_view.h"
-
-#if defined(OS_WIN)
-#include "chrome/common/win_util.h"
-#endif
-#include "chrome/views/widget/root_view.h"
-#include "chrome/views/widget/widget.h"
-#if defined(OS_LINUX)
-#include "chrome/views/window/hit_test.h"
-#endif
-#include "chrome/views/window/window.h"
-
-namespace views {
-
-const int NonClientFrameView::kFrameShadowThickness = 1;
-const int NonClientFrameView::kClientEdgeThickness = 1;
-
-// The frame view and the client view are always at these specific indices,
-// because the RootView message dispatch sends messages to items higher in the
-// z-order first and we always want the client view to have first crack at
-// handling mouse messages.
-static const int kFrameViewIndex = 0;
-static const int kClientViewIndex = 1;
-
-////////////////////////////////////////////////////////////////////////////////
-// NonClientView, public:
-
-NonClientView::NonClientView(Window* frame)
- : frame_(frame),
- client_view_(NULL),
-#if defined(OS_WIN)
- use_native_frame_(win_util::ShouldUseVistaFrame()) {
-#else
- use_native_frame_(false) {
-#endif
-}
-
-NonClientView::~NonClientView() {
- // This value may have been reset before the window hierarchy shuts down,
- // so we need to manually remove it.
- RemoveChildView(frame_view_.get());
-}
-
-void NonClientView::SetFrameView(NonClientFrameView* frame_view) {
- // See comment in header about ownership.
- frame_view->SetParentOwned(false);
- if (frame_view_.get())
- RemoveChildView(frame_view_.get());
- frame_view_.reset(frame_view);
- if (GetParent())
- AddChildView(kFrameViewIndex, frame_view_.get());
-}
-
-bool NonClientView::CanClose() const {
- return client_view_->CanClose();
-}
-
-void NonClientView::WindowClosing() {
- client_view_->WindowClosing();
-}
-
-void NonClientView::SetUseNativeFrame(bool use_native_frame) {
- use_native_frame_ = use_native_frame;
- SetFrameView(frame_->CreateFrameViewForWindow());
- GetRootView()->ThemeChanged();
- Layout();
- SchedulePaint();
- frame_->UpdateFrameAfterFrameChange();
-}
-
-bool NonClientView::UseNativeFrame() const {
- // The frame view may always require a custom frame, e.g. Constrained Windows.
- bool always_use_custom_frame =
- frame_view_.get() && frame_view_->AlwaysUseCustomFrame();
- return !always_use_custom_frame && use_native_frame_;
-}
-
-void NonClientView::DisableInactiveRendering(bool disable) {
- frame_view_->DisableInactiveRendering(disable);
-}
-
-gfx::Rect NonClientView::GetWindowBoundsForClientBounds(
- const gfx::Rect client_bounds) const {
- return frame_view_->GetWindowBoundsForClientBounds(client_bounds);
-}
-
-gfx::Point NonClientView::GetSystemMenuPoint() const {
- return frame_view_->GetSystemMenuPoint();
-}
-
-int NonClientView::NonClientHitTest(const gfx::Point& point) {
- // Sanity check.
- if (!bounds().Contains(point))
- return HTNOWHERE;
-
- // The ClientView gets first crack, since it overlays the NonClientFrameView
- // in the display stack.
- int frame_component = client_view_->NonClientHitTest(point);
- if (frame_component != HTNOWHERE)
- return frame_component;
-
- // Finally ask the NonClientFrameView. It's at the back of the display stack
- // so it gets asked last.
- return frame_view_->NonClientHitTest(point);
-}
-
-void NonClientView::GetWindowMask(const gfx::Size& size,
- gfx::Path* window_mask) {
- frame_view_->GetWindowMask(size, window_mask);
-}
-
-void NonClientView::EnableClose(bool enable) {
- frame_view_->EnableClose(enable);
-}
-
-void NonClientView::ResetWindowControls() {
- frame_view_->ResetWindowControls();
-}
-
-void NonClientView::LayoutFrameView() {
- // First layout the NonClientFrameView, which determines the size of the
- // ClientView...
- frame_view_->SetBounds(0, 0, width(), height());
-
- // We need to manually call Layout here because layout for the frame view can
- // change independently of the bounds changing - e.g. after the initial
- // display of the window the metrics of the native window controls can change,
- // which does not change the bounds of the window but requires a re-layout to
- // trigger a repaint. We override DidChangeBounds for the NonClientFrameView
- // to do nothing so that SetBounds above doesn't cause Layout to be called
- // twice.
- frame_view_->Layout();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// NonClientView, View overrides:
-
-gfx::Size NonClientView::GetPreferredSize() {
- // TODO(pkasting): This should probably be made to look similar to
- // GetMinimumSize() below. This will require implementing GetPreferredSize()
- // better in the various frame views.
- gfx::Rect client_bounds(gfx::Point(), client_view_->GetPreferredSize());
- return GetWindowBoundsForClientBounds(client_bounds).size();
-}
-
-gfx::Size NonClientView::GetMinimumSize() {
- return frame_view_->GetMinimumSize();
-}
-
-void NonClientView::Layout() {
- LayoutFrameView();
-
- // Then layout the ClientView, using those bounds.
- client_view_->SetBounds(frame_view_->GetBoundsForClientView());
-
- // We need to manually call Layout on the ClientView as well for the same
- // reason as above.
- client_view_->Layout();
-}
-
-void NonClientView::ViewHierarchyChanged(bool is_add, View* parent,
- View* child) {
- // Add our two child views here as we are added to the Widget so that if we
- // are subsequently resized all the parent-child relationships are
- // established.
- if (is_add && GetWidget() && child == this) {
- AddChildView(kFrameViewIndex, frame_view_.get());
- AddChildView(kClientViewIndex, client_view_);
- }
-}
-
-views::View* NonClientView::GetViewForPoint(const gfx::Point& point) {
- return GetViewForPoint(point, false);
-}
-
-views::View* NonClientView::GetViewForPoint(const gfx::Point& point,
- bool can_create_floating) {
- // Because of the z-ordering of our child views (the client view is positioned
- // over the non-client frame view, if the client view ever overlaps the frame
- // view visually (as it does for the browser window), then it will eat mouse
- // events for the window controls. We override this method here so that we can
- // detect this condition and re-route the events to the non-client frame view.
- // The assumption is that the frame view's implementation of HitTest will only
- // return true for area not occupied by the client view.
- gfx::Point point_in_child_coords(point);
- View::ConvertPointToView(this, frame_view_.get(), &point_in_child_coords);
- if (frame_view_->HitTest(point_in_child_coords))
- return frame_view_->GetViewForPoint(point);
-
- return View::GetViewForPoint(point, can_create_floating);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// NonClientFrameView, View overrides:
-
-bool NonClientFrameView::HitTest(const gfx::Point& l) const {
- // For the default case, we assume the non-client frame view never overlaps
- // the client view.
- return !GetWindow()->GetClientView()->bounds().Contains(l);
-}
-
-void NonClientFrameView::DidChangeBounds(const gfx::Rect& previous,
- const gfx::Rect& current) {
- // Overridden to do nothing. The NonClientView manually calls Layout on the
- // FrameView when it is itself laid out, see comment in NonClientView::Layout.
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// NonClientFrameView, protected:
-
-int NonClientFrameView::GetHTComponentForFrame(const gfx::Point& point,
- int top_resize_border_height,
- int resize_border_thickness,
- int top_resize_corner_height,
- int resize_corner_width,
- bool can_resize) {
- // Tricky: In XP, native behavior is to return HTTOPLEFT and HTTOPRIGHT for
- // a |resize_corner_size|-length strip of both the side and top borders, but
- // only to return HTBOTTOMLEFT/HTBOTTOMRIGHT along the bottom border + corner
- // (not the side border). Vista goes further and doesn't return these on any
- // of the side borders. We allow callers to match either behavior.
- int component;
- if (point.x() < resize_border_thickness) {
- if (point.y() < top_resize_corner_height)
- component = HTTOPLEFT;
- else if (point.y() >= (height() - resize_border_thickness))
- component = HTBOTTOMLEFT;
- else
- component = HTLEFT;
- } else if (point.x() >= (width() - resize_border_thickness)) {
- if (point.y() < top_resize_corner_height)
- component = HTTOPRIGHT;
- else if (point.y() >= (height() - resize_border_thickness))
- component = HTBOTTOMRIGHT;
- else
- component = HTRIGHT;
- } else if (point.y() < top_resize_border_height) {
- if (point.x() < resize_corner_width)
- component = HTTOPLEFT;
- else if (point.x() >= (width() - resize_corner_width))
- component = HTTOPRIGHT;
- else
- component = HTTOP;
- } else if (point.y() >= (height() - resize_border_thickness)) {
- if (point.x() < resize_corner_width)
- component = HTBOTTOMLEFT;
- else if (point.x() >= (width() - resize_corner_width))
- component = HTBOTTOMRIGHT;
- else
- component = HTBOTTOM;
- } else {
- return HTNOWHERE;
- }
-
- // If the window can't be resized, there are no resize boundaries, just
- // window borders.
- return can_resize ? component : HTBORDER;
-}
-
-} // namespace views
diff --git a/chrome/views/window/non_client_view.h b/chrome/views/window/non_client_view.h
deleted file mode 100644
index e82ec77..0000000
--- a/chrome/views/window/non_client_view.h
+++ /dev/null
@@ -1,227 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_WINDOW_NON_CLIENT_VIEW_H_
-#define CHROME_VIEWS_WINDOW_NON_CLIENT_VIEW_H_
-
-#include "base/task.h"
-#include "chrome/views/view.h"
-#include "chrome/views/window/client_view.h"
-
-namespace gfx {
-class Path;
-}
-
-namespace views {
-
-////////////////////////////////////////////////////////////////////////////////
-// NonClientFrameView
-//
-// An object that subclasses NonClientFrameView is a View that renders and
-// responds to events within the frame portions of the non-client area of a
-// window. This view does _not_ contain the ClientView, but rather is a sibling
-// of it.
-class NonClientFrameView : public View {
- public:
- // Various edges of the frame border have a 1 px shadow along their edges; in
- // a few cases we shift elements based on this amount for visual appeal.
- static const int kFrameShadowThickness;
- // In restored mode, we draw a 1 px edge around the content area inside the
- // frame border.
- static const int kClientEdgeThickness;
-
- void DisableInactiveRendering(bool disable) {
- paint_as_active_ = disable;
- if (!paint_as_active_)
- SchedulePaint();
- }
-
- // Returns the bounds (in this View's parent's coordinates) that the client
- // view should be laid out within.
- virtual gfx::Rect GetBoundsForClientView() const = 0;
-
- // Returns true if this FrameView should always use the custom frame,
- // regardless of the system settings. An example is the Constrained Window,
- // which is a child window and must always provide its own frame.
- virtual bool AlwaysUseCustomFrame() const { return false; }
-
- virtual gfx::Rect GetWindowBoundsForClientBounds(
- const gfx::Rect& client_bounds) const = 0;
- virtual gfx::Point GetSystemMenuPoint() const = 0;
- virtual int NonClientHitTest(const gfx::Point& point) = 0;
- virtual void GetWindowMask(const gfx::Size& size,
- gfx::Path* window_mask) = 0;
- virtual void EnableClose(bool enable) = 0;
- virtual void ResetWindowControls() = 0;
-
- // Overridden from View:
- virtual bool HitTest(const gfx::Point& l) const;
-
- protected:
- virtual void DidChangeBounds(const gfx::Rect& previous,
- const gfx::Rect& current);
-
- NonClientFrameView() : paint_as_active_(false) {}
-
-
- // Helper for non-client view implementations to determine which area of the
- // window border the specified |point| falls within. The other parameters are
- // the size of the sizing edges, and whether or not the window can be
- // resized.
- int GetHTComponentForFrame(const gfx::Point& point,
- int top_resize_border_height,
- int resize_border_thickness,
- int top_resize_corner_height,
- int resize_corner_width,
- bool can_resize);
-
- // Accessor for paint_as_active_.
- bool paint_as_active() const { return paint_as_active_; }
-
- private:
- // True when the non-client view should always be rendered as if the window
- // were active, regardless of whether or not the top level window actually
- // is active.
- bool paint_as_active_;
-};
-
-////////////////////////////////////////////////////////////////////////////////
-// NonClientView
-//
-// The NonClientView is the logical root of all Views contained within a
-// Window, except for the RootView which is its parent and of which it is the
-// sole child. The NonClientView has two children, the NonClientFrameView which
-// is responsible for painting and responding to events from the non-client
-// portions of the window, and the ClientView, which is responsible for the
-// same for the client area of the window:
-//
-// +- views::Window ------------------------------------+
-// | +- views::RootView ------------------------------+ |
-// | | +- views::NonClientView ---------------------+ | |
-// | | | +- views::NonClientView subclass ---+ | | |
-// | | | | | | | |
-// | | | | << all painting and event receiving >> | | | |
-// | | | | << of the non-client areas of a >> | | | |
-// | | | | << views::Window. >> | | | |
-// | | | | | | | |
-// | | | +----------------------------------------+ | | |
-// | | | +- views::ClientView or subclass --------+ | | |
-// | | | | | | | |
-// | | | | << all painting and event receiving >> | | | |
-// | | | | << of the client areas of a >> | | | |
-// | | | | << views::Window. >> | | | |
-// | | | | | | | |
-// | | | +----------------------------------------+ | | |
-// | | +--------------------------------------------+ | |
-// | +------------------------------------------------+ |
-// +----------------------------------------------------+
-//
-// The NonClientFrameView and ClientView are siblings because due to theme
-// changes the NonClientFrameView may be replaced with different
-// implementations (e.g. during the switch from DWM/Aero-Glass to Vista Basic/
-// Classic rendering).
-//
-class NonClientView : public View {
- public:
- explicit NonClientView(Window* frame);
- virtual ~NonClientView();
-
- // Replaces the current NonClientFrameView (if any) with the specified one.
- void SetFrameView(NonClientFrameView* frame_view);
-
- // Returns true if the ClientView determines that the containing window can be
- // closed, false otherwise.
- bool CanClose() const;
-
- // Called by the containing Window when it is closed.
- void WindowClosing();
-
- // Changes the frame from native to custom depending on the value of
- // |use_native_frame|.
- void SetUseNativeFrame(bool use_native_frame);
-
- // Returns true if the native window frame should be used, false if the
- // NonClientView provides its own frame implementation.
- bool UseNativeFrame() const;
-
- // Prevents the window from being rendered as deactivated when |disable| is
- // true, until called with |disable| false. Used when a sub-window is to be
- // shown that shouldn't visually de-activate the window.
- // Subclasses can override this to perform additional actions when this value
- // changes.
- void DisableInactiveRendering(bool disable);
-
- // Returns the bounds of the window required to display the content area at
- // the specified bounds.
- gfx::Rect GetWindowBoundsForClientBounds(const gfx::Rect client_bounds) const;
-
- // Returns the point, in screen coordinates, where the system menu should
- // be shown so it shows up anchored to the system menu icon.
- gfx::Point GetSystemMenuPoint() const;
-
- // Determines the windows HT* code when the mouse cursor is at the
- // specified point, in window coordinates.
- int NonClientHitTest(const gfx::Point& point);
-
- // Returns a mask to be used to clip the top level window for the given
- // size. This is used to create the non-rectangular window shape.
- void GetWindowMask(const gfx::Size& size, gfx::Path* window_mask);
-
- // Toggles the enable state for the Close button (and the Close menu item in
- // the system menu).
- void EnableClose(bool enable);
-
- // Tells the window controls as rendered by the NonClientView to reset
- // themselves to a normal state. This happens in situations where the
- // containing window does not receive a normal sequences of messages that
- // would lead to the controls returning to this normal state naturally, e.g.
- // when the window is maximized, minimized or restored.
- void ResetWindowControls();
-
- // Get/Set client_view property.
- ClientView* client_view() const { return client_view_; }
- void set_client_view(ClientView* client_view) {
- client_view_ = client_view;
- }
-
- // Layout just the frame view. This is necessary on Windows when non-client
- // metrics such as the position of the window controls changes independently
- // of a window resize message.
- void LayoutFrameView();
-
- // NonClientView, View overrides:
- virtual gfx::Size GetPreferredSize();
- virtual gfx::Size GetMinimumSize();
- virtual void Layout();
-
- protected:
- // NonClientView, View overrides:
- virtual void ViewHierarchyChanged(bool is_add, View* parent, View* child);
- virtual views::View* GetViewForPoint(const gfx::Point& point);
- virtual views::View* GetViewForPoint(const gfx::Point& point,
- bool can_create_floating);
-
- private:
- // The frame that hosts this NonClientView.
- Window* frame_;
-
- // A ClientView object or subclass, responsible for sizing the contents view
- // of the window, hit testing and perhaps other tasks depending on the
- // implementation.
- ClientView* client_view_;
-
- // The NonClientFrameView that renders the non-client portions of the window.
- // This object is not owned by the view hierarchy because it can be replaced
- // dynamically as the system settings change.
- scoped_ptr<NonClientFrameView> frame_view_;
-
- // Whether or not we should use the native frame.
- bool use_native_frame_;
-
- DISALLOW_COPY_AND_ASSIGN(NonClientView);
-};
-
-} // namespace views
-
-#endif // #ifndef CHROME_VIEWS_WINDOW_NON_CLIENT_VIEW_H_
diff --git a/chrome/views/window/window.h b/chrome/views/window/window.h
deleted file mode 100644
index 819f31c..0000000
--- a/chrome/views/window/window.h
+++ /dev/null
@@ -1,135 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this
-// source code is governed by a BSD-style license that can be found in the
-// LICENSE file.
-
-#ifndef CHROME_VIEWS_WINDOW_WINDOW_H_
-#define CHROME_VIEWS_WINDOW_WINDOW_H_
-
-#include "base/gfx/native_widget_types.h"
-
-namespace gfx {
-class Rect;
-class Size;
-}
-
-namespace views {
-
-class ClientView;
-class NonClientFrameView;
-class NonClientView;
-class WindowDelegate;
-
-// An interface implemented by an object that provides a top level window.
-class Window {
- public:
- virtual ~Window() {}
-
- // Creates an instance of an object implementing this interface.
- static Window* CreateChromeWindow(gfx::NativeWindow parent,
- const gfx::Rect& bounds,
- WindowDelegate* window_delegate);
-
- // Returns the preferred size of the contents view of this window based on
- // its localized size data. The width in cols is held in a localized string
- // resource identified by |col_resource_id|, the height in the same fashion.
- // TODO(beng): This should eventually live somewhere else, probably closer to
- // ClientView.
- static int GetLocalizedContentsWidth(int col_resource_id);
- static int GetLocalizedContentsHeight(int row_resource_id);
- static gfx::Size GetLocalizedContentsSize(int col_resource_id,
- int row_resource_id);
-
- // Closes all windows that aren't identified as "app windows" via
- // IsAppWindow. Called during application shutdown when the last "app window"
- // is closed.
- static void CloseAllSecondaryWindows();
-
- // Retrieves the window's bounds, including its frame.
- virtual gfx::Rect GetBounds() const = 0;
-
- // Retrieves the restored bounds for the window.
- virtual gfx::Rect GetNormalBounds() const = 0;
-
- // Sizes and/or places the window to the specified bounds, size or position.
- virtual void SetBounds(const gfx::Rect& bounds) = 0;
-
- // As above, except the window is inserted after |other_window| in the window
- // Z-order. If this window is not yet visible, other_window's monitor is used
- // as the constraining rectangle, rather than this window's monitor.
- virtual void SetBounds(const gfx::Rect& bounds,
- gfx::NativeWindow other_window) = 0;
-
- // Makes the window visible.
- virtual void Show() = 0;
-
- // Activate the window, assuming it already exists and is visible.
- virtual void Activate() = 0;
-
- // Closes the window, ultimately destroying it. This isn't immediate (it
- // occurs after a return to the message loop. Implementors must also make sure
- // that invoking Close multiple times doesn't cause bad things to happen,
- // since it can happen.
- virtual void Close() = 0;
-
- // Maximizes/minimizes/restores the window.
- virtual void Maximize() = 0;
- virtual void Minimize() = 0;
- virtual void Restore() = 0;
-
- // Whether or not the window is currently active.
- virtual bool IsActive() const = 0;
-
- // Whether or not the window is currently visible.
- virtual bool IsVisible() const = 0;
-
- // Whether or not the window is maximized or minimized.
- virtual bool IsMaximized() const = 0;
- virtual bool IsMinimized() const = 0;
-
- // Accessors for fullscreen state.
- virtual void SetFullscreen(bool fullscreen) = 0;
- virtual bool IsFullscreen() const = 0;
-
- // Returns true if the Window is considered to be an "app window" - i.e.
- // any window which when it is the last of its type closed causes the
- // application to exit.
- virtual bool IsAppWindow() const { return false; }
-
- // Toggles the enable state for the Close button (and the Close menu item in
- // the system menu).
- virtual void EnableClose(bool enable) = 0;
-
- // Prevents the window from being rendered as deactivated the next time it is.
- // This state is reset automatically as soon as the window becomes activated
- // again. There is no ability to control the state through this API as this
- // leads to sync problems.
- virtual void DisableInactiveRendering() = 0;
-
- // Tell the window to update its title from the delegate.
- virtual void UpdateWindowTitle() = 0;
-
- // Tell the window to update its icon from the delegate.
- virtual void UpdateWindowIcon() = 0;
-
- // Creates an appropriate NonClientFrameView for this window.
- virtual NonClientFrameView* CreateFrameViewForWindow() = 0;
-
- // Updates the frame after an event caused it to be changed.
- virtual void UpdateFrameAfterFrameChange() = 0;
-
- // Retrieves the Window's delegate.
- virtual WindowDelegate* GetDelegate() const = 0;
-
- // Retrieves the Window's non-client view.
- virtual NonClientView* GetNonClientView() const = 0;
-
- // Retrieves the Window's client view.
- virtual ClientView* GetClientView() const = 0;
-
- // Retrieves the Window's native window handle.
- virtual gfx::NativeWindow GetNativeWindow() const = 0;
-};
-
-} // namespace views
-
-#endif // #ifndef CHROME_VIEWS_WINDOW_WINDOW_H_
diff --git a/chrome/views/window/window_delegate.cc b/chrome/views/window/window_delegate.cc
deleted file mode 100644
index 917836f..0000000
--- a/chrome/views/window/window_delegate.cc
+++ /dev/null
@@ -1,96 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/window/window_delegate.h"
-
-// TODO(beng): hrmp. Fix this in http://crbug.com/4406
-#include "chrome/browser/browser_process.h"
-#include "chrome/common/pref_service.h"
-#include "chrome/views/window/client_view.h"
-#include "chrome/views/window/window.h"
-#include "skia/include/SkBitmap.h"
-
-namespace views {
-
-WindowDelegate::WindowDelegate() {
-}
-
-WindowDelegate::~WindowDelegate() {
- ReleaseWindow();
-}
-
-// Returns the icon to be displayed in the window.
-SkBitmap WindowDelegate::GetWindowIcon() {
- return SkBitmap();
-}
-
-void WindowDelegate::SaveWindowPlacement(const gfx::Rect& bounds,
- bool maximized,
- bool always_on_top) {
- std::wstring window_name = GetWindowName();
- if (window_name.empty() || !g_browser_process->local_state())
- return;
-
- DictionaryValue* window_preferences =
- g_browser_process->local_state()->GetMutableDictionary(
- window_name.c_str());
- window_preferences->SetInteger(L"left", bounds.x());
- window_preferences->SetInteger(L"top", bounds.y());
- window_preferences->SetInteger(L"right", bounds.right());
- window_preferences->SetInteger(L"bottom", bounds.bottom());
- window_preferences->SetBoolean(L"maximized", maximized);
- window_preferences->SetBoolean(L"always_on_top", always_on_top);
-}
-
-bool WindowDelegate::GetSavedWindowBounds(gfx::Rect* bounds) const {
- std::wstring window_name = GetWindowName();
- if (window_name.empty())
- return false;
-
- const DictionaryValue* dictionary =
- g_browser_process->local_state()->GetDictionary(window_name.c_str());
- int left, top, right, bottom;
- if (!dictionary || !dictionary->GetInteger(L"left", &left) ||
- !dictionary->GetInteger(L"top", &top) ||
- !dictionary->GetInteger(L"right", &right) ||
- !dictionary->GetInteger(L"bottom", &bottom))
- return false;
-
- bounds->SetRect(left, top, right - left, bottom - top);
- return true;
-}
-
-bool WindowDelegate::GetSavedMaximizedState(bool* maximized) const {
- std::wstring window_name = GetWindowName();
- if (window_name.empty())
- return false;
-
- const DictionaryValue* dictionary =
- g_browser_process->local_state()->GetDictionary(window_name.c_str());
- return dictionary && dictionary->GetBoolean(L"maximized", maximized);
-}
-
-bool WindowDelegate::GetSavedAlwaysOnTopState(bool* always_on_top) const {
- if (!g_browser_process->local_state())
- return false;
-
- std::wstring window_name = GetWindowName();
- if (window_name.empty())
- return false;
-
- const DictionaryValue* dictionary =
- g_browser_process->local_state()->GetDictionary(window_name.c_str());
- return dictionary && dictionary->GetBoolean(L"always_on_top", always_on_top);
-}
-
-
-ClientView* WindowDelegate::CreateClientView(Window* window) {
- return new ClientView(window, GetContentsView());
-}
-
-void WindowDelegate::ReleaseWindow() {
- window_.release();
-}
-
-} // namespace views
diff --git a/chrome/views/window/window_delegate.h b/chrome/views/window/window_delegate.h
deleted file mode 100644
index 8e9a556..0000000
--- a/chrome/views/window/window_delegate.h
+++ /dev/null
@@ -1,163 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_WINDOW_WINDOW_DELEGATE_H_
-#define CHROME_VIEWS_WINDOW_WINDOW_DELEGATE_H_
-
-#include <string>
-
-#include "base/scoped_ptr.h"
-
-class SkBitmap;
-
-namespace gfx {
-class Rect;
-}
-// TODO(maruel): Remove once gfx::Rect is used instead.
-namespace WTL {
-class CRect;
-}
-using WTL::CRect;
-
-namespace views {
-
-class ClientView;
-class DialogDelegate;
-class View;
-class Window;
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// WindowDelegate
-//
-// WindowDelegate is an interface implemented by objects that wish to show a
-// Window. The window that is displayed uses this interface to determine how
-// it should be displayed and notify the delegate object of certain events.
-//
-///////////////////////////////////////////////////////////////////////////////
-class WindowDelegate {
- public:
- WindowDelegate();
- virtual ~WindowDelegate();
-
- virtual DialogDelegate* AsDialogDelegate() { return NULL; }
-
- // Returns true if the window can ever be resized.
- virtual bool CanResize() const {
- return false;
- }
-
- // Returns true if the window can ever be maximized.
- virtual bool CanMaximize() const {
- return false;
- }
-
- // Returns true if the window should be placed on top of all other windows on
- // the system, even when it is not active. If HasAlwaysOnTopMenu() returns
- // true, then this method is only used the first time the window is opened, it
- // is stored in the preferences for next runs.
- virtual bool IsAlwaysOnTop() const {
- return false;
- }
-
- // Returns whether an "always on top" menu should be added to the system menu
- // of the window.
- virtual bool HasAlwaysOnTopMenu() const {
- return false;
- }
-
- // Returns true if the dialog should be displayed modally to the window that
- // opened it. Only windows with WindowType == DIALOG can be modal.
- virtual bool IsModal() const {
- return false;
- }
-
- // Returns the text to be displayed in the window title.
- virtual std::wstring GetWindowTitle() const {
- return L"";
- }
-
- // Returns the view that should have the focus when the dialog is opened. If
- // NULL no view is focused.
- virtual View* GetInitiallyFocusedView() { return NULL; }
-
- // Returns true if the window should show a title in the title bar.
- virtual bool ShouldShowWindowTitle() const {
- return true;
- }
-
- // Returns the icon to be displayed in the window.
- virtual SkBitmap GetWindowIcon();
-
- // Returns true if a window icon should be shown.
- virtual bool ShouldShowWindowIcon() const {
- return false;
- }
-
- // Execute a command in the window's controller. Returns true if the command
- // was handled, false if it was not.
- virtual bool ExecuteWindowsCommand(int command_id) { return false; }
-
- // Returns the window's name identifier. Used to identify this window for
- // state restoration.
- virtual std::wstring GetWindowName() const {
- return std::wstring();
- }
-
- // Saves the window's bounds, maximized and always-on-top states. By default
- // this uses the process' local state keyed by window name (See GetWindowName
- // above). This behavior can be overridden to provide additional
- // functionality.
- virtual void SaveWindowPlacement(const gfx::Rect& bounds,
- bool maximized,
- bool always_on_top);
-
- // Retrieves the window's bounds, maximized and always-on-top states. By
- // default, this uses the process' local state keyed by window name (See
- // GetWindowName above). This behavior can be overridden to provide
- // additional functionality.
- virtual bool GetSavedWindowBounds(gfx::Rect* bounds) const;
- virtual bool GetSavedMaximizedState(bool* maximized) const;
- virtual bool GetSavedAlwaysOnTopState(bool* always_on_top) const;
-
- // Called when the window closes.
- virtual void WindowClosing() { }
-
- // Called when the window is destroyed. No events must be sent or received
- // after this point. The delegate can use this opportunity to delete itself at
- // this time if necessary.
- virtual void DeleteDelegate() { }
-
- // Returns the View that is contained within this Window.
- virtual View* GetContentsView() {
- return NULL;
- }
-
- // Called by the Window to create the Client View used to host the contents
- // of the window.
- virtual ClientView* CreateClientView(Window* window);
-
- // An accessor to the Window this delegate is bound to.
- Window* window() const { return window_.get(); }
-
- protected:
- // Releases the Window* we maintain. This should be done by a delegate in its
- // WindowClosing handler if it intends to be re-cycled to be used on a
- // different Window.
- void ReleaseWindow();
-
- private:
- friend class WindowGtk;
- friend class WindowWin;
- // This is a little unusual. We use a scoped_ptr here because it's
- // initialized to NULL automatically. We do this because we want to allow
- // people using this helper to not have to call a ctor on this object.
- // Instead we just release the owning ref this pointer has when we are
- // destroyed.
- scoped_ptr<Window> window_;
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_WINDOW_WINDOW_DELEGATE_H_
diff --git a/chrome/views/window/window_gtk.cc b/chrome/views/window/window_gtk.cc
deleted file mode 100644
index 612a416..0000000
--- a/chrome/views/window/window_gtk.cc
+++ /dev/null
@@ -1,199 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/window/window_gtk.h"
-
-#include "app/l10n_util.h"
-#include "base/gfx/rect.h"
-#include "chrome/views/window/custom_frame_view.h"
-#include "chrome/views/window/non_client_view.h"
-#include "chrome/views/window/window_delegate.h"
-
-namespace views {
-
-WindowGtk::~WindowGtk() {
-}
-
-// static
-Window* Window::CreateChromeWindow(gfx::NativeWindow parent,
- const gfx::Rect& bounds,
- WindowDelegate* window_delegate) {
- WindowGtk* window = new WindowGtk(window_delegate);
- window->GetNonClientView()->SetFrameView(window->CreateFrameViewForWindow());
- window->Init(bounds);
- return window;
-}
-
-gfx::Rect WindowGtk::GetBounds() const {
- gfx::Rect bounds;
- WidgetGtk::GetBounds(&bounds, true);
- return bounds;
-}
-
-gfx::Rect WindowGtk::GetNormalBounds() const {
- NOTIMPLEMENTED();
- return GetBounds();
-}
-
-void WindowGtk::SetBounds(const gfx::Rect& bounds) {
- // TODO: this may need to set an initial size if not showing.
- // TODO: need to constrain based on screen size.
- gtk_window_resize(GTK_WINDOW(GetNativeView()), bounds.width(),
- bounds.height());
-
- gtk_window_move(GTK_WINDOW(GetNativeView()), bounds.x(), bounds.y());
-}
-
-void WindowGtk::SetBounds(const gfx::Rect& bounds,
- gfx::NativeWindow other_window) {
- // TODO: need to deal with other_window.
- SetBounds(bounds);
-}
-
-void WindowGtk::Show() {
- gtk_widget_show_all(GetNativeView());
-}
-
-void WindowGtk::Activate() {
- NOTIMPLEMENTED();
-}
-
-void WindowGtk::Close() {
- NOTIMPLEMENTED();
-}
-
-void WindowGtk::Maximize() {
- gtk_window_maximize(GetNativeWindow());
-}
-
-void WindowGtk::Minimize() {
- gtk_window_iconify(GetNativeWindow());
-}
-
-void WindowGtk::Restore() {
- NOTIMPLEMENTED();
-}
-
-bool WindowGtk::IsActive() const {
- return gtk_window_is_active(GetNativeWindow());
-}
-
-bool WindowGtk::IsVisible() const {
- return GTK_WIDGET_VISIBLE(GetNativeView());
-}
-
-bool WindowGtk::IsMaximized() const {
- NOTIMPLEMENTED();
- return false;
-}
-
-bool WindowGtk::IsMinimized() const {
- NOTIMPLEMENTED();
- return false;
-}
-
-void WindowGtk::SetFullscreen(bool fullscreen) {
- NOTIMPLEMENTED();
-}
-
-bool WindowGtk::IsFullscreen() const {
- NOTIMPLEMENTED();
- return false;
-}
-
-void WindowGtk::EnableClose(bool enable) {
- gtk_window_set_deletable(GetNativeWindow(), enable);
-}
-
-void WindowGtk::DisableInactiveRendering() {
- NOTIMPLEMENTED();
-}
-
-void WindowGtk::UpdateWindowTitle() {
- // If the non-client view is rendering its own title, it'll need to relayout
- // now.
- non_client_view_->Layout();
-
- // Update the native frame's text. We do this regardless of whether or not
- // the native frame is being used, since this also updates the taskbar, etc.
- std::wstring window_title = window_delegate_->GetWindowTitle();
- std::wstring localized_text;
- if (l10n_util::AdjustStringForLocaleDirection(window_title, &localized_text))
- window_title.assign(localized_text);
-
- gtk_window_set_title(GetNativeWindow(), WideToUTF8(window_title).c_str());
-}
-
-void WindowGtk::UpdateWindowIcon() {
- NOTIMPLEMENTED();
-}
-
-NonClientFrameView* WindowGtk::CreateFrameViewForWindow() {
- // TODO(erg): Always use a custom frame view? Are there cases where we let
- // the window manager deal with the X11 equivalent of the "non-client" area?
- return new CustomFrameView(this);
-}
-
-void WindowGtk::UpdateFrameAfterFrameChange() {
- NOTIMPLEMENTED();
-}
-
-WindowDelegate* WindowGtk::GetDelegate() const {
- return window_delegate_;
-}
-
-NonClientView* WindowGtk::GetNonClientView() const {
- return non_client_view_;
-}
-
-ClientView* WindowGtk::GetClientView() const {
- return non_client_view_->client_view();
-}
-
-gfx::NativeWindow WindowGtk::GetNativeWindow() const {
- return GTK_WINDOW(GetNativeView());
-}
-
-WindowGtk::WindowGtk(WindowDelegate* window_delegate)
- : WidgetGtk(TYPE_WINDOW),
- is_modal_(false),
- is_always_on_top_(false),
- window_delegate_(window_delegate),
- non_client_view_(new NonClientView(this)) {
- window_delegate_->window_.reset(this);
-}
-
-void WindowGtk::Init(const gfx::Rect& bounds) {
- // We call this after initializing our members since our implementations of
- // assorted WidgetWin functions may be called during initialization.
- is_modal_ = window_delegate_->IsModal();
- if (is_modal_) {
- // TODO(erg): Fix once modality works.
- // BecomeModal();
- }
- is_always_on_top_ = window_delegate_->IsAlwaysOnTop();
-
- WidgetGtk::Init(bounds, true);
-
- // Create the ClientView, add it to the NonClientView and add the
- // NonClientView to the RootView. This will cause everything to be parented.
- non_client_view_->set_client_view(window_delegate_->CreateClientView(this));
- WidgetGtk::SetContentsView(non_client_view_);
-
- UpdateWindowTitle();
-
- // SetInitialBounds(bounds);
- // InitAlwaysOnTopState();
-
- // if (!IsAppWindow()) {
- // notification_registrar_.Add(
- // this,
- // NotificationType::ALL_APPWINDOWS_CLOSED,
- // NotificationService::AllSources());
- // }
-
- // ResetWindowRegion(false);
-}
-
-} // namespace views
diff --git a/chrome/views/window/window_gtk.h b/chrome/views/window/window_gtk.h
deleted file mode 100644
index 3a4ef26..0000000
--- a/chrome/views/window/window_gtk.h
+++ /dev/null
@@ -1,92 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_WINDOW_WINDOW_GTK_H_
-#define CHROME_VIEWS_WINDOW_WINDOW_GTK_H_
-
-#include "base/basictypes.h"
-#include "chrome/views/widget/widget_gtk.h"
-#include "chrome/views/window/window.h"
-
-namespace gfx {
-class Point;
-class Size;
-};
-
-namespace views {
-
-class Client;
-class WindowDelegate;
-
-// Window implementation for GTK.
-class WindowGtk : public WidgetGtk, public Window {
- public:
- virtual ~WindowGtk();
-
- // Window overrides:
- virtual gfx::Rect GetBounds() const;
- virtual gfx::Rect GetNormalBounds() const;
- virtual void SetBounds(const gfx::Rect& bounds);
- virtual void SetBounds(const gfx::Rect& bounds,
- gfx::NativeWindow other_window);
- virtual void Show();
- virtual void Activate();
- virtual void Close();
- virtual void Maximize();
- virtual void Minimize();
- virtual void Restore();
- virtual bool IsActive() const;
- virtual bool IsVisible() const;
- virtual bool IsMaximized() const;
- virtual bool IsMinimized() const;
- virtual void SetFullscreen(bool fullscreen);
- virtual bool IsFullscreen() const;
- virtual void EnableClose(bool enable);
- virtual void DisableInactiveRendering();
- virtual void UpdateWindowTitle();
- virtual void UpdateWindowIcon();
- virtual NonClientFrameView* CreateFrameViewForWindow();
- virtual void UpdateFrameAfterFrameChange();
- virtual WindowDelegate* GetDelegate() const;
- virtual NonClientView* GetNonClientView() const;
- virtual ClientView* GetClientView() const;
- virtual gfx::NativeWindow GetNativeWindow() const;
-
- virtual Window* AsWindow() { return this; }
- virtual const Window* AsWindow() const { return this; }
-
- protected:
- // For the constructor.
- friend class Window;
-
- // Constructs the WindowGtk. |window_delegate| cannot be NULL.
- explicit WindowGtk(WindowDelegate* window_delegate);
-
- // Initializes the window to the passed in bounds.
- void Init(const gfx::Rect& bounds);
-
- private:
- // Whether or not the window is modal. This comes from the delegate and is
- // cached at Init time to avoid calling back to the delegate from the
- // destructor.
- bool is_modal_;
-
- // Whether the window is currently always on top.
- bool is_always_on_top_;
-
- // Our window delegate.
- WindowDelegate* window_delegate_;
-
- // The View that provides the non-client area of the window (title bar,
- // window controls, sizing borders etc). To use an implementation other than
- // the default, this class must be subclassed and this value set to the
- // desired implementation before calling |Init|.
- NonClientView* non_client_view_;
-
- DISALLOW_COPY_AND_ASSIGN(WindowGtk);
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_WINDOW_WINDOW_GTK_H_
diff --git a/chrome/views/window/window_resources.h b/chrome/views/window/window_resources.h
deleted file mode 100644
index 9db078e..0000000
--- a/chrome/views/window/window_resources.h
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_WINDOW_WINDOW_RESOURCES_H_
-#define CHROME_VIEWS_WINDOW_WINDOW_RESOURCES_H_
-
-class SkBitmap;
-
-namespace views {
-
-typedef int FramePartBitmap;
-
-///////////////////////////////////////////////////////////////////////////////
-// WindowResources
-//
-// An interface implemented by an object providing bitmaps to render the
-// contents of a window frame. The Window may swap in different
-// implementations of this interface to render different modes. The definition
-// of FramePartBitmap depends on the implementation.
-//
-class WindowResources {
- public:
- virtual ~WindowResources() { }
- virtual SkBitmap* GetPartBitmap(FramePartBitmap part) const = 0;
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_WINDOW_WINDOW_RESOURCES_H_
diff --git a/chrome/views/window/window_win.cc b/chrome/views/window/window_win.cc
deleted file mode 100644
index 73be950..0000000
--- a/chrome/views/window/window_win.cc
+++ /dev/null
@@ -1,1446 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/views/window/window_win.h"
-
-#include <shellapi.h>
-
-#include "app/gfx/chrome_canvas.h"
-#include "app/gfx/chrome_font.h"
-#include "app/gfx/icon_util.h"
-#include "app/gfx/path.h"
-#include "app/l10n_util.h"
-#include "app/resource_bundle.h"
-#include "base/win_util.h"
-#include "chrome/app/chrome_dll_resource.h"
-#include "chrome/common/win_util.h"
-#include "chrome/views/widget/root_view.h"
-#include "chrome/views/window/client_view.h"
-#include "chrome/views/window/custom_frame_view.h"
-#include "chrome/views/window/native_frame_view.h"
-#include "chrome/views/window/non_client_view.h"
-#include "chrome/views/window/window_delegate.h"
-#include "grit/generated_resources.h"
-
-namespace {
-
-bool GetMonitorAndRects(const RECT& rect,
- HMONITOR* monitor,
- gfx::Rect* monitor_rect,
- gfx::Rect* work_area) {
- DCHECK(monitor);
- DCHECK(monitor_rect);
- DCHECK(work_area);
- *monitor = MonitorFromRect(&rect, MONITOR_DEFAULTTONULL);
- if (!*monitor)
- return false;
- MONITORINFO monitor_info = { 0 };
- monitor_info.cbSize = sizeof(monitor_info);
- GetMonitorInfo(*monitor, &monitor_info);
- *monitor_rect = monitor_info.rcMonitor;
- *work_area = monitor_info.rcWork;
- return true;
-}
-
-} // namespace
-
-namespace views {
-
-// A scoping class that prevents a window from being able to redraw in response
-// to invalidations that may occur within it for the lifetime of the object.
-//
-// Why would we want such a thing? Well, it turns out Windows has some
-// "unorthodox" behavior when it comes to painting its non-client areas.
-// Occasionally, Windows will paint portions of the default non-client area
-// right over the top of the custom frame. This is not simply fixed by handling
-// WM_NCPAINT/WM_PAINT, with some investigation it turns out that this
-// rendering is being done *inside* the default implementation of some message
-// handlers and functions:
-// . WM_SETTEXT
-// . WM_SETICON
-// . WM_NCLBUTTONDOWN
-// . EnableMenuItem, called from our WM_INITMENU handler
-// The solution is to handle these messages and call DefWindowProc ourselves,
-// but prevent the window from being able to update itself for the duration of
-// the call. We do this with this class, which automatically calls its
-// associated Window's lock and unlock functions as it is created and destroyed.
-// See documentation in those methods for the technique used.
-//
-// IMPORTANT: Do not use this scoping object for large scopes or periods of
-// time! IT WILL PREVENT THE WINDOW FROM BEING REDRAWN! (duh).
-//
-// I would love to hear Raymond Chen's explanation for all this. And maybe a
-// list of other messages that this applies to ;-)
-class WindowWin::ScopedRedrawLock {
- public:
- explicit ScopedRedrawLock(WindowWin* window) : window_(window) {
- window_->LockUpdates();
- }
-
- ~ScopedRedrawLock() {
- window_->UnlockUpdates();
- }
-
- private:
- // The window having its style changed.
- WindowWin* window_;
-};
-
-HCURSOR WindowWin::resize_cursors_[6];
-
-// If the hung renderer warning doesn't fit on screen, the amount of padding to
-// be left between the edge of the window and the edge of the nearest monitor,
-// after the window is nudged back on screen. Pixels.
-static const int kMonitorEdgePadding = 10;
-
-////////////////////////////////////////////////////////////////////////////////
-// WindowWin, public:
-
-WindowWin::~WindowWin() {
-}
-
-// static
-Window* Window::CreateChromeWindow(gfx::NativeWindow parent,
- const gfx::Rect& bounds,
- WindowDelegate* window_delegate) {
- WindowWin* window = new WindowWin(window_delegate);
- window->GetNonClientView()->SetFrameView(window->CreateFrameViewForWindow());
- window->Init(parent, bounds);
- return window;
-}
-
-gfx::Rect WindowWin::GetBounds() const {
- gfx::Rect bounds;
- WidgetWin::GetBounds(&bounds, true);
- return bounds;
-}
-
-gfx::Rect WindowWin::GetNormalBounds() const {
- // If we're in fullscreen mode, we've changed the normal bounds to the monitor
- // rect, so return the saved bounds instead.
- if (IsFullscreen())
- return gfx::Rect(saved_window_info_.window_rect);
-
- WINDOWPLACEMENT wp;
- wp.length = sizeof(wp);
- const bool ret = !!GetWindowPlacement(GetNativeView(), &wp);
- DCHECK(ret);
- return gfx::Rect(wp.rcNormalPosition);
-}
-
-void WindowWin::SetBounds(const gfx::Rect& bounds) {
- SetBounds(bounds, NULL);
-}
-
-void WindowWin::SetBounds(const gfx::Rect& bounds,
- gfx::NativeWindow other_window) {
- win_util::SetChildBounds(GetNativeView(), GetParent(), other_window, bounds,
- kMonitorEdgePadding, 0);
-}
-
-void WindowWin::Show(int show_state) {
- ShowWindow(show_state);
- // When launched from certain programs like bash and Windows Live Messenger,
- // show_state is set to SW_HIDE, so we need to correct that condition. We
- // don't just change show_state to SW_SHOWNORMAL because MSDN says we must
- // always first call ShowWindow with the specified value from STARTUPINFO,
- // otherwise all future ShowWindow calls will be ignored (!!#@@#!). Instead,
- // we call ShowWindow again in this case.
- if (show_state == SW_HIDE) {
- show_state = SW_SHOWNORMAL;
- ShowWindow(show_state);
- }
-
- // We need to explicitly activate the window if we've been shown with a state
- // that should activate, because if we're opened from a desktop shortcut while
- // an existing window is already running it doesn't seem to be enough to use
- // one of these flags to activate the window.
- if (show_state == SW_SHOWNORMAL)
- Activate();
-
- SetInitialFocus();
-}
-
-int WindowWin::GetShowState() const {
- return SW_SHOWNORMAL;
-}
-
-void WindowWin::ExecuteSystemMenuCommand(int command) {
- if (command)
- SendMessage(GetNativeView(), WM_SYSCOMMAND, command, 0);
-}
-
-void WindowWin::PushForceHidden() {
- if (force_hidden_count_++ == 0)
- Hide();
-}
-
-void WindowWin::PopForceHidden() {
- if (--force_hidden_count_ <= 0) {
- force_hidden_count_ = 0;
- ShowWindow(SW_SHOW);
- }
-}
-
-// static
-int Window::GetLocalizedContentsWidth(int col_resource_id) {
- double chars = _wtof(l10n_util::GetString(col_resource_id).c_str());
- ResourceBundle& rb = ResourceBundle::GetSharedInstance();
- ChromeFont font = rb.GetFont(ResourceBundle::BaseFont);
- int width = font.GetExpectedTextWidth(static_cast<int>(chars));
- DCHECK(width > 0);
- return width;
-}
-
-// static
-int Window::GetLocalizedContentsHeight(int row_resource_id) {
- double lines = _wtof(l10n_util::GetString(row_resource_id).c_str());
- ResourceBundle& rb = ResourceBundle::GetSharedInstance();
- ChromeFont font = rb.GetFont(ResourceBundle::BaseFont);
- int height = static_cast<int>(font.height() * lines);
- DCHECK(height > 0);
- return height;
-}
-
-// static
-gfx::Size Window::GetLocalizedContentsSize(int col_resource_id,
- int row_resource_id) {
- return gfx::Size(GetLocalizedContentsWidth(col_resource_id),
- GetLocalizedContentsHeight(row_resource_id));
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// WindowWin, Window implementation:
-
-void WindowWin::Show() {
- int show_state = GetShowState();
- if (saved_maximized_state_)
- show_state = SW_SHOWMAXIMIZED;
- Show(show_state);
-}
-
-void WindowWin::Activate() {
- if (IsMinimized())
- ::ShowWindow(GetNativeView(), SW_RESTORE);
- ::SetWindowPos(GetNativeView(), HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
- SetForegroundWindow(GetNativeView());
-}
-
-void WindowWin::Close() {
- if (window_closed_) {
- // It appears we can hit this code path if you close a modal dialog then
- // close the last browser before the destructor is hit, which triggers
- // invoking Close again. I'm short circuiting this code path to avoid
- // calling into the delegate twice, which is problematic.
- return;
- }
-
- if (non_client_view_->CanClose()) {
- SaveWindowPosition();
- RestoreEnabledIfNecessary();
- WidgetWin::Close();
- // If the user activates another app after opening us, then comes back and
- // closes us, we want our owner to gain activation. But only if the owner
- // is visible. If we don't manually force that here, the other app will
- // regain activation instead.
- if (owning_hwnd_ && GetNativeView() == GetForegroundWindow() &&
- IsWindowVisible(owning_hwnd_)) {
- SetForegroundWindow(owning_hwnd_);
- }
- window_closed_ = true;
- }
-}
-
-void WindowWin::Maximize() {
- ExecuteSystemMenuCommand(SC_MAXIMIZE);
-}
-
-void WindowWin::Minimize() {
- ExecuteSystemMenuCommand(SC_MINIMIZE);
-}
-
-void WindowWin::Restore() {
- ExecuteSystemMenuCommand(SC_RESTORE);
-}
-
-bool WindowWin::IsActive() const {
- return is_active_;
-}
-
-bool WindowWin::IsVisible() const {
- return !!::IsWindowVisible(GetNativeView());
-}
-
-bool WindowWin::IsMaximized() const {
- return !!::IsZoomed(GetNativeView());
-}
-
-bool WindowWin::IsMinimized() const {
- return !!::IsIconic(GetNativeView());
-}
-
-void WindowWin::SetFullscreen(bool fullscreen) {
- if (fullscreen_ == fullscreen)
- return; // Nothing to do.
-
- // Reduce jankiness during the following position changes by hiding the window
- // until it's in the final position.
- PushForceHidden();
-
- // Size/position/style window appropriately.
- if (!fullscreen_) {
- // Save current window information. We force the window into restored mode
- // before going fullscreen because Windows doesn't seem to hide the
- // taskbar if the window is in the maximized state.
- saved_window_info_.maximized = IsMaximized();
- if (saved_window_info_.maximized)
- Restore();
- saved_window_info_.style = GetWindowLong(GWL_STYLE);
- saved_window_info_.ex_style = GetWindowLong(GWL_EXSTYLE);
- GetWindowRect(&saved_window_info_.window_rect);
- }
-
- // Toggle fullscreen mode.
- fullscreen_ = fullscreen;
-
- if (fullscreen_) {
- // Set new window style and size.
- MONITORINFO monitor_info;
- monitor_info.cbSize = sizeof(monitor_info);
- GetMonitorInfo(MonitorFromWindow(GetNativeView(), MONITOR_DEFAULTTONEAREST),
- &monitor_info);
- gfx::Rect monitor_rect(monitor_info.rcMonitor);
- SetWindowLong(GWL_STYLE,
- saved_window_info_.style & ~(WS_CAPTION | WS_THICKFRAME));
- SetWindowLong(GWL_EXSTYLE,
- saved_window_info_.ex_style & ~(WS_EX_DLGMODALFRAME |
- WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE | WS_EX_STATICEDGE));
- SetWindowPos(NULL, monitor_rect.x(), monitor_rect.y(),
- monitor_rect.width(), monitor_rect.height(),
- SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED);
- } else {
- // Reset original window style and size. The multiple window size/moves
- // here are ugly, but if SetWindowPos() doesn't redraw, the taskbar won't be
- // repainted. Better-looking methods welcome.
- gfx::Rect new_rect(saved_window_info_.window_rect);
- SetWindowLong(GWL_STYLE, saved_window_info_.style);
- SetWindowLong(GWL_EXSTYLE, saved_window_info_.ex_style);
- SetWindowPos(NULL, new_rect.x(), new_rect.y(), new_rect.width(),
- new_rect.height(),
- SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED);
- if (saved_window_info_.maximized)
- Maximize();
- }
-
- // Undo our anti-jankiness hacks.
- PopForceHidden();
-}
-
-bool WindowWin::IsFullscreen() const {
- return fullscreen_;
-}
-
-void WindowWin::EnableClose(bool enable) {
- // If the native frame is rendering its own close button, ask it to disable.
- non_client_view_->EnableClose(enable);
-
- // Disable the native frame's close button regardless of whether or not the
- // native frame is in use, since this also affects the system menu.
- EnableMenuItem(GetSystemMenu(GetNativeView(), false),
- SC_CLOSE, enable ? MF_ENABLED : MF_GRAYED);
-
- // Let the window know the frame changed.
- SetWindowPos(NULL, 0, 0, 0, 0,
- SWP_FRAMECHANGED | SWP_NOACTIVATE | SWP_NOCOPYBITS |
- SWP_NOMOVE | SWP_NOOWNERZORDER | SWP_NOREPOSITION |
- SWP_NOSENDCHANGING | SWP_NOSIZE | SWP_NOZORDER);
-}
-
-void WindowWin::DisableInactiveRendering() {
- disable_inactive_rendering_ = true;
- non_client_view_->DisableInactiveRendering(disable_inactive_rendering_);
-}
-
-void WindowWin::UpdateWindowTitle() {
- // If the non-client view is rendering its own title, it'll need to relayout
- // now.
- non_client_view_->Layout();
-
- // Update the native frame's text. We do this regardless of whether or not
- // the native frame is being used, since this also updates the taskbar, etc.
- std::wstring window_title = window_delegate_->GetWindowTitle();
- std::wstring localized_text;
- if (l10n_util::AdjustStringForLocaleDirection(window_title, &localized_text))
- window_title.assign(localized_text);
- SetWindowText(GetNativeView(), window_title.c_str());
-}
-
-void WindowWin::UpdateWindowIcon() {
- // If the non-client view is rendering its own icon, we need to tell it to
- // repaint.
- non_client_view_->SchedulePaint();
-
- // Update the native frame's icon. We do this regardless of whether or not
- // the native frame is being used, since this also updates the taskbar, etc.
- SkBitmap icon = window_delegate_->GetWindowIcon();
- if (!icon.isNull()) {
- HICON windows_icon = IconUtil::CreateHICONFromSkBitmap(icon);
- // We need to make sure to destroy the previous icon, otherwise we'll leak
- // these GDI objects until we crash!
- HICON old_icon = reinterpret_cast<HICON>(
- SendMessage(GetNativeView(), WM_SETICON, ICON_SMALL,
- reinterpret_cast<LPARAM>(windows_icon)));
- if (old_icon)
- DestroyIcon(old_icon);
- old_icon = reinterpret_cast<HICON>(
- SendMessage(GetNativeView(), WM_SETICON, ICON_BIG,
- reinterpret_cast<LPARAM>(windows_icon)));
- if (old_icon)
- DestroyIcon(old_icon);
- }
-}
-
-NonClientFrameView* WindowWin::CreateFrameViewForWindow() {
- if (non_client_view_->UseNativeFrame())
- return new NativeFrameView(this);
- return new CustomFrameView(this);
-}
-
-void WindowWin::UpdateFrameAfterFrameChange() {
- // We've either gained or lost a custom window region, so reset it now.
- ResetWindowRegion(true);
-}
-
-WindowDelegate* WindowWin::GetDelegate() const {
- return window_delegate_;
-}
-
-NonClientView* WindowWin::GetNonClientView() const {
- return non_client_view_;
-}
-
-ClientView* WindowWin::GetClientView() const {
- return non_client_view_->client_view();
-}
-
-gfx::NativeWindow WindowWin::GetNativeWindow() const {
- return GetNativeView();
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// WindowWin, protected:
-
-WindowWin::WindowWin(WindowDelegate* window_delegate)
- : WidgetWin(),
- focus_on_creation_(true),
- window_delegate_(window_delegate),
- non_client_view_(new NonClientView(this)),
- owning_hwnd_(NULL),
- minimum_size_(100, 100),
- is_modal_(false),
- restored_enabled_(false),
- is_always_on_top_(false),
- fullscreen_(false),
- window_closed_(false),
- disable_inactive_rendering_(false),
- is_active_(false),
- lock_updates_(false),
- saved_window_style_(0),
- saved_maximized_state_(0),
- ignore_window_pos_changes_(false),
- ignore_pos_changes_factory_(this),
- force_hidden_count_(0),
- last_monitor_(NULL) {
- is_window_ = true;
- InitClass();
- DCHECK(window_delegate_);
- window_delegate_->window_.reset(this);
- // Initialize these values to 0 so that subclasses can override the default
- // behavior before calling Init.
- set_window_style(0);
- set_window_ex_style(0);
-}
-
-void WindowWin::Init(HWND parent, const gfx::Rect& bounds) {
- // We need to save the parent window, since later calls to GetParent() will
- // return NULL.
- owning_hwnd_ = parent;
- // We call this after initializing our members since our implementations of
- // assorted WidgetWin functions may be called during initialization.
- is_modal_ = window_delegate_->IsModal();
- if (is_modal_)
- BecomeModal();
- is_always_on_top_ = window_delegate_->IsAlwaysOnTop();
-
- if (window_style() == 0)
- set_window_style(CalculateWindowStyle());
- if (window_ex_style() == 0)
- set_window_ex_style(CalculateWindowExStyle());
-
- WidgetWin::Init(parent, bounds, true);
- win_util::SetWindowUserData(GetNativeView(), this);
-
- // Create the ClientView, add it to the NonClientView and add the
- // NonClientView to the RootView. This will cause everything to be parented.
- non_client_view_->set_client_view(window_delegate_->CreateClientView(this));
- WidgetWin::SetContentsView(non_client_view_);
-
- UpdateWindowTitle();
-
- SetInitialBounds(bounds);
- InitAlwaysOnTopState();
-
- GetMonitorAndRects(bounds.ToRECT(), &last_monitor_, &last_monitor_rect_,
- &last_work_area_);
- ResetWindowRegion(false);
-}
-
-void WindowWin::SizeWindowToDefault() {
- win_util::CenterAndSizeWindow(owning_window(), GetNativeView(),
- non_client_view_->GetPreferredSize().ToSIZE(),
- false);
-}
-
-void WindowWin::RunSystemMenu(const gfx::Point& point) {
- // We need to reset and clean up any currently created system menu objects.
- // We need to call this otherwise there's a small chance that we aren't going
- // to get a system menu. We also can't take the return value of this
- // function. We need to call it *again* to get a valid HMENU.
- //::GetSystemMenu(GetNativeView(), TRUE);
- UINT flags = TPM_LEFTBUTTON | TPM_RIGHTBUTTON | TPM_RETURNCMD;
- if (l10n_util::GetTextDirection() == l10n_util::RIGHT_TO_LEFT)
- flags |= TPM_RIGHTALIGN;
- HMENU system_menu = ::GetSystemMenu(GetNativeView(), FALSE);
- int id = ::TrackPopupMenu(system_menu, flags,
- point.x(), point.y(), 0, GetNativeView(), NULL);
- ExecuteSystemMenuCommand(id);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// WindowWin, WidgetWin overrides:
-
-void WindowWin::OnActivate(UINT action, BOOL minimized, HWND window) {
- if (action == WA_INACTIVE)
- SaveWindowPosition();
-}
-
-void WindowWin::OnActivateApp(BOOL active, DWORD thread_id) {
- if (!active && thread_id != GetCurrentThreadId()) {
- // Another application was activated, we should reset any state that
- // disables inactive rendering now.
- disable_inactive_rendering_ = false;
- non_client_view_->DisableInactiveRendering(false);
- // Update the native frame too, since it could be rendering the non-client
- // area.
- CallDefaultNCActivateHandler(FALSE);
- }
-}
-
-LRESULT WindowWin::OnAppCommand(HWND window, short app_command, WORD device,
- int keystate) {
- // We treat APPCOMMAND ids as an extension of our command namespace, and just
- // let the delegate figure out what to do...
- if (!window_delegate_->ExecuteWindowsCommand(app_command))
- return WidgetWin::OnAppCommand(window, app_command, device, keystate);
- return 0;
-}
-
-void WindowWin::OnCommand(UINT notification_code, int command_id, HWND window) {
- // If the notification code is > 1 it means it is control specific and we
- // should ignore it.
- if (notification_code > 1 ||
- window_delegate_->ExecuteWindowsCommand(command_id)) {
- WidgetWin::OnCommand(notification_code, command_id, window);
- }
-}
-
-void WindowWin::OnDestroy() {
- non_client_view_->WindowClosing();
- RestoreEnabledIfNecessary();
- WidgetWin::OnDestroy();
-}
-
-namespace {
-static BOOL CALLBACK SendDwmCompositionChanged(HWND window, LPARAM param) {
- SendMessage(window, WM_DWMCOMPOSITIONCHANGED, 0, 0);
- return TRUE;
-}
-} // namespace
-
-LRESULT WindowWin::OnDwmCompositionChanged(UINT msg, WPARAM w_param,
- LPARAM l_param) {
- // The window may try to paint in SetUseNativeFrame, and as a result it can
- // get into a state where it is very unhappy with itself - rendering black
- // behind the entire client area. This is because for some reason the
- // SkPorterDuff::kClear_mode erase done in the RootView thinks the window is
- // still opaque. So, to work around this we hide the window as soon as we can
- // (now), saving off its placement so it can be properly restored once
- // everything has settled down.
- WINDOWPLACEMENT saved_window_placement;
- saved_window_placement.length = sizeof(WINDOWPLACEMENT);
- GetWindowPlacement(GetNativeView(), &saved_window_placement);
- Hide();
-
- // Important step: restore the window first, since our hiding hack doesn't
- // work for maximized windows! We tell the frame not to allow itself to be
- // made visible though, which removes the brief flicker.
- ++force_hidden_count_;
- ::ShowWindow(GetNativeView(), SW_RESTORE);
- --force_hidden_count_;
-
- // We respond to this in response to WM_DWMCOMPOSITIONCHANGED since that is
- // the only thing we care about - we don't actually respond to WM_THEMECHANGED
- // messages.
- non_client_view_->SetUseNativeFrame(win_util::ShouldUseVistaFrame());
-
- // Now that we've updated the frame, we'll want to restore our saved placement
- // since the display should have settled down and we can be properly rendered.
- SetWindowPlacement(GetNativeView(), &saved_window_placement);
-
- // WM_DWMCOMPOSITIONCHANGED is only sent to top level windows, however we want
- // to notify our children too, since we can have MDI child windows who need to
- // update their appearance.
- EnumChildWindows(GetNativeView(), &SendDwmCompositionChanged, NULL);
- return 0;
-}
-
-void WindowWin::OnFinalMessage(HWND window) {
- // Delete and NULL the delegate here once we're guaranteed to get no more
- // messages.
- window_delegate_->DeleteDelegate();
- window_delegate_ = NULL;
- WidgetWin::OnFinalMessage(window);
-}
-
-void WindowWin::OnGetMinMaxInfo(MINMAXINFO* minmax_info) {
- gfx::Size min_window_size(GetNonClientView()->GetMinimumSize());
- minmax_info->ptMinTrackSize.x = min_window_size.width();
- minmax_info->ptMinTrackSize.y = min_window_size.height();
- WidgetWin::OnGetMinMaxInfo(minmax_info);
-}
-
-namespace {
-static void EnableMenuItem(HMENU menu, UINT command, bool enabled) {
- UINT flags = MF_BYCOMMAND | (enabled ? MF_ENABLED : MF_DISABLED | MF_GRAYED);
- EnableMenuItem(menu, command, flags);
-}
-} // namespace
-
-void WindowWin::OnInitMenu(HMENU menu) {
- // We only need to manually enable the system menu if we're not using a native
- // frame.
- if (non_client_view_->UseNativeFrame())
- WidgetWin::OnInitMenu(menu);
-
- bool is_fullscreen = IsFullscreen();
- bool is_minimized = IsMinimized();
- bool is_maximized = IsMaximized();
- bool is_restored = !is_fullscreen && !is_minimized && !is_maximized;
-
- ScopedRedrawLock lock(this);
- EnableMenuItem(menu, SC_RESTORE, is_minimized || is_maximized);
- EnableMenuItem(menu, SC_MOVE, is_restored);
- EnableMenuItem(menu, SC_SIZE, window_delegate_->CanResize() && is_restored);
- EnableMenuItem(menu, SC_MAXIMIZE,
- window_delegate_->CanMaximize() && !is_fullscreen && !is_maximized);
- EnableMenuItem(menu, SC_MINIMIZE,
- window_delegate_->CanMaximize() && !is_minimized);
-}
-
-void WindowWin::OnMouseLeave() {
- // We only need to manually track WM_MOUSELEAVE messages between the client
- // and non-client area when we're not using the native frame.
- if (non_client_view_->UseNativeFrame()) {
- SetMsgHandled(FALSE);
- return;
- }
-
- bool process_mouse_exited = true;
- POINT pt;
- if (GetCursorPos(&pt)) {
- LRESULT ht_component =
- ::SendMessage(GetNativeView(), WM_NCHITTEST, 0, MAKELPARAM(pt.x, pt.y));
- if (ht_component != HTNOWHERE) {
- // If the mouse moved into a part of the window's non-client area, then
- // don't send a mouse exited event since the mouse is still within the
- // bounds of the ChromeView that's rendering the frame. Note that we do
- // _NOT_ do this for windows with native frames, since in that case the
- // mouse really will have left the bounds of the RootView.
- process_mouse_exited = false;
- }
- }
-
- if (process_mouse_exited)
- ProcessMouseExited();
-}
-
-LRESULT WindowWin::OnNCActivate(BOOL active) {
- is_active_ = !!active;
-
- // If we're not using the native frame, we need to force a synchronous repaint
- // otherwise we'll be left in the wrong activation state until something else
- // causes a repaint later.
- if (!non_client_view_->UseNativeFrame()) {
- // We can get WM_NCACTIVATE before we're actually visible. If we're not
- // visible, no need to paint.
- if (IsWindowVisible(GetNativeView())) {
- non_client_view_->SchedulePaint();
- // We need to force a paint now, as a user dragging a window will block
- // painting operations while the move is in progress.
- PaintNow(root_view_->GetScheduledPaintRect());
- }
- }
-
- // If we're active again, we should be allowed to render as inactive, so
- // tell the non-client view. This must be done independently of the check for
- // disable_inactive_rendering_ since that check is valid even if the frame
- // is not active, but this can only be done if we've become active.
- if (IsActive())
- non_client_view_->DisableInactiveRendering(false);
-
- // Reset the disable inactive rendering state since activation has changed.
- if (disable_inactive_rendering_) {
- disable_inactive_rendering_ = false;
- return CallDefaultNCActivateHandler(TRUE);
- }
- return CallDefaultNCActivateHandler(active);
-}
-
-LRESULT WindowWin::OnNCCalcSize(BOOL mode, LPARAM l_param) {
- // We only need to adjust the client size/paint handling when we're not using
- // the native frame.
- if (non_client_view_->UseNativeFrame())
- return WidgetWin::OnNCCalcSize(mode, l_param);
-
- RECT* client_rect = mode ?
- &reinterpret_cast<NCCALCSIZE_PARAMS*>(l_param)->rgrc[0] :
- reinterpret_cast<RECT*>(l_param);
- if (IsMaximized()) {
- // Make the maximized mode client rect fit the screen exactly, by
- // subtracting the border Windows automatically adds for maximized mode.
- int border_thickness = GetSystemMetrics(SM_CXSIZEFRAME);
- InflateRect(client_rect, -border_thickness, -border_thickness);
-
- // Find all auto-hide taskbars along the screen edges and adjust in by the
- // thickness of the auto-hide taskbar on each such edge, so the window isn't
- // treated as a "fullscreen app", which would cause the taskbars to
- // disappear.
- HMONITOR monitor = MonitorFromWindow(GetNativeView(),
- MONITOR_DEFAULTTONULL);
- if (win_util::EdgeHasTopmostAutoHideTaskbar(ABE_LEFT, monitor))
- client_rect->left += win_util::kAutoHideTaskbarThicknessPx;
- if (win_util::EdgeHasTopmostAutoHideTaskbar(ABE_TOP, monitor))
- client_rect->top += win_util::kAutoHideTaskbarThicknessPx;
- if (win_util::EdgeHasTopmostAutoHideTaskbar(ABE_RIGHT, monitor))
- client_rect->right -= win_util::kAutoHideTaskbarThicknessPx;
- if (win_util::EdgeHasTopmostAutoHideTaskbar(ABE_BOTTOM, monitor))
- client_rect->bottom -= win_util::kAutoHideTaskbarThicknessPx;
-
- // We cannot return WVR_REDRAW when there is nonclient area, or Windows
- // exhibits bugs where client pixels and child HWNDs are mispositioned by
- // the width/height of the upper-left nonclient area.
- return 0;
- }
-
- // If the window bounds change, we're going to relayout and repaint anyway.
- // Returning WVR_REDRAW avoids an extra paint before that of the old client
- // pixels in the (now wrong) location, and thus makes actions like resizing a
- // window from the left edge look slightly less broken.
- return mode ? WVR_REDRAW : 0;
-}
-
-LRESULT WindowWin::OnNCHitTest(const CPoint& point) {
- // First, give the NonClientView a chance to test the point to see if it
- // provides any of the non-client area.
- CPoint temp = point;
- MapWindowPoints(HWND_DESKTOP, GetNativeView(), &temp, 1);
- int component = non_client_view_->NonClientHitTest(gfx::Point(temp));
- if (component != HTNOWHERE)
- return component;
-
- // Otherwise, we let Windows do all the native frame non-client handling for
- // us.
- return WidgetWin::OnNCHitTest(point);
-}
-
-namespace {
-struct ClipState {
- // The window being painted.
- HWND parent;
-
- // DC painting to.
- HDC dc;
-
- // Origin of the window in terms of the screen.
- int x;
- int y;
-};
-
-// See comments in OnNCPaint for details of this function.
-static BOOL CALLBACK ClipDCToChild(HWND window, LPARAM param) {
- ClipState* clip_state = reinterpret_cast<ClipState*>(param);
- if (GetParent(window) == clip_state->parent && IsWindowVisible(window)) {
- RECT bounds;
- GetWindowRect(window, &bounds);
- ExcludeClipRect(clip_state->dc,
- bounds.left - clip_state->x,
- bounds.top - clip_state->y,
- bounds.right - clip_state->x,
- bounds.bottom - clip_state->y);
- }
- return TRUE;
-}
-} // namespace
-
-void WindowWin::OnNCPaint(HRGN rgn) {
- // We only do non-client painting if we're not using the native frame.
- if (non_client_view_->UseNativeFrame()) {
- WidgetWin::OnNCPaint(rgn);
- return;
- }
-
- // We have an NC region and need to paint it. We expand the NC region to
- // include the dirty region of the root view. This is done to minimize
- // paints.
- CRect window_rect;
- GetWindowRect(&window_rect);
-
- if (window_rect.Width() != root_view_->width() ||
- window_rect.Height() != root_view_->height()) {
- // If the size of the window differs from the size of the root view it
- // means we're being asked to paint before we've gotten a WM_SIZE. This can
- // happen when the user is interactively resizing the window. To avoid
- // mass flickering we don't do anything here. Once we get the WM_SIZE we'll
- // reset the region of the window which triggers another WM_NCPAINT and
- // all is well.
- return;
- }
-
- CRect dirty_region;
- // A value of 1 indicates paint all.
- if (!rgn || rgn == reinterpret_cast<HRGN>(1)) {
- dirty_region = CRect(0, 0, window_rect.Width(), window_rect.Height());
- } else {
- RECT rgn_bounding_box;
- GetRgnBox(rgn, &rgn_bounding_box);
- if (!IntersectRect(&dirty_region, &rgn_bounding_box, &window_rect))
- return; // Dirty region doesn't intersect window bounds, bale.
-
- // rgn_bounding_box is in screen coordinates. Map it to window coordinates.
- OffsetRect(&dirty_region, -window_rect.left, -window_rect.top);
- }
-
- // In theory GetDCEx should do what we want, but I couldn't get it to work.
- // In particular the docs mentiond DCX_CLIPCHILDREN, but as far as I can tell
- // it doesn't work at all. So, instead we get the DC for the window then
- // manually clip out the children.
- HDC dc = GetWindowDC(GetNativeView());
- ClipState clip_state;
- clip_state.x = window_rect.left;
- clip_state.y = window_rect.top;
- clip_state.parent = GetNativeView();
- clip_state.dc = dc;
- EnumChildWindows(GetNativeView(), &ClipDCToChild,
- reinterpret_cast<LPARAM>(&clip_state));
-
- RootView* root_view = GetRootView();
- gfx::Rect old_paint_region =
- root_view->GetScheduledPaintRectConstrainedToSize();
-
- if (!old_paint_region.IsEmpty()) {
- // The root view has a region that needs to be painted. Include it in the
- // region we're going to paint.
-
- CRect old_paint_region_crect = old_paint_region.ToRECT();
- CRect tmp = dirty_region;
- UnionRect(&dirty_region, &tmp, &old_paint_region_crect);
- }
-
- root_view->SchedulePaint(gfx::Rect(dirty_region), false);
-
- // ChromeCanvasPaints destructor does the actual painting. As such, wrap the
- // following in a block to force paint to occur so that we can release the dc.
- {
- ChromeCanvasPaint canvas(dc, opaque(), dirty_region.left, dirty_region.top,
- dirty_region.Width(), dirty_region.Height());
-
- root_view->ProcessPaint(&canvas);
- }
-
- ReleaseDC(GetNativeView(), dc);
-}
-
-void WindowWin::OnNCLButtonDown(UINT ht_component, const CPoint& point) {
- // When we're using a native frame, window controls work without us
- // interfering.
- if (!non_client_view_->UseNativeFrame()) {
- switch (ht_component) {
- case HTCLOSE:
- case HTMINBUTTON:
- case HTMAXBUTTON: {
- // When the mouse is pressed down in these specific non-client areas,
- // we need to tell the RootView to send the mouse pressed event (which
- // sets capture, allowing subsequent WM_LBUTTONUP (note, _not_
- // WM_NCLBUTTONUP) to fire so that the appropriate WM_SYSCOMMAND can be
- // sent by the applicable button's ButtonListener. We _have_ to do this
- // way rather than letting Windows just send the syscommand itself (as
- // would happen if we never did this dance) because for some insane
- // reason DefWindowProc for WM_NCLBUTTONDOWN also renders the pressed
- // window control button appearance, in the Windows classic style, over
- // our view! Ick! By handling this message we prevent Windows from
- // doing this undesirable thing, but that means we need to roll the
- // sys-command handling ourselves.
- ProcessNCMousePress(point, MK_LBUTTON);
- return;
- }
- }
- }
-
- // TODO(beng): figure out why we need to run the system menu manually
- // ourselves. This is wrong and causes many subtle bugs.
- // From my initial research, it looks like DefWindowProc tries
- // to run it but fails before sending the initial WM_MENUSELECT
- // for the sysmenu.
- if (ht_component == HTSYSMENU)
- RunSystemMenu(non_client_view_->GetSystemMenuPoint());
- else
- WidgetWin::OnNCLButtonDown(ht_component, point);
-
- /* TODO(beng): Fix the standard non-client over-painting bug. This code
- doesn't work but identifies the problem.
- if (!IsMsgHandled()) {
- // WindowWin::OnNCLButtonDown set the message as unhandled. This normally
- // means WidgetWin::ProcessWindowMessage will pass it to
- // DefWindowProc. Sadly, DefWindowProc for WM_NCLBUTTONDOWN does weird
- // non-client painting, so we need to call it directly here inside a
- // scoped update lock.
- ScopedRedrawLock lock(this);
- DefWindowProc(GetNativeView(), WM_NCLBUTTONDOWN, ht_component,
- MAKELPARAM(point.x, point.y));
- SetMsgHandled(TRUE);
- }
- */
-}
-
-void WindowWin::OnNCRButtonDown(UINT ht_component, const CPoint& point) {
- if (ht_component == HTCAPTION || ht_component == HTSYSMENU)
- RunSystemMenu(gfx::Point(point));
- else
- WidgetWin::OnNCRButtonDown(ht_component, point);
-}
-
-LRESULT WindowWin::OnNCUAHDrawCaption(UINT msg, WPARAM w_param,
- LPARAM l_param) {
- // See comment in widget_win.h at the definition of WM_NCUAHDRAWCAPTION for
- // an explanation about why we need to handle this message.
- SetMsgHandled(!non_client_view_->UseNativeFrame());
- return 0;
-}
-
-LRESULT WindowWin::OnNCUAHDrawFrame(UINT msg, WPARAM w_param,
- LPARAM l_param) {
- // See comment in widget_win.h at the definition of WM_NCUAHDRAWCAPTION for
- // an explanation about why we need to handle this message.
- SetMsgHandled(!non_client_view_->UseNativeFrame());
- return 0;
-}
-
-LRESULT WindowWin::OnSetCursor(HWND window, UINT hittest_code, UINT message) {
- // If the window is disabled, it's because we're showing a modal dialog box.
- // We need to let DefWindowProc handle the message. That's because
- // DefWindowProc for WM_SETCURSOR with message = some kind of mouse button
- // down message sends the top level window a WM_ACTIVATEAPP message, which we
- // otherwise wouldn't get. The symptom of not doing this is that if the user
- // has a window in the background with a modal dialog open, they can't click
- // on the disabled background window to bring the entire stack to the front.
- // This is annoying because they then have to move all the foreground windows
- // out of the way to be able to activate said window. I love how on Windows,
- // the answer isn't always logical.
- if (!IsWindowEnabled(GetNativeView()))
- return WidgetWin::OnSetCursor(window, hittest_code, message);
-
- int index = RC_NORMAL;
- switch (hittest_code) {
- case HTTOP:
- case HTBOTTOM:
- index = RC_VERTICAL;
- break;
- case HTTOPLEFT:
- case HTBOTTOMRIGHT:
- index = RC_NWSE;
- break;
- case HTTOPRIGHT:
- case HTBOTTOMLEFT:
- index = RC_NESW;
- break;
- case HTLEFT:
- case HTRIGHT:
- index = RC_HORIZONTAL;
- break;
- case HTCAPTION:
- case HTCLIENT:
- index = RC_NORMAL;
- break;
- }
- SetCursor(resize_cursors_[index]);
- return 0;
-}
-
-LRESULT WindowWin::OnSetIcon(UINT size_type, HICON new_icon) {
- // This shouldn't hurt even if we're using the native frame.
- ScopedRedrawLock lock(this);
- return DefWindowProc(GetNativeView(), WM_SETICON, size_type,
- reinterpret_cast<LPARAM>(new_icon));
-}
-
-LRESULT WindowWin::OnSetText(const wchar_t* text) {
- // This shouldn't hurt even if we're using the native frame.
- ScopedRedrawLock lock(this);
- return DefWindowProc(GetNativeView(), WM_SETTEXT, NULL,
- reinterpret_cast<LPARAM>(text));
-}
-
-void WindowWin::OnSettingChange(UINT flags, const wchar_t* section) {
- if (!GetParent() && (flags == SPI_SETWORKAREA)) {
- // Fire a dummy SetWindowPos() call, so we'll trip the code in
- // OnWindowPosChanging() below that notices work area changes.
- ::SetWindowPos(GetNativeView(), 0, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE |
- SWP_NOZORDER | SWP_NOREDRAW | SWP_NOACTIVATE | SWP_NOOWNERZORDER);
- SetMsgHandled(TRUE);
- } else {
- WidgetWin::OnSettingChange(flags, section);
- }
-}
-
-void WindowWin::OnSize(UINT size_param, const CSize& new_size) {
- // Don't no-op if the new_size matches current size. If our normal bounds
- // and maximized bounds are the same, then we need to layout (because we
- // layout differently when maximized).
- SaveWindowPosition();
- ChangeSize(size_param, new_size);
- RedrawWindow(GetNativeView(), NULL, NULL, RDW_INVALIDATE | RDW_ALLCHILDREN);
-
- // ResetWindowRegion is going to trigger WM_NCPAINT. By doing it after we've
- // invoked OnSize we ensure the RootView has been laid out.
- ResetWindowRegion(false);
-}
-
-void WindowWin::OnSysCommand(UINT notification_code, CPoint click) {
- // Windows uses the 4 lower order bits of |notification_code| for type-
- // specific information so we must exclude this when comparing.
- static const int sc_mask = 0xFFF0;
- // Ignore size/move/maximize in fullscreen mode.
- if (IsFullscreen() &&
- (((notification_code & sc_mask) == SC_SIZE) ||
- ((notification_code & sc_mask) == SC_MOVE) ||
- ((notification_code & sc_mask) == SC_MAXIMIZE)))
- return;
- if (!non_client_view_->UseNativeFrame()) {
- if ((notification_code & sc_mask) == SC_MINIMIZE ||
- (notification_code & sc_mask) == SC_MAXIMIZE ||
- (notification_code & sc_mask) == SC_RESTORE) {
- non_client_view_->ResetWindowControls();
- } else if ((notification_code & sc_mask) == SC_MOVE ||
- (notification_code & sc_mask) == SC_SIZE) {
- if (lock_updates_) {
- // We were locked, before entering a resize or move modal loop. Now that
- // we've begun to move the window, we need to unlock updates so that the
- // sizing/moving feedback can be continuous.
- UnlockUpdates();
- }
- }
- }
-
- // First see if the delegate can handle it.
- if (window_delegate_->ExecuteWindowsCommand(notification_code))
- return;
-
- if (notification_code == IDC_ALWAYS_ON_TOP) {
- is_always_on_top_ = !is_always_on_top_;
-
- // Change the menu check state.
- HMENU system_menu = GetSystemMenu(GetNativeView(), FALSE);
- MENUITEMINFO menu_info;
- memset(&menu_info, 0, sizeof(MENUITEMINFO));
- menu_info.cbSize = sizeof(MENUITEMINFO);
- BOOL r = GetMenuItemInfo(system_menu, IDC_ALWAYS_ON_TOP,
- FALSE, &menu_info);
- DCHECK(r);
- menu_info.fMask = MIIM_STATE;
- if (is_always_on_top_)
- menu_info.fState = MFS_CHECKED;
- r = SetMenuItemInfo(system_menu, IDC_ALWAYS_ON_TOP, FALSE, &menu_info);
-
- // Now change the actual window's behavior.
- AlwaysOnTopChanged();
- } else if ((notification_code == SC_KEYMENU) && (click.x == VK_SPACE)) {
- // Run the system menu at the NonClientView's desired location.
- RunSystemMenu(non_client_view_->GetSystemMenuPoint());
- } else {
- // Use the default implementation for any other command.
- DefWindowProc(GetNativeView(), WM_SYSCOMMAND, notification_code,
- MAKELPARAM(click.y, click.x));
- }
-}
-
-void WindowWin::OnWindowPosChanging(WINDOWPOS* window_pos) {
- if (force_hidden_count_) {
- // Prevent the window from being made visible if we've been asked to do so.
- // See comment in header as to why we might want this.
- window_pos->flags &= ~SWP_SHOWWINDOW;
- }
-
- if (ignore_window_pos_changes_) {
- // If somebody's trying to toggle our visibility, change the nonclient area,
- // change our Z-order, or activate us, we should probably let it go through.
- if (!(window_pos->flags & ((IsVisible() ? SWP_HIDEWINDOW : SWP_SHOWWINDOW) |
- SWP_FRAMECHANGED)) &&
- (window_pos->flags & (SWP_NOZORDER | SWP_NOACTIVATE))) {
- // Just sizing/moving the window; ignore.
- window_pos->flags |= SWP_NOSIZE | SWP_NOMOVE | SWP_NOREDRAW;
- window_pos->flags &= ~(SWP_SHOWWINDOW | SWP_HIDEWINDOW);
- }
- } else if (!GetParent()) {
- CRect window_rect;
- HMONITOR monitor;
- gfx::Rect monitor_rect, work_area;
- if (GetWindowRect(&window_rect) &&
- GetMonitorAndRects(window_rect, &monitor, &monitor_rect, &work_area)) {
- if (monitor && (monitor == last_monitor_) &&
- (IsFullscreen() || ((monitor_rect == last_monitor_rect_) &&
- (work_area != last_work_area_)))) {
- // A rect for the monitor we're on changed. Normally Windows notifies
- // us about this (and thus we're reaching here due to the SetWindowPos()
- // call in OnSettingChange() above), but with some software (e.g.
- // nVidia's nView desktop manager) the work area can change asynchronous
- // to any notification, and we're just sent a SetWindowPos() call with a
- // new (frequently incorrect) position/size. In either case, the best
- // response is to throw away the existing position/size information in
- // |window_pos| and recalculate it based on the new work rect.
- gfx::Rect new_window_rect;
- if (IsFullscreen()) {
- new_window_rect = monitor_rect;
- } else if (IsZoomed()) {
- new_window_rect = work_area;
- int border_thickness = GetSystemMetrics(SM_CXSIZEFRAME);
- new_window_rect.Inset(-border_thickness, -border_thickness);
- } else {
- new_window_rect = gfx::Rect(window_rect).AdjustToFit(work_area);
- }
- window_pos->x = new_window_rect.x();
- window_pos->y = new_window_rect.y();
- window_pos->cx = new_window_rect.width();
- window_pos->cy = new_window_rect.height();
- // WARNING! Don't set SWP_FRAMECHANGED here, it breaks moving the child
- // HWNDs for some reason.
- window_pos->flags &= ~(SWP_NOSIZE | SWP_NOMOVE | SWP_NOREDRAW);
- window_pos->flags |= SWP_NOCOPYBITS;
-
- // Now ignore all immediately-following SetWindowPos() changes. Windows
- // likes to (incorrectly) recalculate what our position/size should be
- // and send us further updates.
- ignore_window_pos_changes_ = true;
- DCHECK(ignore_pos_changes_factory_.empty());
- MessageLoop::current()->PostTask(FROM_HERE,
- ignore_pos_changes_factory_.NewRunnableMethod(
- &WindowWin::StopIgnoringPosChanges));
- }
- last_monitor_ = monitor;
- last_monitor_rect_ = monitor_rect;
- last_work_area_ = work_area;
- }
- }
-
- WidgetWin::OnWindowPosChanging(window_pos);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// WindowWin, private:
-
-void WindowWin::BecomeModal() {
- // We implement modality by crawling up the hierarchy of windows starting
- // at the owner, disabling all of them so that they don't receive input
- // messages.
- DCHECK(owning_hwnd_) << "Can't create a modal dialog without an owner";
- HWND start = owning_hwnd_;
- while (start != NULL) {
- ::EnableWindow(start, FALSE);
- start = ::GetParent(start);
- }
-}
-
-void WindowWin::SetInitialFocus() {
- if (!focus_on_creation_)
- return;
-
- View* v = window_delegate_->GetInitiallyFocusedView();
- if (v) {
- v->RequestFocus();
- } else {
- // The window does not get keyboard messages unless we focus it, not sure
- // why.
- SetFocus(GetNativeView());
- }
-}
-
-void WindowWin::SetInitialBounds(const gfx::Rect& create_bounds) {
- // First we obtain the window's saved show-style and store it. We need to do
- // this here, rather than in Show() because by the time Show() is called,
- // the window's size will have been reset (below) and the saved maximized
- // state will have been lost. Sadly there's no way to tell on Windows when
- // a window is restored from maximized state, so we can't more accurately
- // track maximized state independently of sizing information.
- window_delegate_->GetSavedMaximizedState(&saved_maximized_state_);
-
- // Restore the window's placement from the controller.
- gfx::Rect saved_bounds(create_bounds.ToRECT());
- if (window_delegate_->GetSavedWindowBounds(&saved_bounds)) {
- // Make sure the bounds are at least the minimum size.
- if (saved_bounds.width() < minimum_size_.cx) {
- saved_bounds.SetRect(saved_bounds.x(), saved_bounds.y(),
- saved_bounds.right() + minimum_size_.cx -
- saved_bounds.width(),
- saved_bounds.bottom());
- }
-
- if (saved_bounds.height() < minimum_size_.cy) {
- saved_bounds.SetRect(saved_bounds.x(), saved_bounds.y(),
- saved_bounds.right(),
- saved_bounds.bottom() + minimum_size_.cy -
- saved_bounds.height());
- }
-
- // "Show state" (maximized, minimized, etc) is handled by Show().
- // Don't use SetBounds here. SetBounds constrains to the size of the
- // monitor, but we don't want that when creating a new window as the result
- // of dragging out a tab to create a new window.
- SetWindowPos(NULL, saved_bounds.x(), saved_bounds.y(),
- saved_bounds.width(), saved_bounds.height(), 0);
- } else {
- if (create_bounds.IsEmpty()) {
- // No initial bounds supplied, so size the window to its content and
- // center over its parent.
- SizeWindowToDefault();
- } else {
- // Use the supplied initial bounds.
- SetBounds(create_bounds);
- }
- }
-}
-
-void WindowWin::InitAlwaysOnTopState() {
- is_always_on_top_ = false;
- if (window_delegate_->GetSavedAlwaysOnTopState(&is_always_on_top_) &&
- is_always_on_top_ != window_delegate_->IsAlwaysOnTop()) {
- AlwaysOnTopChanged();
- }
-
- if (window_delegate_->HasAlwaysOnTopMenu())
- AddAlwaysOnTopSystemMenuItem();
-}
-
-void WindowWin::AddAlwaysOnTopSystemMenuItem() {
- // The Win32 API requires that we own the text.
- always_on_top_menu_text_ = l10n_util::GetString(IDS_ALWAYS_ON_TOP);
-
- // Let's insert a menu to the window.
- HMENU system_menu = ::GetSystemMenu(GetNativeView(), FALSE);
- int index = ::GetMenuItemCount(system_menu) - 1;
- if (index < 0) {
- // Paranoia check.
- NOTREACHED();
- index = 0;
- }
- // First we add the separator.
- MENUITEMINFO menu_info;
- memset(&menu_info, 0, sizeof(MENUITEMINFO));
- menu_info.cbSize = sizeof(MENUITEMINFO);
- menu_info.fMask = MIIM_FTYPE;
- menu_info.fType = MFT_SEPARATOR;
- ::InsertMenuItem(system_menu, index, TRUE, &menu_info);
-
- // Then the actual menu.
- menu_info.fMask = MIIM_FTYPE | MIIM_ID | MIIM_STRING | MIIM_STATE;
- menu_info.fType = MFT_STRING;
- menu_info.fState = MFS_ENABLED;
- if (is_always_on_top_)
- menu_info.fState |= MFS_CHECKED;
- menu_info.wID = IDC_ALWAYS_ON_TOP;
- menu_info.dwTypeData = const_cast<wchar_t*>(always_on_top_menu_text_.c_str());
- ::InsertMenuItem(system_menu, index, TRUE, &menu_info);
-}
-
-void WindowWin::RestoreEnabledIfNecessary() {
- if (is_modal_ && !restored_enabled_) {
- restored_enabled_ = true;
- // If we were run modally, we need to undo the disabled-ness we inflicted on
- // the owner's parent hierarchy.
- HWND start = owning_hwnd_;
- while (start != NULL) {
- ::EnableWindow(start, TRUE);
- start = ::GetParent(start);
- }
- }
-}
-
-void WindowWin::AlwaysOnTopChanged() {
- ::SetWindowPos(GetNativeView(),
- is_always_on_top_ ? HWND_TOPMOST : HWND_NOTOPMOST,
- 0, 0, 0, 0,
- SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED);
-}
-
-DWORD WindowWin::CalculateWindowStyle() {
- DWORD window_styles =
- WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_SYSMENU | WS_CAPTION;
- bool can_resize = window_delegate_->CanResize();
- bool can_maximize = window_delegate_->CanMaximize();
- if (can_maximize) {
- window_styles |= WS_OVERLAPPEDWINDOW;
- } else if (can_resize) {
- window_styles |= WS_OVERLAPPED | WS_THICKFRAME;
- }
- if (window_delegate_->AsDialogDelegate()) {
- window_styles |= DS_MODALFRAME;
- // NOTE: Turning this off means we lose the close button, which is bad.
- // Turning it on though means the user can maximize or size the window
- // from the system menu, which is worse. We may need to provide our own
- // menu to get the close button to appear properly.
- // window_styles &= ~WS_SYSMENU;
- }
- return window_styles;
-}
-
-DWORD WindowWin::CalculateWindowExStyle() {
- DWORD window_ex_styles = 0;
- if (window_delegate_->AsDialogDelegate())
- window_ex_styles |= WS_EX_DLGMODALFRAME;
- if (window_delegate_->IsAlwaysOnTop())
- window_ex_styles |= WS_EX_TOPMOST;
- return window_ex_styles;
-}
-
-void WindowWin::SaveWindowPosition() {
- // The window delegate does the actual saving for us. It seems like (judging
- // by go/crash) that in some circumstances we can end up here after
- // WM_DESTROY, at which point the window delegate is likely gone. So just
- // bail.
- if (!window_delegate_)
- return;
-
- WINDOWPLACEMENT win_placement = { 0 };
- win_placement.length = sizeof(WINDOWPLACEMENT);
-
- BOOL r = GetWindowPlacement(GetNativeView(), &win_placement);
- DCHECK(r);
-
- bool maximized = (win_placement.showCmd == SW_SHOWMAXIMIZED);
- CRect window_bounds(win_placement.rcNormalPosition);
- window_delegate_->SaveWindowPlacement(
- gfx::Rect(win_placement.rcNormalPosition), maximized, is_always_on_top_);
-}
-
-void WindowWin::LockUpdates() {
- lock_updates_ = true;
- saved_window_style_ = GetWindowLong(GWL_STYLE);
- SetWindowLong(GWL_STYLE, saved_window_style_ & ~WS_VISIBLE);
-}
-
-void WindowWin::UnlockUpdates() {
- SetWindowLong(GWL_STYLE, saved_window_style_);
- lock_updates_ = false;
-}
-
-void WindowWin::ResetWindowRegion(bool force) {
- // A native frame uses the native window region, and we don't want to mess
- // with it.
- if (non_client_view_->UseNativeFrame()) {
- if (force)
- SetWindowRgn(NULL, TRUE);
- return;
- }
-
- // Changing the window region is going to force a paint. Only change the
- // window region if the region really differs.
- HRGN current_rgn = CreateRectRgn(0, 0, 0, 0);
- int current_rgn_result = GetWindowRgn(GetNativeView(), current_rgn);
-
- CRect window_rect;
- GetWindowRect(&window_rect);
- HRGN new_region;
- gfx::Path window_mask;
- non_client_view_->GetWindowMask(
- gfx::Size(window_rect.Width(), window_rect.Height()), &window_mask);
- new_region = window_mask.CreateHRGN();
-
- if (current_rgn_result == ERROR || !EqualRgn(current_rgn, new_region)) {
- // SetWindowRgn takes ownership of the HRGN created by CreateHRGN.
- SetWindowRgn(new_region, TRUE);
- } else {
- DeleteObject(new_region);
- }
-
- DeleteObject(current_rgn);
-}
-
-void WindowWin::ProcessNCMousePress(const CPoint& point, int flags) {
- CPoint temp = point;
- MapWindowPoints(HWND_DESKTOP, GetNativeView(), &temp, 1);
- UINT message_flags = 0;
- if ((GetKeyState(VK_CONTROL) & 0x80) == 0x80)
- message_flags |= MK_CONTROL;
- if ((GetKeyState(VK_SHIFT) & 0x80) == 0x80)
- message_flags |= MK_SHIFT;
- message_flags |= flags;
- ProcessMousePressed(temp, message_flags, false, false);
-}
-
-LRESULT WindowWin::CallDefaultNCActivateHandler(BOOL active) {
- // The DefWindowProc handling for WM_NCACTIVATE renders the classic-look
- // window title bar directly, so we need to use a redraw lock here to prevent
- // it from doing so.
- ScopedRedrawLock lock(this);
- return DefWindowProc(GetNativeView(), WM_NCACTIVATE, active, 0);
-}
-
-void WindowWin::InitClass() {
- static bool initialized = false;
- if (!initialized) {
- resize_cursors_[RC_NORMAL] = LoadCursor(NULL, IDC_ARROW);
- resize_cursors_[RC_VERTICAL] = LoadCursor(NULL, IDC_SIZENS);
- resize_cursors_[RC_HORIZONTAL] = LoadCursor(NULL, IDC_SIZEWE);
- resize_cursors_[RC_NESW] = LoadCursor(NULL, IDC_SIZENESW);
- resize_cursors_[RC_NWSE] = LoadCursor(NULL, IDC_SIZENWSE);
- initialized = true;
- }
-}
-
-namespace {
-// static
-static BOOL CALLBACK WindowCallbackProc(HWND hwnd, LPARAM lParam) {
- WidgetWin* widget = reinterpret_cast<WidgetWin*>(
- win_util::GetWindowUserData(hwnd));
- if (!widget)
- return TRUE;
-
- // If the toplevel HWND is a Window, close it if it's identified as a
- // secondary window.
- Window* window = widget->GetWindow();
- if (window) {
- if (!window->IsAppWindow())
- window->Close();
- } else {
- // If it's not a Window, then close it anyway since it probably is
- // secondary.
- widget->Close();
- }
- return TRUE;
-}
-} // namespace
-
-void Window::CloseAllSecondaryWindows() {
- EnumThreadWindows(GetCurrentThreadId(), WindowCallbackProc, 0);
-}
-
-} // namespace views
diff --git a/chrome/views/window/window_win.h b/chrome/views/window/window_win.h
deleted file mode 100644
index 749ae94..0000000
--- a/chrome/views/window/window_win.h
+++ /dev/null
@@ -1,307 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_VIEWS_WINDOW_WINDOW_WIN_H__
-#define CHROME_VIEWS_WINDOW_WINDOW_WIN_H__
-
-#include "chrome/views/widget/widget_win.h"
-#include "chrome/views/window/client_view.h"
-#include "chrome/views/window/non_client_view.h"
-#include "chrome/views/window/window.h"
-
-namespace gfx {
-class Point;
-class Size;
-};
-
-namespace views {
-
-class Client;
-class WindowDelegate;
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// WindowWin
-//
-// A WindowWin is a WidgetWin that has a caption and a border. The frame is
-// rendered by the operating system.
-//
-///////////////////////////////////////////////////////////////////////////////
-class WindowWin : public WidgetWin,
- public Window {
- public:
- virtual ~WindowWin();
-
- // Show the window with the specified show command.
- void Show(int show_state);
-
- // Retrieve the show state of the window. This is one of the SW_SHOW* flags
- // passed into Windows' ShowWindow method. For normal windows this defaults
- // to SW_SHOWNORMAL, however windows (e.g. the main window) can override this
- // method to provide different values (e.g. retrieve the user's specified
- // show state from the shortcut starutp info).
- virtual int GetShowState() const;
-
- // Executes the specified SC_command.
- void ExecuteSystemMenuCommand(int command);
-
- // Hides the window if it hasn't already been force-hidden, then increments
- // |force_hidden_count_| to prevent it from being shown again until
- // PopForceHidden()) is called.
- void PushForceHidden();
-
- // Decrements |force_hidden_count_| and, if it is now zero, shows the window.
- void PopForceHidden();
-
- // Accessors and setters for various properties.
- HWND owning_window() const { return owning_hwnd_; }
- void set_focus_on_creation(bool focus_on_creation) {
- focus_on_creation_ = focus_on_creation;
- }
-
- // Window overrides:
- virtual gfx::Rect GetBounds() const;
- virtual gfx::Rect GetNormalBounds() const;
- virtual void SetBounds(const gfx::Rect& bounds);
- virtual void SetBounds(const gfx::Rect& bounds,
- gfx::NativeWindow other_window);
- virtual void Show();
- virtual void Activate();
- virtual void Close();
- virtual void Maximize();
- virtual void Minimize();
- virtual void Restore();
- virtual bool IsActive() const;
- virtual bool IsVisible() const;
- virtual bool IsMaximized() const;
- virtual bool IsMinimized() const;
- virtual void SetFullscreen(bool fullscreen);
- virtual bool IsFullscreen() const;
- virtual void EnableClose(bool enable);
- virtual void DisableInactiveRendering();
- virtual void UpdateWindowTitle();
- virtual void UpdateWindowIcon();
- virtual NonClientFrameView* CreateFrameViewForWindow();
- virtual void UpdateFrameAfterFrameChange();
- virtual WindowDelegate* GetDelegate() const;
- virtual NonClientView* GetNonClientView() const;
- virtual ClientView* GetClientView() const;
- virtual gfx::NativeWindow GetNativeWindow() const;
-
- protected:
- friend Window;
-
- // Constructs the WindowWin. |window_delegate| cannot be NULL.
- explicit WindowWin(WindowDelegate* window_delegate);
-
- // Create the Window.
- // If parent is NULL, this WindowWin is top level on the desktop.
- // If |bounds| is empty, the view is queried for its preferred size and
- // centered on screen.
- virtual void Init(HWND parent, const gfx::Rect& bounds);
-
- // Sizes the window to the default size specified by its ClientView.
- virtual void SizeWindowToDefault();
-
- // Shows the system menu at the specified screen point.
- void RunSystemMenu(const gfx::Point& point);
-
- // Overridden from WidgetWin:
- virtual void OnActivate(UINT action, BOOL minimized, HWND window);
- virtual void OnActivateApp(BOOL active, DWORD thread_id);
- virtual LRESULT OnAppCommand(HWND window, short app_command, WORD device,
- int keystate);
- virtual void OnCommand(UINT notification_code, int command_id, HWND window);
- virtual void OnDestroy();
- virtual LRESULT OnDwmCompositionChanged(UINT msg, WPARAM w_param,
- LPARAM l_param);
- virtual void OnFinalMessage(HWND window);
- virtual void OnGetMinMaxInfo(MINMAXINFO* minmax_info);
- virtual void OnInitMenu(HMENU menu);
- virtual void OnMouseLeave();
- virtual LRESULT OnNCActivate(BOOL active);
- virtual LRESULT OnNCCalcSize(BOOL mode, LPARAM l_param);
- virtual LRESULT OnNCHitTest(const CPoint& point);
- virtual void OnNCPaint(HRGN rgn);
- virtual void OnNCLButtonDown(UINT ht_component, const CPoint& point);
- virtual void OnNCRButtonDown(UINT ht_component, const CPoint& point);
- virtual LRESULT OnNCUAHDrawCaption(UINT msg, WPARAM w_param, LPARAM l_param);
- virtual LRESULT OnNCUAHDrawFrame(UINT msg, WPARAM w_param, LPARAM l_param);
- virtual LRESULT OnSetCursor(HWND window, UINT hittest_code, UINT message);
- virtual LRESULT OnSetIcon(UINT size_type, HICON new_icon);
- virtual LRESULT OnSetText(const wchar_t* text);
- virtual void OnSettingChange(UINT flags, const wchar_t* section);
- virtual void OnSize(UINT size_param, const CSize& new_size);
- virtual void OnSysCommand(UINT notification_code, CPoint click);
- virtual void OnWindowPosChanging(WINDOWPOS* window_pos);
- virtual Window* GetWindow() { return this; }
- virtual const Window* GetWindow() const { return this; }
-
- // Accessor for disable_inactive_rendering_.
- bool disable_inactive_rendering() const {
- return disable_inactive_rendering_;
- }
-
- private:
- // Information saved before going into fullscreen mode, used to restore the
- // window afterwards.
- struct SavedWindowInfo {
- bool maximized;
- LONG style;
- LONG ex_style;
- RECT window_rect;
- };
-
- // Set the window as modal (by disabling all the other windows).
- void BecomeModal();
-
- // Sets-up the focus manager with the view that should have focus when the
- // window is shown the first time. If NULL is returned, the focus goes to the
- // button if there is one, otherwise the to the Cancel button.
- void SetInitialFocus();
-
- // Place and size the window when it is created. |create_bounds| are the
- // bounds used when the window was created.
- void SetInitialBounds(const gfx::Rect& create_bounds);
-
- // Restore saved always on stop state and add the always on top system menu
- // if needed.
- void InitAlwaysOnTopState();
-
- // Add an item for "Always on Top" to the System Menu.
- void AddAlwaysOnTopSystemMenuItem();
-
- // If necessary, enables all ancestors.
- void RestoreEnabledIfNecessary();
-
- // Update the window style to reflect the always on top state.
- void AlwaysOnTopChanged();
-
- // Calculate the appropriate window styles for this window.
- DWORD CalculateWindowStyle();
- DWORD CalculateWindowExStyle();
-
- // Asks the delegate if any to save the window's location and size.
- void SaveWindowPosition();
-
- // Lock or unlock the window from being able to redraw itself in response to
- // updates to its invalid region.
- class ScopedRedrawLock;
- void LockUpdates();
- void UnlockUpdates();
-
- // Stops ignoring SetWindowPos() requests (see below).
- void StopIgnoringPosChanges() { ignore_window_pos_changes_ = false; }
-
- // Resets the window region for the current window bounds if necessary.
- // If |force| is true, the window region is reset to NULL even for native
- // frame windows.
- void ResetWindowRegion(bool force);
-
- // Converts a non-client mouse down message to a regular ChromeViews event
- // and handle it. |point| is the mouse position of the message in screen
- // coords. |flags| are flags that would be passed with a WM_L/M/RBUTTON*
- // message and relate to things like which button was pressed. These are
- // combined with flags relating to the current key state.
- void ProcessNCMousePress(const CPoint& point, int flags);
-
- // Calls the default WM_NCACTIVATE handler with the specified activation
- // value, safely wrapping the call in a ScopedRedrawLock to prevent frame
- // flicker.
- LRESULT CallDefaultNCActivateHandler(BOOL active);
-
- // Static resource initialization.
- static void InitClass();
- enum ResizeCursor {
- RC_NORMAL = 0, RC_VERTICAL, RC_HORIZONTAL, RC_NESW, RC_NWSE
- };
- static HCURSOR resize_cursors_[6];
-
- // Our window delegate (see Init method for documentation).
- WindowDelegate* window_delegate_;
-
- // The View that provides the non-client area of the window (title bar,
- // window controls, sizing borders etc). To use an implementation other than
- // the default, this class must be subclassed and this value set to the
- // desired implementation before calling |Init|.
- NonClientView* non_client_view_;
-
- // Whether we should SetFocus() on a newly created window after
- // Init(). Defaults to true.
- bool focus_on_creation_;
-
- // We need to save the parent window that spawned us, since GetParent()
- // returns NULL for dialogs.
- HWND owning_hwnd_;
-
- // The smallest size the window can be.
- CSize minimum_size_;
-
- // Whether or not the window is modal. This comes from the delegate and is
- // cached at Init time to avoid calling back to the delegate from the
- // destructor.
- bool is_modal_;
-
- // Whether all ancestors have been enabled. This is only used if is_modal_ is
- // true.
- bool restored_enabled_;
-
- // Whether the window is currently always on top.
- bool is_always_on_top_;
-
- // We need to own the text of the menu, the Windows API does not copy it.
- std::wstring always_on_top_menu_text_;
-
- // True if we're in fullscreen mode.
- bool fullscreen_;
-
- // Saved window information from before entering fullscreen mode.
- SavedWindowInfo saved_window_info_;
-
- // Set to true if the window is in the process of closing .
- bool window_closed_;
-
- // True when the window should be rendered as active, regardless of whether
- // or not it actually is.
- bool disable_inactive_rendering_;
-
- // True if this window is the active top level window.
- bool is_active_;
-
- // True if updates to this window are currently locked.
- bool lock_updates_;
-
- // The window styles of the window before updates were locked.
- DWORD saved_window_style_;
-
- // The saved maximized state for this window. See note in SetInitialBounds
- // that explains why we save this.
- bool saved_maximized_state_;
-
- // When true, this flag makes us discard incoming SetWindowPos() requests that
- // only change our position/size. (We still allow changes to Z-order,
- // activation, etc.)
- bool ignore_window_pos_changes_;
-
- // The following factory is used to ignore SetWindowPos() calls for short time
- // periods.
- ScopedRunnableMethodFactory<WindowWin> ignore_pos_changes_factory_;
-
- // If this is greater than zero, we should prevent attempts to make the window
- // visible when we handle WM_WINDOWPOSCHANGING. Some calls like
- // ShowWindow(SW_RESTORE) make the window visible in addition to restoring it,
- // when all we want to do is restore it.
- int force_hidden_count_;
-
- // The last-seen monitor containing us, and its rect and work area. These are
- // used to catch updates to the rect and work area and react accordingly.
- HMONITOR last_monitor_;
- gfx::Rect last_monitor_rect_, last_work_area_;
-
- DISALLOW_COPY_AND_ASSIGN(WindowWin);
-};
-
-} // namespace views
-
-#endif // CHROME_VIEWS_WINDOW_WINDOW_WIN_H__