1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
|
/*
* Copyright (C) 2006, 2007 Apple Inc. All rights reserved.s
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public License
* along with this library; see the file COPYING.LIB. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*
*/
#ifndef RenderTextControl_h
#define RenderTextControl_h
#include "PopupMenuClient.h"
#include "RenderBlock.h"
#include "Timer.h"
namespace WebCore {
class FontSelector;
class HTMLTextFieldInnerElement;
class HTMLTextFieldInnerTextElement;
class HTMLSearchFieldCancelButtonElement;
class HTMLSearchFieldResultsButtonElement;
class SearchPopupMenu;
class Selection;
class RenderTextControl : public RenderBlock, private PopupMenuClient {
public:
RenderTextControl(Node*, bool multiLine);
virtual ~RenderTextControl();
virtual const char* renderName() const { return "RenderTextControl"; }
virtual bool hasControlClip() const { return m_cancelButton; }
virtual IntRect controlClipRect(int tx, int ty) const;
virtual void calcHeight();
virtual void calcPrefWidths();
virtual void removeLeftoverAnonymousBlock(RenderBlock*) { }
virtual void setStyle(RenderStyle*);
virtual void updateFromElement();
virtual bool canHaveChildren() const { return false; }
virtual short baselinePosition(bool firstLine, bool isRootLineBox) const;
virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, int x, int y, int tx, int ty, HitTestAction);
virtual void layout();
virtual bool avoidsFloats() const { return true; }
virtual void paint(PaintInfo&, int tx, int ty);
virtual bool isEdited() const { return m_dirty; }
virtual void setEdited(bool isEdited) { m_dirty = isEdited; }
virtual bool isTextField() const { return !m_multiLine; }
virtual bool isTextArea() const { return m_multiLine; }
bool isUserEdited() const { return m_userEdited; }
void setUserEdited(bool isUserEdited) { m_userEdited = isUserEdited; }
int selectionStart();
int selectionEnd();
void setSelectionStart(int);
void setSelectionEnd(int);
void select();
void setSelectionRange(int start, int end);
Selection selection(int start, int end) const;
void subtreeHasChanged();
String text();
String textWithHardLineBreaks();
void forwardEvent(Event*);
void selectionChanged(bool userTriggered);
virtual bool shouldAutoscroll() const { return true; }
virtual void autoscroll();
// Subclassed to forward to our inner div.
virtual int scrollLeft() const;
virtual int scrollTop() const;
virtual int scrollWidth() const;
virtual int scrollHeight() const;
virtual void setScrollLeft(int);
virtual void setScrollTop(int);
virtual bool scroll(ScrollDirection, ScrollGranularity, float multiplier = 1.0f);
virtual bool isScrollable() const;
VisiblePosition visiblePositionForIndex(int index);
int indexForVisiblePosition(const VisiblePosition&);
void addSearchResult();
bool popupIsVisible() const { return m_searchPopupIsVisible; }
void showPopup();
void hidePopup();
void stopSearchEventTimer();
bool placeholderIsVisible() const { return m_placeholderVisible; }
virtual void capsLockStateMayHaveChanged();
private:
// PopupMenuClient methods
virtual void valueChanged(unsigned listIndex, bool fireEvents = true);
virtual String itemText(unsigned listIndex) const;
virtual bool itemIsEnabled(unsigned listIndex) const;
virtual Color itemBackgroundColor(unsigned listIndex) const;
virtual RenderStyle* itemStyle(unsigned listIndex) const;
virtual RenderStyle* clientStyle() const;
virtual Document* clientDocument() const;
virtual int clientInsetLeft() const;
virtual int clientInsetRight() const;
virtual int clientPaddingLeft() const;
virtual int clientPaddingRight() const;
virtual int listSize() const;
virtual int selectedIndex() const;
virtual bool itemIsSeparator(unsigned listIndex) const;
virtual bool itemIsLabel(unsigned listIndex) const;
virtual bool itemIsSelected(unsigned listIndex) const;
virtual void setTextFromItem(unsigned listIndex);
virtual bool shouldPopOver() const { return false; }
virtual bool valueShouldChangeOnHotTrack() const { return false; }
virtual FontSelector* fontSelector() const;
RenderStyle* createInnerBlockStyle(RenderStyle* startStyle);
RenderStyle* createInnerTextStyle(RenderStyle* startStyle);
RenderStyle* createCancelButtonStyle(RenderStyle* startStyle);
RenderStyle* createResultsButtonStyle(RenderStyle* startStyle);
void updatePlaceholder();
void createSubtreeIfNeeded();
void updateCancelButtonVisibility(RenderStyle*);
const AtomicString& autosaveName() const;
void startSearchEventTimer();
void searchEventTimerFired(Timer<RenderTextControl>*);
String finishText(Vector<UChar>&) const;
RefPtr<HTMLTextFieldInnerElement> m_innerBlock;
RefPtr<HTMLTextFieldInnerTextElement> m_innerText;
RefPtr<HTMLSearchFieldResultsButtonElement> m_resultsButton;
RefPtr<HTMLSearchFieldCancelButtonElement> m_cancelButton;
bool m_dirty;
bool m_multiLine;
bool m_placeholderVisible;
bool m_userEdited;
bool m_shouldDrawCapsLockIndicator;
RefPtr<SearchPopupMenu> m_searchPopup;
bool m_searchPopupIsVisible;
mutable Vector<String> m_recentSearches;
Timer<RenderTextControl> m_searchEventTimer;
};
} // namespace WebCore
#endif // RenderTextControl_h
|