diff options
author | jcid <devnull@localhost> | 2008-09-24 18:44:40 +0200 |
---|---|---|
committer | jcid <devnull@localhost> | 2008-09-24 18:44:40 +0200 |
commit | c377e06400f138325a9a9d43d91a9272691867a1 (patch) | |
tree | 49f3ca1c46af11a058a68714899d4137ec717618 /test/form.cc | |
parent | 642f9b3e747859a7256ea12fab9f9ed50aa9253a (diff) |
- Moved the dw2 tree into dillo2's tree.
Diffstat (limited to 'test/form.cc')
-rw-r--r-- | test/form.cc | 264 |
1 files changed, 264 insertions, 0 deletions
diff --git a/test/form.cc b/test/form.cc new file mode 100644 index 00000000..5e8e0471 --- /dev/null +++ b/test/form.cc @@ -0,0 +1,264 @@ +/* + * Dillo Widget + * + * Copyright 2005-2007 Sebastian Geerken <sgeerken@dillo.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + + + +#include "form.hh" + +namespace form { + +using namespace dw::core::ui; + +Form::ResourceDecorator::ResourceDecorator (const char *name) +{ + this->name = strdup (name); +} + +Form::ResourceDecorator::~ResourceDecorator () +{ + delete name; +} + +Form::TextResourceDecorator::TextResourceDecorator (const char *name, + TextResource *resource): + Form::ResourceDecorator (name) +{ + this->resource = resource; +} + +const char *Form::TextResourceDecorator::getValue () +{ + return resource->getText (); +} + +Form::RadioButtonResourceDecorator::RadioButtonResourceDecorator + (const char *name, RadioButtonResource *resource, const char **values): + Form::ResourceDecorator (name) +{ + this->resource = resource; + + int n = 0; + while (values[n]) + n++; + this->values = new const char*[n + 1]; + for(int i = 0; i < n; i++) + this->values[i] = strdup (values[i]); + values[n] = 0; +} + +Form::RadioButtonResourceDecorator::~RadioButtonResourceDecorator () +{ + for(int i = 0; values[i]; i++) + delete values[i]; + delete[] values; +} + +const char *Form::RadioButtonResourceDecorator::getValue () +{ + RadioButtonResource::GroupIterator *it; + int i; + for (it = resource->groupIterator (), i = 0; it->hasNext (); i++) { + RadioButtonResource *resource = it->getNext (); + if(resource->isActivated ()) { + it->unref (); + return values[i]; + } + } + + it->unref (); + return NULL; +} + +Form::CheckButtonResourceDecorator::CheckButtonResourceDecorator + (const char *name, CheckButtonResource *resource): + Form::ResourceDecorator (name) +{ + this->resource = resource; +} + +const char *Form::CheckButtonResourceDecorator::getValue () +{ + return resource->isActivated () ? "true" : NULL; +} + +Form::SelectionResourceDecorator::SelectionResourceDecorator + (const char *name, SelectionResource *resource, const char **values): + Form::ResourceDecorator (name) +{ + this->resource = resource; + + int n = 0; + while (values[n]) + n++; + this->values = new const char*[n + 1]; + for(int i = 0; i < n; i++) + this->values[i] = strdup (values[i]); + this->values[n] = 0; +} + +Form::SelectionResourceDecorator::~SelectionResourceDecorator () +{ + for(int i = 0; values[i]; i++) + delete values[i]; + delete[] values; +} + +const char *Form::SelectionResourceDecorator::getValue () +{ + valueBuf.clear(); + int n = resource->getNumberOfItems (); + bool first = true; + for (int i = 0; i < n; i++) { + if (resource->isSelected (i)) { + if (!first) + valueBuf.append (", "); + valueBuf.append (values[i]); + first = false; + } + } + + return valueBuf.getChars (); +} + +void Form::FormActivateReceiver::activate (Resource *resource) +{ + form->send (NULL, NULL, -1, -1); +} + +void Form::FormActivateReceiver::enter (Resource *resource) +{ +} + +void Form::FormActivateReceiver::leave (Resource *resource) +{ +} + +Form::FormClickedReceiver::FormClickedReceiver (Form *form, const char *name, + const char *value) +{ + this->form = form; + this->name = strdup (name); + this->value = strdup (value); +} + +Form::FormClickedReceiver::~FormClickedReceiver () +{ + delete name; + delete[] value; +} + +void Form::FormClickedReceiver::clicked (ButtonResource *resource, + int buttonNo, int x, int y) +{ + form->send (name, value, x, y); +} + +Form::Form () +{ + resources = new lout::container::typed::List <ResourceDecorator> (true); + activateReceiver = new FormActivateReceiver (this); + clickedReceivers = + new lout::container::typed::List <FormClickedReceiver> (true); +} + +Form::~Form () +{ + delete resources; + delete activateReceiver; + delete clickedReceivers; +} + +/** + * \brief Adds an instance of dw::core::ui::TextResource. + */ +void Form::addTextResource (const char *name, + dw::core::ui::TextResource *resource) +{ + resources->append (new TextResourceDecorator (name, resource)); + resource->connectActivate (activateReceiver); +} + +/** + * \brief Adds an instance of dw::core::ui::RadioButtonResource. + * + * This method has to be called only once for a group of radio buttons. + */ +void Form::addRadioButtonResource (const char *name, + dw::core::ui::RadioButtonResource *resource, + const char **values) +{ + resources->append (new RadioButtonResourceDecorator (name, resource, + values)); + resource->connectActivate (activateReceiver); +} + +/** + * \brief Adds an instance of dw::core::ui::CheckButtonResource. + */ +void Form::addCheckButtonResource (const char *name, + dw::core::ui::CheckButtonResource *resource) +{ + resources->append (new CheckButtonResourceDecorator (name, resource)); + resource->connectActivate (activateReceiver); +} + +/** + * \brief Adds an instance of dw::core::ui::SelectionResource. + */ +void Form::addSelectionResource (const char *name, + dw::core::ui::SelectionResource *resource, + const char **values) +{ + resources->append (new SelectionResourceDecorator (name, resource, values)); + resource->connectActivate (activateReceiver); +} + +/** + * \todo Comment this; + */ +void Form::addButtonResource (const char *name, + dw::core::ui::ButtonResource *resource, + const char *value) +{ + FormClickedReceiver *receiver = + new FormClickedReceiver (this, name, value); + resource->connectClicked (receiver); + clickedReceivers->append (receiver); +} + +/** + * \todo Comment this; + */ +void Form::send (const char *buttonName, const char *buttonValue, int x, int y) +{ + for (lout::container::typed::Iterator <ResourceDecorator> it = + resources->iterator (); + it.hasNext (); ) { + ResourceDecorator *resource = it.getNext (); + const char *value = resource->getValue (); + if (value) + printf ("%s = %s; x=%d y=%d\n", resource->getName (), value, x, y); + } + + if(buttonName && buttonValue) + printf ("%s = %s\n", buttonName, buttonValue); +} + +} // namespace form |