diff options
author | Jorge Arellano Cid <jcid@dillo.org> | 2008-12-19 16:44:00 -0300 |
---|---|---|
committer | Jorge Arellano Cid <jcid@dillo.org> | 2008-12-19 16:44:00 -0300 |
commit | 88649e033a26be4ab3f337c856d6098e05adcd0d (patch) | |
tree | 4595192ffe427982b199213400b3cc8830afca8e | |
parent | 3322961a176a1c0933cf4d525a9ed8e03b7f2d5a (diff) |
Moved clicked from ButtonResource to Resource.
-rw-r--r-- | ChangeLog | 2 | ||||
-rw-r--r-- | dw/fltkcomplexbutton.cc | 2 | ||||
-rw-r--r-- | dw/ui.cc | 29 | ||||
-rw-r--r-- | dw/ui.hh | 59 | ||||
-rw-r--r-- | src/form.cc | 80 | ||||
-rw-r--r-- | test/form.cc | 2 | ||||
-rw-r--r-- | test/form.hh | 4 |
7 files changed, 93 insertions, 85 deletions
@@ -44,6 +44,8 @@ dillo-2.1 dw ++- Moved clicked from ButtonResource to Resource. + Patch: place (AKA corvid) +- Cleaned up unused code in fltkviewbase. Patch: Johannes Hofmann diff --git a/dw/fltkcomplexbutton.cc b/dw/fltkcomplexbutton.cc index 6c15cee3..9c73f97f 100644 --- a/dw/fltkcomplexbutton.cc +++ b/dw/fltkcomplexbutton.cc @@ -87,7 +87,7 @@ int ComplexButton::handle(int event, const Rectangle& rectangle) { if (pushed()) return 1; // ignore extra pushes on currently-pushed button initial_state = state(); clear_flag(PUSHED); - do_callback(); + /* do_callback(); */ case DRAG: { bool inside = event_inside(rectangle); if (inside) { @@ -69,6 +69,19 @@ void Embed::leaveNotifyImpl (core::EventCrossing *event) resource->emitLeave(); } +bool Embed::buttonPressImpl (core::EventButton *event) +{ + bool handled; + + if (event->button == 3) { + resource->emitClicked(event); + handled = true; + } else { + handled = false; + } + return handled; +} + void Embed::setWidth (int width) { resource->setWidth (width); @@ -201,22 +214,18 @@ void Resource::emitLeave () activateEmitter.emitLeave(this); } -// ---------------------------------------------------------------------- - -bool ButtonResource::ClickedEmitter::emitToReceiver (lout::signal::Receiver - *receiver, - int signalNo, - int argc, - Object **argv) +bool Resource::ClickedEmitter::emitToReceiver(lout::signal::Receiver *receiver, + int signalNo, int argc, + Object **argv) { ((ClickedReceiver*)receiver) - ->clicked ((ButtonResource*)((Pointer*)argv[0])->getValue (), + ->clicked ((Resource*)((Pointer*)argv[0])->getValue (), (EventButton*)((Pointer*)argv[1])->getValue()); return false; } -void ButtonResource::ClickedEmitter::emitClicked (ButtonResource *resource, - EventButton *event) +void Resource::ClickedEmitter::emitClicked (Resource *resource, + EventButton *event) { Pointer p1 (resource); Pointer p2 (event); @@ -232,6 +232,7 @@ protected: void sizeAllocateImpl (Allocation *allocation); void enterNotifyImpl (core::EventCrossing *event); void leaveNotifyImpl (core::EventCrossing *event); + bool buttonPressImpl (core::EventButton *event); public: static int CLASS_ID; @@ -271,6 +272,14 @@ public: virtual void enter (Resource *resource) = 0; virtual void leave (Resource *resource) = 0; }; + /** + * \brief Receiver interface for the "clicked" signal. + */ + class ClickedReceiver: public lout::signal::Receiver + { + public: + virtual void clicked (Resource *resource, EventButton *event) = 0; + }; private: class ActivateEmitter: public lout::signal::Emitter @@ -286,8 +295,20 @@ private: void emitLeave (Resource *resource); }; + class ClickedEmitter: public lout::signal::Emitter + { + protected: + bool emitToReceiver (lout::signal::Receiver *receiver, int signalNo, + int argc, Object **argv); + public: + inline void connectClicked (ClickedReceiver *receiver) { + connect (receiver); } + void emitClicked (Resource *resource, EventButton *event); + }; + Embed *embed; ActivateEmitter activateEmitter; + ClickedEmitter clickedEmitter; void emitEnter (); void emitLeave (); @@ -301,6 +322,8 @@ protected: inline void emitActivate () { return activateEmitter.emitActivate (this); } + inline void emitClicked (EventButton *event) { + clickedEmitter.emitClicked (this, event); } public: inline Resource () { embed = NULL; } @@ -322,43 +345,13 @@ public: inline void connectActivate (ActivateReceiver *receiver) { activateEmitter.connectActivate (receiver); } + inline void connectClicked (ClickedReceiver *receiver) { + clickedEmitter.connectClicked (receiver); } }; class ButtonResource: public Resource -{ -public: - /** - * \brief Receiver interface for the "clicked" signal. - */ - class ClickedReceiver: public lout::signal::Receiver - { - public: - virtual void clicked (ButtonResource *resource, EventButton *event) = 0; - }; - -private: - class ClickedEmitter: public lout::signal::Emitter - { - protected: - bool emitToReceiver (lout::signal::Receiver *receiver, int signalNo, - int argc, Object **argv); - public: - inline void connectClicked (ClickedReceiver *receiver) { - connect (receiver); } - void emitClicked (ButtonResource *resource, EventButton *event); - }; - - ClickedEmitter clickedEmitter; - -protected: - inline void emitClicked (EventButton *event) { - clickedEmitter.emitClicked (this, event); } - -public: - inline void connectClicked (ClickedReceiver *receiver) { - clickedEmitter.connectClicked (receiver); } -}; +{}; /** * \brief Interface for labelled buttons resources. diff --git a/src/form.cc b/src/form.cc index 63d4ff83..3f7bbaca 100644 --- a/src/form.cc +++ b/src/form.cc @@ -119,7 +119,7 @@ public: class DilloHtmlReceiver: public Resource::ActivateReceiver, - public ButtonResource::ClickedReceiver + public Resource::ClickedReceiver { friend class DilloHtmlForm; DilloHtmlForm* form; @@ -128,7 +128,7 @@ class DilloHtmlReceiver: void activate (Resource *resource); void enter (Resource *resource); void leave (Resource *resource); - void clicked (ButtonResource *resource, EventButton *event); + void clicked (Resource *resource, EventButton *event); }; class DilloHtmlInput { @@ -950,11 +950,15 @@ DilloHtmlForm::~DilloHtmlForm () void DilloHtmlForm::eventHandler(Resource *resource, EventButton *event) { MSG("DilloHtmlForm::eventHandler\n"); - DilloHtmlInput *input = getInput(resource); - if (input) { - input->activate (this, num_entry_fields, event); + if (event && (event->button == 3)) { + MSG("Form menu\n"); } else { - MSG("DilloHtmlForm::eventHandler: ERROR, input not found!\n"); + DilloHtmlInput *input = getInput(resource); + if (input) { + input->activate (this, num_entry_fields, event); + } else { + MSG("DilloHtmlForm::eventHandler: ERROR, input not found!\n"); + } } } @@ -1522,7 +1526,7 @@ void DilloHtmlReceiver::leave (Resource *resource) a_UIcmd_set_msg(html->bw, ""); } -void DilloHtmlReceiver::clicked (ButtonResource *resource, +void DilloHtmlReceiver::clicked (Resource *resource, EventButton *event) { form->eventHandler(resource, event); @@ -1576,30 +1580,17 @@ void DilloHtmlInput::connectTo(DilloHtmlReceiver *form_receiver) { Resource *resource; if (embed && (resource = embed->getResource())) { - switch (type) { - case DILLO_HTML_INPUT_UNKNOWN: - case DILLO_HTML_INPUT_HIDDEN: - case DILLO_HTML_INPUT_CHECKBOX: - case DILLO_HTML_INPUT_RADIO: - case DILLO_HTML_INPUT_BUTTON: - case DILLO_HTML_INPUT_TEXTAREA: - case DILLO_HTML_INPUT_SELECT: - case DILLO_HTML_INPUT_SEL_LIST: - // do nothing - break; - case DILLO_HTML_INPUT_SUBMIT: - case DILLO_HTML_INPUT_RESET: - case DILLO_HTML_INPUT_BUTTON_SUBMIT: - case DILLO_HTML_INPUT_BUTTON_RESET: - case DILLO_HTML_INPUT_IMAGE: - case DILLO_HTML_INPUT_FILE: - ((ButtonResource *)resource)->connectClicked (form_receiver); - case DILLO_HTML_INPUT_TEXT: - case DILLO_HTML_INPUT_PASSWORD: - case DILLO_HTML_INPUT_INDEX: - resource->connectActivate (form_receiver); - break; - break; + resource->connectClicked (form_receiver); + if (type == DILLO_HTML_INPUT_SUBMIT || + type == DILLO_HTML_INPUT_RESET || + type == DILLO_HTML_INPUT_BUTTON_SUBMIT || + type == DILLO_HTML_INPUT_BUTTON_RESET || + type == DILLO_HTML_INPUT_IMAGE || + type == DILLO_HTML_INPUT_FILE || + type == DILLO_HTML_INPUT_TEXT || + type == DILLO_HTML_INPUT_PASSWORD || + type == DILLO_HTML_INPUT_INDEX) { + resource->connectActivate (form_receiver); } } } @@ -1610,16 +1601,29 @@ void DilloHtmlInput::connectTo(DilloHtmlReceiver *form_receiver) void DilloHtmlInput::activate(DilloHtmlForm *form, int num_entry_fields, EventButton *event) { - if (type == DILLO_HTML_INPUT_FILE) { + switch (type) { + case DILLO_HTML_INPUT_FILE: readFile (form->html->bw); - } else if (type == DILLO_HTML_INPUT_RESET || - type == DILLO_HTML_INPUT_BUTTON_RESET) { + break; + case DILLO_HTML_INPUT_RESET: + case DILLO_HTML_INPUT_BUTTON_RESET: form->reset(); - } else if ((type != DILLO_HTML_INPUT_TEXT && - type != DILLO_HTML_INPUT_PASSWORD) || - prefs.enterpress_forces_submit || - num_entry_fields == 1) { + break; + case DILLO_HTML_INPUT_TEXT: + case DILLO_HTML_INPUT_PASSWORD: + if (!(prefs.enterpress_forces_submit || num_entry_fields == 1)) { + break; + } else { + /* fall through */ + } + case DILLO_HTML_INPUT_SUBMIT: + case DILLO_HTML_INPUT_BUTTON_SUBMIT: + case DILLO_HTML_INPUT_IMAGE: + case DILLO_HTML_INPUT_INDEX: form->submit(this, event); + break; + default: + break; } } diff --git a/test/form.cc b/test/form.cc index ab9994a9..d88030c3 100644 --- a/test/form.cc +++ b/test/form.cc @@ -164,7 +164,7 @@ Form::FormClickedReceiver::~FormClickedReceiver () delete[] value; } -void Form::FormClickedReceiver::clicked (ButtonResource *resource, +void Form::FormClickedReceiver::clicked (Resource *resource, dw::core::EventButton *event) { form->send (name, value, event->xCanvas, event->yCanvas); diff --git a/test/form.hh b/test/form.hh index 76eae9fe..4d0481c7 100644 --- a/test/form.hh +++ b/test/form.hh @@ -120,7 +120,7 @@ private: }; class FormClickedReceiver: - public dw::core::ui::ButtonResource::ClickedReceiver + public dw::core::ui::Resource::ClickedReceiver { private: Form *form; @@ -130,7 +130,7 @@ private: FormClickedReceiver (Form *form, const char *name, const char *value); ~FormClickedReceiver (); - void clicked(dw::core::ui::ButtonResource *resource, + void clicked(dw::core::ui::Resource *resource, dw::core::EventButton *event); }; |