This source file includes following definitions.
- m_pickerIndicatorOwner
- create
- createRenderer
- defaultEventHandler
- willRespondToMouseClickEvents
- didChooseValue
- didChooseValue
- didEndChooser
- openPopup
- closePopup
- detach
- isPickerIndicatorElement
#include "config.h"
#if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
#include "core/html/shadow/PickerIndicatorElement.h"
#include "core/events/Event.h"
#include "core/html/shadow/ShadowElementNames.h"
#include "core/page/Chrome.h"
#include "core/page/Page.h"
#include "core/rendering/RenderDetailsMarker.h"
using namespace WTF::Unicode;
namespace WebCore {
using namespace HTMLNames;
inline PickerIndicatorElement::PickerIndicatorElement(Document& document, PickerIndicatorOwner& pickerIndicatorOwner)
: HTMLDivElement(document)
, m_pickerIndicatorOwner(&pickerIndicatorOwner)
{
}
PassRefPtr<PickerIndicatorElement> PickerIndicatorElement::create(Document& document, PickerIndicatorOwner& pickerIndicatorOwner)
{
RefPtr<PickerIndicatorElement> element = adoptRef(new PickerIndicatorElement(document, pickerIndicatorOwner));
element->setShadowPseudoId(AtomicString("-webkit-calendar-picker-indicator", AtomicString::ConstructFromLiteral));
element->setAttribute(idAttr, ShadowElementNames::pickerIndicator());
return element.release();
}
PickerIndicatorElement::~PickerIndicatorElement()
{
closePopup();
ASSERT(!m_chooser);
}
RenderObject* PickerIndicatorElement::createRenderer(RenderStyle*)
{
return new RenderDetailsMarker(this);
}
void PickerIndicatorElement::defaultEventHandler(Event* event)
{
if (!renderer())
return;
if (!m_pickerIndicatorOwner || m_pickerIndicatorOwner->isPickerIndicatorOwnerDisabledOrReadOnly())
return;
if (event->type() == EventTypeNames::click) {
openPopup();
event->setDefaultHandled();
}
if (!event->defaultHandled())
HTMLDivElement::defaultEventHandler(event);
}
bool PickerIndicatorElement::willRespondToMouseClickEvents()
{
if (renderer() && m_pickerIndicatorOwner && !m_pickerIndicatorOwner->isPickerIndicatorOwnerDisabledOrReadOnly())
return true;
return HTMLDivElement::willRespondToMouseClickEvents();
}
void PickerIndicatorElement::didChooseValue(const String& value)
{
if (!m_pickerIndicatorOwner)
return;
m_pickerIndicatorOwner->pickerIndicatorChooseValue(value);
}
void PickerIndicatorElement::didChooseValue(double value)
{
if (m_pickerIndicatorOwner)
m_pickerIndicatorOwner->pickerIndicatorChooseValue(value);
}
void PickerIndicatorElement::didEndChooser()
{
m_chooser.clear();
}
void PickerIndicatorElement::openPopup()
{
if (m_chooser)
return;
if (!document().page())
return;
if (!m_pickerIndicatorOwner)
return;
DateTimeChooserParameters parameters;
if (!m_pickerIndicatorOwner->setupDateTimeChooserParameters(parameters))
return;
m_chooser = document().page()->chrome().openDateTimeChooser(this, parameters);
}
void PickerIndicatorElement::closePopup()
{
if (!m_chooser)
return;
m_chooser->endChooser();
}
void PickerIndicatorElement::detach(const AttachContext& context)
{
closePopup();
HTMLDivElement::detach(context);
}
bool PickerIndicatorElement::isPickerIndicatorElement() const
{
return true;
}
}
#endif