Chromium Code Reviews| Index: chrome/browser/autocomplete/autocomplete_edit_view_views.h |
| diff --git a/chrome/browser/autocomplete/autocomplete_edit_view_views.h b/chrome/browser/autocomplete/autocomplete_edit_view_views.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..691545d6421775bd3462557b5d5d25cafbe37729 |
| --- /dev/null |
| +++ b/chrome/browser/autocomplete/autocomplete_edit_view_views.h |
| @@ -0,0 +1,205 @@ |
| +// Copyright (c) 2011 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_BROWSER_AUTOCOMPLETE_AUTOCOMPLETE_EDIT_VIEW_VIEWS_H_ |
| +#define CHROME_BROWSER_AUTOCOMPLETE_AUTOCOMPLETE_EDIT_VIEW_VIEWS_H_ |
| +#pragma once |
| + |
| +#include <string> |
| + |
| +#include "base/basictypes.h" |
| +#include "base/scoped_ptr.h" |
| +#include "chrome/browser/autocomplete/autocomplete_edit_view.h" |
| +#include "chrome/browser/ui/toolbar/toolbar_model.h" |
| +#include "chrome/common/notification_observer.h" |
| +#include "chrome/common/notification_registrar.h" |
| +#include "chrome/common/page_transition_types.h" |
| +#include "views/controls/textfield/textfield.h" |
| +#include "views/view.h" |
| +#include "webkit/glue/window_open_disposition.h" |
| + |
| +class AutocompleteEditController; |
| +class AutocompleteEditModel; |
| +class AutocompletePopupView; |
| +class Profile; |
| +class TabContents; |
| + |
| +// Views-implementation of AutocompleteEditView. This is based on |
| +// gtk implementation. The following features are not yet supported. |
| +// |
| +// IME supoprt. |
| +// LTR support. |
| +// Selection behavior. |
| +// Cut,copy and paste behavior. |
| +// URL styles (strikestrough insecure scheme, emphasize host). |
| +// Custom context menu for omnibox. |
| +class AutocompleteEditViewViews : public views::View, |
| + public AutocompleteEditView, |
| + public NotificationObserver, |
| + public views::Textfield::Controller { |
| + public: |
| + AutocompleteEditViewViews(AutocompleteEditController* controller, |
| + ToolbarModel* toolbar_model, |
| + Profile* profile, |
| + CommandUpdater* command_updater, |
| + bool popup_window_mode, |
| + const views::View* location_bar); |
| + virtual ~AutocompleteEditViewViews(); |
| + |
| + // Initialize, create the underlying views, etc; |
|
Peter Kasting
2011/01/20 19:44:37
Nit: ; -> .
|
| + void Init(); |
| + |
| + // Sets the colors of the text view according to the theme. |
| + void SetBaseColor(); |
| + |
| + // Called after key even is handled either by HandleKeyEvent or by Textfield. |
|
Peter Kasting
2011/01/20 19:44:37
Nit: even -> event
|
| + bool HandleAfterKeyEvent(const views::KeyEvent& event, bool handled); |
| + |
| + // Called when KeyRelease event is generated on textfield. |
| + bool HandleKeyReleaseEvent(const views::KeyEvent& event); |
| + |
| + // Called when Focus is set/unset on textfield. |
| + void HandleFocusIn(); |
| + void HandleFocusOut(); |
| + |
| + // Implements views::View |
|
Peter Kasting
2011/01/20 19:44:37
Nit: The comments that demarcate the different par
|
| + virtual bool OnMousePressed(const views::MouseEvent& event); |
| + |
| + // Implement the AutocompleteEditView interface. |
| + virtual AutocompleteEditModel* model(); |
| + virtual const AutocompleteEditModel* model() const; |
| + |
|
Peter Kasting
2011/01/20 19:44:37
Nit: Unnecessary blank lines
|
| + virtual void SaveStateToTab(TabContents* tab); |
| + |
| + virtual void Update(const TabContents* tab_for_state_restoring); |
| + |
| + virtual void OpenURL(const GURL& url, |
| + WindowOpenDisposition disposition, |
| + PageTransition::Type transition, |
| + const GURL& alternate_nav_url, |
| + size_t selected_line, |
| + const std::wstring& keyword); |
| + |
| + virtual std::wstring GetText() const; |
| + |
| + virtual bool IsEditingOrEmpty() const; |
| + virtual int GetIcon() const; |
| + virtual void SetUserText(const std::wstring& text); |
| + virtual void SetUserText(const std::wstring& text, |
| + const std::wstring& display_text, |
| + bool update_popup); |
| + virtual void SetWindowTextAndCaretPos(const std::wstring& text, |
| + size_t caret_pos); |
| + virtual void SetForcedQuery(); |
| + virtual bool IsSelectAll(); |
| + virtual bool DeleteAtEndPressed(); |
| + virtual void GetSelectionBounds(std::wstring::size_type* start, |
| + std::wstring::size_type* end); |
| + virtual void SelectAll(bool reversed); |
| + virtual void RevertAll(); |
| + virtual void UpdatePopup(); |
| + virtual void ClosePopup(); |
| + virtual void SetFocus(); |
| + virtual void OnTemporaryTextMaybeChanged(const std::wstring& display_text, |
| + bool save_original_selection); |
| + virtual bool OnInlineAutocompleteTextMaybeChanged( |
| + const std::wstring& display_text, size_t user_text_length); |
| + virtual void OnRevertTemporaryText(); |
| + virtual void OnBeforePossibleChange(); |
| + virtual bool OnAfterPossibleChange(); |
| + virtual gfx::NativeView GetNativeView() const; |
| + virtual CommandUpdater* GetCommandUpdater(); |
| + virtual views::View* AddToView(views::View* parent); |
| + virtual int TextWidth() const; |
| + virtual bool IsImeComposing() const; |
| + virtual bool CommitInstantSuggestion(const std::wstring& typed_text, |
| + const std::wstring& suggested_text); |
| + virtual void SetInstantSuggestion(const string16& input); |
| + |
| + // Overridden from NotificationObserver: |
| + virtual void Observe(NotificationType type, |
| + const NotificationSource& source, |
| + const NotificationDetails& details); |
| + |
| + // Overridden from Textfield::Controller |
| + virtual void ContentsChanged(views::Textfield* sender, |
| + const string16& new_contents); |
| + virtual bool HandleKeyEvent(views::Textfield* sender, |
| + const views::KeyEvent& key_event); |
| + |
| + private: |
| + // Return the number of characers in the current buffer. |
| + size_t GetTextLength() const; |
| + |
| + // Try to parse the current text as a URL and colorize the components. |
| + void EmphasizeURLComponents(); |
| + |
| + // Internally invoked whenever the text changes in some way. |
| + void TextChanged(); |
| + |
| + // Update the field with |text| and set the selection. |
| + void SetTextAndSelectedRange(const std::wstring& text, |
| + const views::TextRange& range); |
| + |
| + // Returns the selected text. |
| + string16 GetSelectedText() const; |
| + |
| + // Selects the text given by |caret| and |end|. |
| + void SelectRange(size_t caret, size_t end); |
| + |
| + views::Textfield* textfield_; |
| + |
| + scoped_ptr<AutocompleteEditModel> model_; |
| + scoped_ptr<AutocompletePopupView> popup_view_; |
| + AutocompleteEditController* controller_; |
| + ToolbarModel* toolbar_model_; |
| + |
| + // The object that handles additional command functionality exposed on the |
| + // edit, such as invoking the keyword editor. |
| + CommandUpdater* command_updater_; |
| + |
| + // When true, the location bar view is read only and also is has a slightly |
| + // different presentation (smaller font size). This is used for popups. |
| + bool popup_window_mode_; |
| + |
| + ToolbarModel::SecurityLevel security_level_; |
| + |
| + // Selection at the point where the user started using the |
| + // arrows to move around in the popup. |
| + views::TextRange saved_temporary_selection_; |
| + |
| + // Tracking state before and after a possible change. |
| + std::wstring text_before_change_; |
| + views::TextRange sel_before_change_; |
| + |
| + // TODO(oshima): following flags are copied from gtk implementation. |
| + // It should be possible to refactor this class to simplify flags and |
| + // logic. I'll work on this refactoring once all features are completed. |
| + |
| + // Indicates whether the IME changed the text. It's possible for the IME to |
| + // handle a key event but not change the text contents (e.g., when pressing |
| + // shift+del with no selection). |
| + bool text_changed_; |
| + |
| + // Was delete pressed? |
| + bool delete_was_pressed_; |
| + |
| + // Was the delete key pressed with an empty selection at the end of the edit? |
| + bool delete_at_end_pressed_; |
| + |
| + // Indicates if we are handling a key press event. |
| + bool handling_key_press_; |
| + |
| + // Indicates if omnibox's content maybe changed by a key press event, so that |
| + // we need to call OnAfterPossibleChange() after handling the event. |
| + // This flag should be set for changes directly caused by a key press event, |
| + // including changes to content text, selection range and preedit string. |
| + // Changes caused by function calls like SetUserText() should not affect this |
| + // flag. |
| + bool content_maybe_changed_by_key_press_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(AutocompleteEditViewViews); |
| +}; |
| + |
| +#endif // CHROME_BROWSER_AUTOCOMPLETE_AUTOCOMPLETE_EDIT_VIEW_VIEWS_H_ |