mirror of
https://github.com/pocoproject/poco.git
synced 2025-04-16 15:01:15 +02:00
added new events to combobox, rendering fixes IE
This commit is contained in:
parent
b74e41b626
commit
52ab7d01ca
@ -60,6 +60,7 @@ class ExtJS_API ComboBoxCellRenderer: public Poco::WebWidgets::Renderer
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static const std::string EV_SELECTED;
|
static const std::string EV_SELECTED;
|
||||||
|
static const std::string EV_AFTERLOAD;
|
||||||
|
|
||||||
ComboBoxCellRenderer();
|
ComboBoxCellRenderer();
|
||||||
/// Creates the ComboBoxCellRenderer.
|
/// Creates the ComboBoxCellRenderer.
|
||||||
@ -81,6 +82,9 @@ private:
|
|||||||
static Poco::WebWidgets::JSDelegate createSelectedServerCallback(const ComboBox* pCombo);
|
static Poco::WebWidgets::JSDelegate createSelectedServerCallback(const ComboBox* pCombo);
|
||||||
/// Adds a server callback for the selected event. The method signature for select is
|
/// Adds a server callback for the selected event. The method signature for select is
|
||||||
/// select : ( Ext.form.ComboBox combo, Ext.data.Record record, Number index )
|
/// select : ( Ext.form.ComboBox combo, Ext.data.Record record, Number index )
|
||||||
|
|
||||||
|
static Poco::WebWidgets::JSDelegate createAfterLoadServerCallback(const ComboBox* pCombo);
|
||||||
|
/// Create a server callback for afterLoad of ComboBox list
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -53,6 +53,7 @@ namespace ExtJS {
|
|||||||
|
|
||||||
|
|
||||||
const std::string ComboBoxCellRenderer::EV_SELECTED("select");
|
const std::string ComboBoxCellRenderer::EV_SELECTED("select");
|
||||||
|
const std::string ComboBoxCellRenderer::EV_AFTERLOAD("load");
|
||||||
|
|
||||||
|
|
||||||
ComboBoxCellRenderer::ComboBoxCellRenderer()
|
ComboBoxCellRenderer::ComboBoxCellRenderer()
|
||||||
@ -76,6 +77,16 @@ JSDelegate ComboBoxCellRenderer::createSelectedServerCallback(const ComboBox* pC
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Poco::WebWidgets::JSDelegate ComboBoxCellRenderer::createAfterLoadServerCallback(const ComboBox* pCombo)
|
||||||
|
{
|
||||||
|
poco_check_ptr (pCombo);
|
||||||
|
static const std::string signature("function(aStore, recs, op)");
|
||||||
|
std::map<std::string, std::string> addParams;
|
||||||
|
addParams.insert(std::make_pair(RequestHandler::KEY_EVID, ComboBoxCell::EV_AFTERLOAD));
|
||||||
|
return Utility::createServerCallback(signature, addParams, pCombo->id(), pCombo->afterLoad.getOnSuccess(), pCombo->afterLoad.getOnFailure());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void ComboBoxCellRenderer::renderHead(const Renderable* pRenderable, const RenderContext& context, std::ostream& ostr)
|
void ComboBoxCellRenderer::renderHead(const Renderable* pRenderable, const RenderContext& context, std::ostream& ostr)
|
||||||
{
|
{
|
||||||
poco_assert_dbg (pRenderable != 0);
|
poco_assert_dbg (pRenderable != 0);
|
||||||
@ -95,25 +106,31 @@ void ComboBoxCellRenderer::renderHead(const Renderable* pRenderable, const Rende
|
|||||||
|
|
||||||
std::string url(Utility::createURI(addParams, pOwner->id()));
|
std::string url(Utility::createURI(addParams, pOwner->id()));
|
||||||
ostr << url << "}),";
|
ostr << url << "}),";
|
||||||
ostr << "reader:new Ext.data.ArrayReader()})";
|
ostr << "reader:new Ext.data.ArrayReader()";
|
||||||
|
if (pComboOwner && pComboOwner->afterLoad.hasJavaScriptCode())
|
||||||
|
{
|
||||||
|
ostr << ",listeners:{";
|
||||||
|
Utility::writeJSEvent(ostr, EV_AFTERLOAD, pComboOwner->afterLoad, &ComboBoxCellRenderer::createAfterLoadServerCallback, pComboOwner);
|
||||||
|
ostr << "}";
|
||||||
|
}
|
||||||
|
ostr << "})"; // end SimpleStore
|
||||||
ostr << ",displayField:'d',typeAhead:true,triggerAction:'all'";
|
ostr << ",displayField:'d',typeAhead:true,triggerAction:'all'";
|
||||||
|
|
||||||
std::string tooltip (pCell->getToolTip());
|
std::string tooltip (pCell->getToolTip());
|
||||||
|
|
||||||
if (pComboOwner && pComboOwner->selected.hasJavaScriptCode())
|
if (pComboOwner && (pComboOwner->selected.hasJavaScriptCode() || !tooltip.empty()))
|
||||||
{
|
{
|
||||||
ostr << ",listeners:{";
|
ostr << ",listeners:{";
|
||||||
Utility::writeJSEvent(ostr, EV_SELECTED, pComboOwner->selected, &ComboBoxCellRenderer::createSelectedServerCallback, pComboOwner);
|
bool written = Utility::writeJSEvent(ostr, EV_SELECTED, pComboOwner->selected, &ComboBoxCellRenderer::createSelectedServerCallback, pComboOwner);
|
||||||
|
|
||||||
if (!tooltip.empty())
|
if (!tooltip.empty())
|
||||||
ostr << ",render:function(c){Ext.QuickTips.register({target:c.getEl(),text:'" << Utility::safe(tooltip) << "'});}";
|
{
|
||||||
|
if (written)
|
||||||
|
ostr << ",";
|
||||||
|
ostr << "render:function(c){Ext.QuickTips.register({target:c.getEl(),text:'" << Utility::safe(tooltip) << "'});}";
|
||||||
|
}
|
||||||
ostr << "}";
|
ostr << "}";
|
||||||
}
|
}
|
||||||
else if (!tooltip.empty())
|
|
||||||
{
|
|
||||||
ostr << ",listeners:{";
|
|
||||||
ostr << "render:function(c){Ext.QuickTips.register({target:c.getEl(),text:'" << Utility::safe(tooltip) << "'});}}";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
ostr << "})";
|
ostr << "})";
|
||||||
pCell->beforeLoad += Poco::delegate(&ComboBoxCellRenderer::onLoad);
|
pCell->beforeLoad += Poco::delegate(&ComboBoxCellRenderer::onLoad);
|
||||||
|
@ -69,6 +69,7 @@ void LayoutRenderer::renderLayoutHead(const Layout* pLayout, const RenderContext
|
|||||||
// the parent is not a panel
|
// the parent is not a panel
|
||||||
// assume that the direct parent is a panel
|
// assume that the direct parent is a panel
|
||||||
ostr << "new Ext.Panel({border:false,bodyBorder:false,";
|
ostr << "new Ext.Panel({border:false,bodyBorder:false,";
|
||||||
|
ostr << "id:'" << pLayout->id() << "',";
|
||||||
renderParameters(pLayout, context, ostr, layoutId, layoutConfig, cols, horPad, vertPad);
|
renderParameters(pLayout, context, ostr, layoutId, layoutConfig, cols, horPad, vertPad);
|
||||||
ostr << "})";
|
ostr << "})";
|
||||||
}
|
}
|
||||||
@ -172,9 +173,9 @@ void LayoutRenderer::visitChildren(const Layout* pLayout, int cols, int horPad,
|
|||||||
if (*it)
|
if (*it)
|
||||||
{
|
{
|
||||||
//horizontallayout works only when children are panels
|
//horizontallayout works only when children are panels
|
||||||
ostr << "new Ext.Panel({border:false,bodyBorder:false,items:";
|
ostr << "new Ext.Panel({border:false,bodyBorder:false,items:[";
|
||||||
(*it)->renderHead(context, ostr);
|
(*it)->renderHead(context, ostr);
|
||||||
ostr << "})";
|
ostr << "]})";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
ostr << "{}";
|
ostr << "{}";
|
||||||
|
@ -64,6 +64,8 @@ public:
|
|||||||
|
|
||||||
JavaScriptEvent<ComboBoxEvent> selected; /// thrown whenever a new element is selected
|
JavaScriptEvent<ComboBoxEvent> selected; /// thrown whenever a new element is selected
|
||||||
|
|
||||||
|
JavaScriptEvent<ComboBoxEvent> afterLoad; // thrown after data was loaded
|
||||||
|
|
||||||
ComboBox();
|
ComboBox();
|
||||||
/// Creates the ComboBox.
|
/// Creates the ComboBox.
|
||||||
|
|
||||||
|
@ -59,9 +59,12 @@ public:
|
|||||||
|
|
||||||
static const std::string EV_SELECTED;
|
static const std::string EV_SELECTED;
|
||||||
static const std::string EV_LOAD;
|
static const std::string EV_LOAD;
|
||||||
|
static const std::string EV_AFTERLOAD;
|
||||||
static const std::string FIELD_VAL;
|
static const std::string FIELD_VAL;
|
||||||
|
|
||||||
Delegate selected;
|
Delegate selected;
|
||||||
|
Delegate afterLoad;
|
||||||
|
|
||||||
FIFOEvent<Poco::Net::HTTPServerResponse*> beforeLoad; /// thrown whenever a load is requested
|
FIFOEvent<Poco::Net::HTTPServerResponse*> beforeLoad; /// thrown whenever a load is requested
|
||||||
|
|
||||||
ComboBoxCell(View* pOwner);
|
ComboBoxCell(View* pOwner);
|
||||||
|
@ -41,6 +41,7 @@
|
|||||||
|
|
||||||
|
|
||||||
#include "Poco/WebWidgets/TextField.h"
|
#include "Poco/WebWidgets/TextField.h"
|
||||||
|
#include "Poco/WebWidgets/IntFormatter.h"
|
||||||
|
|
||||||
|
|
||||||
namespace Poco {
|
namespace Poco {
|
||||||
@ -56,7 +57,7 @@ public:
|
|||||||
NumberField();
|
NumberField();
|
||||||
/// Creates an anonymous NumberField.
|
/// Creates an anonymous NumberField.
|
||||||
|
|
||||||
NumberField(const std::string& name);
|
NumberField(const std::string& name, Formatter::Ptr pF = new IntFormatter());
|
||||||
/// Creates a named NumberField.
|
/// Creates a named NumberField.
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -43,7 +43,8 @@ namespace WebWidgets {
|
|||||||
|
|
||||||
|
|
||||||
const std::string ComboBoxCell::FIELD_VAL("val");
|
const std::string ComboBoxCell::FIELD_VAL("val");
|
||||||
const std::string ComboBoxCell::EV_LOAD("load");
|
const std::string ComboBoxCell::EV_LOAD("beforeLoad");
|
||||||
|
const std::string ComboBoxCell::EV_AFTERLOAD("afterLoad");
|
||||||
const std::string ComboBoxCell::EV_SELECTED("sel");
|
const std::string ComboBoxCell::EV_SELECTED("sel");
|
||||||
|
|
||||||
|
|
||||||
@ -92,6 +93,7 @@ void ComboBoxCell::handleAjaxRequest(const Poco::Net::NameValueCollection& args,
|
|||||||
{
|
{
|
||||||
Poco::Net::HTTPServerResponse* pResponse = &response;
|
Poco::Net::HTTPServerResponse* pResponse = &response;
|
||||||
beforeLoad.notify(this, pResponse);
|
beforeLoad.notify(this, pResponse);
|
||||||
|
// response is handled in beofreLoad callback
|
||||||
}
|
}
|
||||||
else if (ev == EV_SELECTED)
|
else if (ev == EV_SELECTED)
|
||||||
{
|
{
|
||||||
@ -103,6 +105,11 @@ void ComboBoxCell::handleAjaxRequest(const Poco::Net::NameValueCollection& args,
|
|||||||
|
|
||||||
response.send();
|
response.send();
|
||||||
}
|
}
|
||||||
|
else if (ev == EV_AFTERLOAD)
|
||||||
|
{
|
||||||
|
afterLoad(this);
|
||||||
|
response.send();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -54,8 +54,8 @@ NumberField::NumberField(const std::type_info& type):
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
NumberField::NumberField(const std::string& name):
|
NumberField::NumberField(const std::string& name, Formatter::Ptr pF):
|
||||||
TextField(name, typeid(NumberField), new NumberFieldCell(this))
|
TextField(name, typeid(NumberField), new NumberFieldCell(this, pF))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user