mirror of
https://github.com/classilla/tenfourfox.git
synced 2024-09-30 18:56:40 +00:00
#405: picker init and callback
This commit is contained in:
parent
582f5a0deb
commit
2f7aef6681
@ -542,6 +542,39 @@ nsColorPickerShownCallback::Done(const nsAString& aColor)
|
|||||||
|
|
||||||
NS_IMPL_ISUPPORTS(nsColorPickerShownCallback, nsIColorPickerShownCallback)
|
NS_IMPL_ISUPPORTS(nsColorPickerShownCallback, nsIColorPickerShownCallback)
|
||||||
|
|
||||||
|
HTMLInputElement::nsDatePickerShownCallback::nsDatePickerShownCallback(
|
||||||
|
HTMLInputElement* aInput, nsIDatePicker* aDatePicker)
|
||||||
|
: mDatePicker(aDatePicker)
|
||||||
|
, mInput(aInput)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
HTMLInputElement::nsDatePickerShownCallback::Done(int16_t aResult)
|
||||||
|
{
|
||||||
|
mInput->PickerClosed();
|
||||||
|
|
||||||
|
if (aResult == nsIDatePicker::returnCancel) {
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsAutoString date;
|
||||||
|
nsresult rv = mDatePicker->GetSelectedDate(date);
|
||||||
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
|
// The text control frame (if there is one) isn't going to send a change
|
||||||
|
// event because it will think this is done by a script.
|
||||||
|
// So, we can safely send one by ourself.
|
||||||
|
mInput->SetValue(date); // set value
|
||||||
|
return nsContentUtils::DispatchTrustedEvent(mInput->OwnerDoc(),
|
||||||
|
static_cast<nsIDOMHTMLInputElement*>(mInput.get()),
|
||||||
|
NS_LITERAL_STRING("change"), true,
|
||||||
|
false);
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMPL_ISUPPORTS(HTMLInputElement::nsDatePickerShownCallback,
|
||||||
|
nsIDatePickerShownCallback)
|
||||||
|
|
||||||
bool
|
bool
|
||||||
HTMLInputElement::IsPopupBlocked() const
|
HTMLInputElement::IsPopupBlocked() const
|
||||||
{
|
{
|
||||||
@ -578,8 +611,43 @@ HTMLInputElement::InitTimePicker()
|
|||||||
nsresult
|
nsresult
|
||||||
HTMLInputElement::InitDatePicker()
|
HTMLInputElement::InitDatePicker()
|
||||||
{
|
{
|
||||||
NS_WARNING("InitDatePicker NYI");
|
if (mPickerRunning) {
|
||||||
return NS_ERROR_FAILURE;
|
NS_WARNING("Just one nsIDatePicker is allowed");
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsCOMPtr<nsIDocument> doc = OwnerDoc();
|
||||||
|
|
||||||
|
nsCOMPtr<nsPIDOMWindow> win = doc->GetWindow();
|
||||||
|
if (!win) {
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IsPopupBlocked()) {
|
||||||
|
win->FirePopupBlockedEvent(doc, nullptr, EmptyString(), EmptyString());
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsCOMPtr<nsIDatePicker> datePicker = do_CreateInstance("@mozilla.org/datepicker;1");
|
||||||
|
if (!datePicker) {
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsAutoString initialValue;
|
||||||
|
GetValueInternal(initialValue);
|
||||||
|
nsresult rv = datePicker->Init(win, EmptyString()); // title NYI
|
||||||
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
rv = datePicker->SetDefaultDate(initialValue);
|
||||||
|
|
||||||
|
nsCOMPtr<nsIDatePickerShownCallback> callback =
|
||||||
|
new nsDatePickerShownCallback(this, datePicker);
|
||||||
|
|
||||||
|
rv = datePicker->Open(callback);
|
||||||
|
if (NS_SUCCEEDED(rv)) {
|
||||||
|
mPickerRunning = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
#include "mozilla/dom/HTMLInputElementBinding.h"
|
#include "mozilla/dom/HTMLInputElementBinding.h"
|
||||||
#include "mozilla/dom/Promise.h"
|
#include "mozilla/dom/Promise.h"
|
||||||
#include "nsIFilePicker.h"
|
#include "nsIFilePicker.h"
|
||||||
|
#include "nsIDatePicker.h"
|
||||||
#include "nsIContentPrefService2.h"
|
#include "nsIContentPrefService2.h"
|
||||||
#include "mozilla/Decimal.h"
|
#include "mozilla/Decimal.h"
|
||||||
#include "nsContentUtils.h"
|
#include "nsContentUtils.h"
|
||||||
@ -1461,6 +1462,24 @@ private:
|
|||||||
nsCOMPtr<nsIFilePicker> mFilePicker;
|
nsCOMPtr<nsIFilePicker> mFilePicker;
|
||||||
RefPtr<HTMLInputElement> mInput;
|
RefPtr<HTMLInputElement> mInput;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class nsDatePickerShownCallback
|
||||||
|
: public nsIDatePickerShownCallback
|
||||||
|
{
|
||||||
|
virtual ~nsDatePickerShownCallback()
|
||||||
|
{ }
|
||||||
|
|
||||||
|
public:
|
||||||
|
nsDatePickerShownCallback(HTMLInputElement* aInput,
|
||||||
|
nsIDatePicker* aDatePicker);
|
||||||
|
NS_DECL_ISUPPORTS
|
||||||
|
|
||||||
|
NS_IMETHOD Done(int16_t aResult) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
nsCOMPtr<nsIDatePicker> mDatePicker;
|
||||||
|
RefPtr<HTMLInputElement> mInput;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace dom
|
} // namespace dom
|
||||||
|
Loading…
Reference in New Issue
Block a user