diff options
author | corvid <corvid@lavabit.com> | 2009-10-15 19:31:06 +0000 |
---|---|---|
committer | corvid <corvid@lavabit.com> | 2009-10-15 19:31:06 +0000 |
commit | 42b823675277e31dd2772a0d4bdb9bf1ff0b5df4 (patch) | |
tree | 1bd876228620bbb658c17df0a68ac6ec4b1f0300 /dw | |
parent | 214f4d073de54ed1d7960210b41b1e9d0dc538da (diff) |
remove multiple views capability from dw
It was complicated, we don't use it, and we currently had no plans to use it.
Diffstat (limited to 'dw')
-rw-r--r-- | dw/fltkplatform.cc | 23 | ||||
-rw-r--r-- | dw/fltkplatform.hh | 2 | ||||
-rw-r--r-- | dw/fltkui.cc | 227 | ||||
-rw-r--r-- | dw/fltkui.hh | 20 | ||||
-rw-r--r-- | dw/layout.cc | 109 | ||||
-rw-r--r-- | dw/layout.hh | 4 |
6 files changed, 105 insertions, 280 deletions
diff --git a/dw/fltkplatform.cc b/dw/fltkplatform.cc index 90244c12..e36c073a 100644 --- a/dw/fltkplatform.cc +++ b/dw/fltkplatform.cc @@ -18,7 +18,7 @@ */ - +#include "../lout/msg.h" #include "fltkcore.hh" #include <fltk/draw.h> @@ -297,7 +297,7 @@ FltkPlatform::FltkPlatform () idleFuncRunning = false; idleFuncId = 0; - views = new container::typed::List <FltkView> (false); + view = NULL; resources = new container::typed::List <ui::FltkResource> (false); resourceFactory.setPlatform (this); @@ -308,7 +308,6 @@ FltkPlatform::~FltkPlatform () if (idleFuncRunning) remove_idle (generalStaticIdle, (void*)this); delete idleQueue; - delete views; delete resources; } @@ -320,25 +319,30 @@ void FltkPlatform::setLayout (core::Layout *layout) void FltkPlatform::attachView (core::View *view) { - views->append ((FltkView*)view); + if (this->view) + MSG_ERR("FltkPlatform::attachView: multiple views!\n"); + this->view = (FltkView*)view; for (container::typed::Iterator <ui::FltkResource> it = resources->iterator (); it.hasNext (); ) { ui::FltkResource *resource = it.getNext (); - resource->attachView ((FltkView*)view); + resource->attachView (this->view); } } void FltkPlatform::detachView (core::View *view) { - views->removeRef ((FltkView*)view); + if (this->view != view) + MSG_ERR("FltkPlatform::detachView: this->view: %p view: %p\n", + this->view, view); for (container::typed::Iterator <ui::FltkResource> it = resources->iterator (); it.hasNext (); ) { ui::FltkResource *resource = it.getNext (); resource->detachView ((FltkView*)view); } + this->view = NULL; } @@ -473,12 +477,7 @@ core::ui::ResourceFactory *FltkPlatform::getResourceFactory () void FltkPlatform::attachResource (ui::FltkResource *resource) { resources->append (resource); - - for (container::typed::Iterator <FltkView> it = views->iterator (); - it.hasNext (); ) { - FltkView *view = it.getNext (); - resource->attachView (view); - } + resource->attachView (view); } void FltkPlatform::detachResource (ui::FltkResource *resource) diff --git a/dw/fltkplatform.hh b/dw/fltkplatform.hh index 1d9a7521..dcb1a7ff 100644 --- a/dw/fltkplatform.hh +++ b/dw/fltkplatform.hh @@ -126,7 +126,7 @@ private: static void generalStaticIdle(void *data); void generalIdle(); - lout::container::typed::List <FltkView> *views; + FltkView *view; lout::container::typed::List <ui::FltkResource> *resources; public: diff --git a/dw/fltkui.cc b/dw/fltkui.cc index 51100710..c1bfd873 100644 --- a/dw/fltkui.cc +++ b/dw/fltkui.cc @@ -71,84 +71,60 @@ FltkResource::FltkResource (FltkPlatform *platform) */ void FltkResource::init (FltkPlatform *platform) { - viewsAndWidgets = new lout::container::typed::List <ViewAndWidget> (true); + view = NULL; + widget = NULL; platform->attachResource (this); } FltkResource::~FltkResource () { platform->detachResource (this); - for (Iterator <ViewAndWidget> it = viewsAndWidgets->iterator (); - it.hasNext(); ) { - ViewAndWidget *viewAndWidget = it.getNext (); - - if (viewAndWidget->widget) { - if (viewAndWidget->view) { - viewAndWidget->view->removeFltkWidget(viewAndWidget->widget); - } - delete viewAndWidget->widget; + if (widget) { + if (view) { + view->removeFltkWidget(widget); } - + delete widget; } - delete viewsAndWidgets; if (style) style->unref (); } void FltkResource::attachView (FltkView *view) { + if (this->view) + MSG_ERR("FltkResource::attachView: multiple views!\n"); + if (view->usesFltkWidgets ()) { - ViewAndWidget *viewAndWidget = new ViewAndWidget(); - viewAndWidget->view = view; + this->view = view; - viewAndWidget->widget = createNewWidget (&allocation); - viewAndWidget->view->addFltkWidget (viewAndWidget->widget, &allocation); - viewsAndWidgets->append (viewAndWidget); + widget = createNewWidget (&allocation); + view->addFltkWidget (widget, &allocation); if (style) - setWidgetStyle (viewAndWidget->widget, style); + setWidgetStyle (widget, style); if (! enabled) - viewAndWidget->widget->deactivate (); + widget->deactivate (); } } void FltkResource::detachView (FltkView *view) { - for (Iterator <ViewAndWidget> it = viewsAndWidgets->iterator (); - it.hasNext(); ) { - ViewAndWidget *viewAndWidget = it.getNext (); - if (viewAndWidget->view == view) { - viewsAndWidgets->removeRef (viewAndWidget); - return; - } - } - - MSG_WARN("FltkResource::detachView: View not found."); + if (this->view != view) + MSG_ERR("FltkResource::detachView: this->view: %p view: %p\n", + this->view, view); + this->view = NULL; } void FltkResource::sizeAllocate (core::Allocation *allocation) { this->allocation = *allocation; - - for (Iterator <ViewAndWidget> it = viewsAndWidgets->iterator (); - it.hasNext(); ) { - ViewAndWidget *viewAndWidget = it.getNext (); - viewAndWidget->view->allocateFltkWidget (viewAndWidget->widget, - allocation); - } + view->allocateFltkWidget (widget, allocation); } void FltkResource::draw (core::View *view, core::Rectangle *area) { FltkView *fltkView = (FltkView*)view; - if (fltkView->usesFltkWidgets ()) { - for (Iterator <ViewAndWidget> it = viewsAndWidgets->iterator (); - it.hasNext(); ) { - ViewAndWidget *viewAndWidget = it.getNext (); - if (viewAndWidget->view == fltkView) { - fltkView->drawFltkWidget (viewAndWidget->widget, area); - break; - } - } + if (fltkView->usesFltkWidgets () && this->view == fltkView) { + fltkView->drawFltkWidget (widget, area); } } @@ -160,11 +136,7 @@ void FltkResource::setStyle (core::style::Style *style) this->style = style; style->ref (); - for (Iterator <ViewAndWidget> it = viewsAndWidgets->iterator (); - it.hasNext(); ) { - ViewAndWidget *viewAndWidget = it.getNext (); - setWidgetStyle (viewAndWidget->widget, style); - } + setWidgetStyle (widget, style); } void FltkResource::setWidgetStyle (::fltk::Widget *widget, @@ -203,28 +175,20 @@ void FltkResource::setWidgetStyle (::fltk::Widget *widget, void FltkResource::setDisplayed(bool displayed) { - for (Iterator <ViewAndWidget> it = viewsAndWidgets->iterator (); - it.hasNext(); ) { - ViewAndWidget *viewAndWidget = it.getNext (); - if (displayed) - viewAndWidget->widget->show(); - else - viewAndWidget->widget->hide(); - } + if (displayed) + widget->show(); + else + widget->hide(); } bool FltkResource::displayed() { - bool ret; - Iterator <ViewAndWidget> it = viewsAndWidgets->iterator (); + bool ret = false; - if (it.hasNext()) { - ViewAndWidget *viewAndWidget = it.getNext (); + if (widget) { // visible() is not the same thing as being show()n exactly, but // show()/hide() set it appropriately for our purposes. - ret = viewAndWidget->widget->visible(); - } else { - ret = false; + ret = widget->visible(); } return ret; } @@ -238,14 +202,10 @@ void FltkResource::setEnabled (bool enabled) { this->enabled = enabled; - for (Iterator <ViewAndWidget> it = viewsAndWidgets->iterator (); - it.hasNext(); ) { - ViewAndWidget *viewAndWidget = it.getNext (); - if (enabled) - viewAndWidget->widget->activate (); - else - viewAndWidget->widget->deactivate (); - } + if (enabled) + widget->activate (); + else + widget->deactivate (); } // ---------------------------------------------------------------------- @@ -377,12 +337,7 @@ void FltkLabelButtonResource::setLabel (const char *label) delete this->label; this->label = strdup (label); - for (Iterator <ViewAndWidget> it = viewsAndWidgets->iterator (); - it.hasNext(); ) { - ViewAndWidget *viewAndWidget = it.getNext (); - viewAndWidget->widget->label (this->label); - } - + widget->label (this->label); queueResize (true); } @@ -393,7 +348,7 @@ FltkComplexButtonResource::FltkComplexButtonResource (FltkPlatform *platform, *widget, bool relief): FltkSpecificResource <dw::core::ui::ComplexButtonResource> (platform) { - viewsAndViews = new lout::container::typed::List <ViewAndView> (true); + flatView = topView = NULL; this->relief = relief; FltkResource::init (platform); ComplexButtonResource::init (widget); @@ -401,7 +356,6 @@ FltkComplexButtonResource::FltkComplexButtonResource (FltkPlatform *platform, FltkComplexButtonResource::~FltkComplexButtonResource () { - delete viewsAndViews; } void FltkComplexButtonResource::widgetCallback (::fltk::Widget *widget, @@ -419,7 +373,7 @@ void FltkComplexButtonResource::widgetCallback (::fltk::Widget *widget, setButtonEvent(&event); res->emitClicked(&event); } else { - ((FltkViewBase*)res->lastFlatView)->handle(::fltk::event()); + ((FltkViewBase*)res->flatView)->handle(::fltk::event()); } } @@ -432,55 +386,30 @@ void FltkComplexButtonResource::attachView (FltkView *view) { FltkResource::attachView (view); - if (view->usesFltkWidgets ()) { - ViewAndView *viewAndView = new ViewAndView(); - viewAndView->topView = view; - viewAndView->flatView = lastFlatView; - viewsAndViews->append (viewAndView); - } + if (view->usesFltkWidgets ()) + topView = view; } void FltkComplexButtonResource::detachView (FltkView *view) { FltkResource::detachView (view); - - for (Iterator <ViewAndView> it = viewsAndViews->iterator (); - it.hasNext(); ) { - ViewAndView *viewAndView = it.getNext (); - if (viewAndView->topView == view) { - viewsAndViews->removeRef (viewAndView); - return; - } - } - - MSG_WARN("FltkComplexButtonResourceResource::detachView: " - "View not found.\n"); } void FltkComplexButtonResource::sizeAllocate (core::Allocation *allocation) { FltkResource::sizeAllocate (allocation); - for (Iterator <ViewAndView> it = viewsAndViews->iterator (); - it.hasNext(); ) { - ViewAndView *viewAndView = it.getNext (); - ((FltkFlatView*)viewAndView->flatView)->resize ( - reliefXThickness (), - reliefYThickness (), - allocation->width - 2 * reliefXThickness (), - allocation->ascent + allocation->descent - 2 * reliefYThickness ()); - - ((FltkFlatView*)viewAndView->flatView)->parent ()->init_sizes (); - } + ((FltkFlatView*)flatView)->resize ( + reliefXThickness (), reliefYThickness (), + allocation->width - 2 * reliefXThickness (), + allocation->ascent + allocation->descent - 2 * reliefYThickness ()); + + ((FltkFlatView*)flatView)->parent ()->init_sizes (); } void FltkComplexButtonResource::setLayout (dw::core::Layout *layout) { - for (Iterator <ViewAndView> it = viewsAndViews->iterator (); - it.hasNext(); ) { - ViewAndView *viewAndView = it.getNext (); - layout->attachView (viewAndView->flatView); - } + layout->attachView (flatView); } int FltkComplexButtonResource::reliefXThickness () @@ -505,18 +434,15 @@ int FltkComplexButtonResource::reliefYThickness () if (!relief) button->box(::fltk::FLAT_BOX); - FltkFlatView *flatView = - new FltkFlatView (allocation->x + reliefXThickness (), - allocation->y + reliefYThickness (), - allocation->width - 2 * reliefXThickness (), - allocation->ascent + allocation->descent - - 2 * reliefYThickness ()); - button->add (flatView); - - lastFlatView = flatView; + flatView = new FltkFlatView (allocation->x + reliefXThickness (), + allocation->y + reliefYThickness (), + allocation->width - 2 * reliefXThickness (), + allocation->ascent + allocation->descent + - 2 * reliefYThickness ()); + button->add ((FltkFlatView *)flatView); if (layout) - layout->attachView (lastFlatView); + layout->attachView (flatView); return button; } @@ -559,13 +485,8 @@ FltkEntryResource::~FltkEntryResource () input->label(label); input->set_flag(::fltk::ALIGN_INSIDE_LEFT); } - if (viewsAndWidgets->isEmpty ()) { - // First widget created, attach the set text. - if (initText) - input->value (initText); - } else - input->value - (((::fltk::Input*)viewsAndWidgets->getFirst()->widget)->value ()); + if (initText) + input->value (initText); return input; } @@ -611,10 +532,7 @@ void FltkEntryResource::widgetCallback (::fltk::Widget *widget, const char *FltkEntryResource::getText () { - if (viewsAndWidgets->isEmpty ()) - return initText; - else - return ((::fltk::Input*)viewsAndWidgets->getFirst()->widget)->value (); + return ((::fltk::Input*)widget)->value (); } void FltkEntryResource::setText (const char *text) @@ -623,11 +541,7 @@ void FltkEntryResource::setText (const char *text) delete initText; initText = strdup (text); - for (Iterator <ViewAndWidget> it = viewsAndWidgets->iterator (); - it.hasNext(); ) { - ViewAndWidget *viewAndWidget = it.getNext (); - ((::fltk::Input*)viewAndWidget->widget)->value (initText); - } + ((::fltk::Input*)widget)->value (initText); } bool FltkEntryResource::isEditable () @@ -668,11 +582,7 @@ FltkMultiLineTextResource::FltkMultiLineTextResource (FltkPlatform *platform, FltkMultiLineTextResource::~FltkMultiLineTextResource () { /* Free memory avoiding a double-free of text buffers */ - for (Iterator <ViewAndWidget> it = viewsAndWidgets->iterator (); - it.hasNext(); ) { - ViewAndWidget *viewAndWidget = it.getNext (); - ((::fltk::TextEditor *) viewAndWidget->widget)->buffer (0); - } + ((::fltk::TextEditor *) widget)->buffer (0); delete buffer; } @@ -750,13 +660,7 @@ template <class I> *allocation) { ::fltk::Button *button = createNewButton (allocation); - - if (this->viewsAndWidgets->isEmpty ()) - button->value (initActivated); - else - button->value (((::fltk::Button*)this->viewsAndWidgets - ->getFirst()->widget)->value ()); - + button->value (initActivated); return button; } @@ -783,12 +687,7 @@ void FltkToggleButtonResource<I>::sizeRequest (core::Requisition *requisition) template <class I> bool FltkToggleButtonResource<I>::FltkToggleButtonResource::isActivated () { - if (this->viewsAndWidgets->isEmpty ()) - return initActivated; - else - return - ((::fltk::Button*)this->viewsAndWidgets->getFirst()->widget) - ->value (); + return ((::fltk::Button*)this->widget)->value (); } @@ -796,13 +695,7 @@ template <class I> void FltkToggleButtonResource<I>::setActivated (bool activated) { initActivated = activated; - - for (Iterator <FltkResource::ViewAndWidget> it = - this->viewsAndWidgets->iterator (); - it.hasNext(); ) { - FltkResource::ViewAndWidget *viewAndWidget = it.getNext (); - ((::fltk::Button*)viewAndWidget->widget)->value (initActivated); - } + ((::fltk::Button*)this->widget)->value (initActivated); } // ---------------------------------------------------------------------- diff --git a/dw/fltkui.hh b/dw/fltkui.hh index c8bc8de4..add46589 100644 --- a/dw/fltkui.hh +++ b/dw/fltkui.hh @@ -178,14 +178,8 @@ private: bool enabled; protected: - class ViewAndWidget: public lout::object::Object - { - public: - FltkView *view; - ::fltk::Widget *widget; - }; - - lout::container::typed::List <ViewAndWidget> *viewsAndWidgets; + FltkView *view; + ::fltk::Widget *widget; core::Allocation allocation; FltkPlatform *platform; @@ -260,15 +254,7 @@ private: static void widgetCallback (::fltk::Widget *widget, void *data); protected: - class ViewAndView: public lout::object::Object - { - public: - FltkView *topView, *flatView; - }; - - FltkView *lastFlatView; - - lout::container::typed::List <ViewAndView> *viewsAndViews; + FltkView *topView, *flatView; void attachView (FltkView *view); void detachView (FltkView *view); diff --git a/dw/layout.cc b/dw/layout.cc index 3cbc0791..75598166 100644 --- a/dw/layout.cc +++ b/dw/layout.cc @@ -78,7 +78,7 @@ Layout::Anchor::~Anchor () Layout::Layout (Platform *platform) { this->platform = platform; - views = new container::typed::List <View> (true); + view = NULL; topLevel = NULL; widgetAtPoint = NULL; @@ -123,7 +123,7 @@ Layout::~Layout () if (topLevel) delete topLevel; delete platform; - delete views; + delete view; delete anchorsTable; delete textZone; } @@ -156,13 +156,10 @@ void Layout::removeWidget () canvasWidth = canvasAscent = canvasDescent = 0; scrollX = scrollY = 0; - for (typed::Iterator <View> it = views->iterator (); it.hasNext (); ) { - View *view = it.getNext (); - view->setCanvasSize (canvasWidth, canvasAscent, canvasDescent); - if (view->usesViewport ()) - view->setViewportSize (viewportWidth, viewportHeight, 0, 0); - view->queueDrawTotal (); - } + view->setCanvasSize (canvasWidth, canvasAscent, canvasDescent); + if (view->usesViewport ()) + view->setViewportSize (viewportWidth, viewportHeight, 0, 0); + view->queueDrawTotal (); setAnchor (NULL); updateAnchor (); @@ -194,7 +191,10 @@ void Layout::setWidget (Widget *widget) */ void Layout::attachView (View *view) { - views->append (view); + if (this->view) + MSG_ERR("attachView: Multiple views for layout!\n"); + + this->view = view; platform->attachView (view); /* @@ -236,11 +236,12 @@ void Layout::attachView (View *view) void Layout::detachView (View *view) { + if (this->view != view) + MSG_ERR("detachView: this->view: %p view %p\n", this->view, view); + view->setLayout (NULL); platform->detachView (view); - - views->detachRef (view); - + this->view = NULL; /** * \todo Actually, viewportMarkerWidthDiff and * viewportMarkerHeightDiff have to be recalculated here, since the @@ -251,12 +252,8 @@ void Layout::detachView (View *view) void Layout::scroll(ScrollCommand cmd) { - for (typed::Iterator <View> it = views->iterator (); it.hasNext (); ) { - View *view = it.getNext (); - - if (view->usesViewport ()) - view->scroll(cmd); - } + if (view->usesViewport ()) + view->scroll(cmd); } /** @@ -346,11 +343,7 @@ void Layout::scrollIdle () if (xChanged || yChanged) { adjustScrollPos (); - for (container::typed::Iterator <View> it = views->iterator (); - it.hasNext (); ) { - View *thisView = it.getNext(); - thisView->scrollTo (scrollX, scrollY); - } + view->scrollTo (scrollX, scrollY); } scrollIdleId = -1; @@ -500,11 +493,7 @@ void Layout::setCursor (style::Cursor cursor) { if (cursor != this->cursor) { this->cursor = cursor; - - for (typed::Iterator <View> it = views->iterator (); it.hasNext (); ) { - View *view = it.getNext (); - view->setCursor (cursor); - } + view->setCursor (cursor); } } @@ -526,11 +515,7 @@ void Layout::updateBgColor () bgColor = topLevel->getStyle()->backgroundColor; else bgColor = NULL; - - for (typed::Iterator <View> it = views->iterator (); it.hasNext (); ) { - View *view = it.getNext (); - view->setBgColor (bgColor); - } + view->setBgColor (bgColor); } void Layout::resizeIdle () @@ -562,12 +547,9 @@ void Layout::resizeIdle () emitter.emitCanvasSizeChanged ( canvasWidth, canvasAscent, canvasDescent); - // Tell the views about the new world size. - for (typed::Iterator <View> it = views->iterator (); it.hasNext ();) { - View *view = it.getNext (); - view->setCanvasSize (canvasWidth, canvasAscent, canvasDescent); - // view->queueDrawTotal (false); - } + // Tell the view about the new world size. + view->setCanvasSize (canvasWidth, canvasAscent, canvasDescent); + // view->queueDrawTotal (false); if (usesViewport) { int actualHScrollbarThickness = @@ -585,14 +567,10 @@ void Layout::resizeIdle () } // Set viewport sizes. - for (typed::Iterator <View> it = views->iterator (); - it.hasNext (); ) { - View *view = it.getNext (); - if (view->usesViewport ()) - view->setViewportSize (viewportWidth, viewportHeight, - actualHScrollbarThickness, - actualVScrollbarThickness); - } + if (view->usesViewport ()) + view->setViewportSize (viewportWidth, viewportHeight, + actualHScrollbarThickness, + actualVScrollbarThickness); } } @@ -623,11 +601,7 @@ void Layout::queueDraw (int x, int y, int width, int height) if (area.isEmpty ()) return; - for (container::typed::Iterator <View> it = views->iterator (); - it.hasNext (); ) { - View *view = it.getNext (); - view->queueDraw (&area); - } + view->queueDraw (&area); } void Layout::queueDrawExcept (int x, int y, int width, int height, @@ -656,11 +630,7 @@ void Layout::queueDrawExcept (int x, int y, int width, int height, void Layout::queueResize () { if (resizeIdleId == -1) { - for (container::typed::Iterator <View> it = views->iterator (); - it.hasNext (); ) { - View *view = it.getNext (); - view->cancelQueueDraw (); - } + view->cancelQueueDraw (); resizeIdleId = platform->addIdle (&Layout::resizeIdle); } @@ -873,14 +843,6 @@ void Layout::scrollPosChanged (View *view, int x, int y) scrollX = x; scrollY = y; - // Tell all views about the scrolling position, except the caller. - for (container::typed::Iterator <View> it = views->iterator (); - it.hasNext (); ) { - View *thisView = it.getNext(); - if (view != thisView && thisView->usesViewport ()) - thisView->scrollTo (scrollX, scrollY); - } - setAnchor (NULL); updateAnchor (); } @@ -909,21 +871,6 @@ void Layout::viewportSizeChanged (View *view, int width, int height) viewportHeight = height; setSizeHints (); - - int actualHScrollbarThickness = - (canvasWidth > viewportWidth) ? hScrollbarThickness : 0; - int actualVScrollbarThickness = - (canvasAscent + canvasDescent > viewportWidth) ? vScrollbarThickness : 0; - - /* Tell all views about the size, except the caller. */ - for (container::typed::Iterator <View> it = views->iterator (); - it.hasNext (); ) { - View *thisView = it.getNext(); - if (view != thisView && thisView->usesViewport ()) - thisView->setViewportSize (viewportWidth, viewportHeight, - actualHScrollbarThickness, - actualVScrollbarThickness); - } } } // namespace dw diff --git a/dw/layout.hh b/dw/layout.hh index 36a5f17b..bfc61afd 100644 --- a/dw/layout.hh +++ b/dw/layout.hh @@ -58,10 +58,10 @@ private: }; Platform *platform; - lout::container::typed::List <View> *views; + View *view; Widget *topLevel, *widgetAtPoint; - /* The state, which must be projected into the views. */ + /* The state, which must be projected into the view. */ style::Color *bgColor; style::Cursor cursor; int canvasWidth, canvasAscent, canvasDescent; |