view codeDoc/jobs.txt @ 175:1cbde9807293

Compile/link-time fixes for ldc & non-debug builds. Moved WidgetManager to widget/ Reverted IChildWidget to an interface, not an abstract class. Introduced a work-around for a compiler problem. May not cover all cases.
author Diggory Hardy <diggory.hardy@gmail.com>
date Fri, 11 Sep 2009 20:56:53 +0200
parents 3d58adc17d20
children d5d5fe04ca6c
line wrap: on
line source

Copyright © 2007-2008 Diggory Hardy
License: GNU General Public License version 2 or later (see COPYING)


In progress:
Made context menus display again.
TODO: investigate why menu items don't show up.
Having setContent recusively call on subWidgets is not quite right: where the addContent function was used to pass a different content, the content should not be reset by a content() call propegated from a parent.
Why is ServiceContent.opCall() called in addition to call from CollapsibleWidget?
Why is ServiceContentList.opCall() not called? Probably because it's callbacks are never called.

Protection and invariants:
    /** TODO: in progess - design of invariants
     *
     * Ideally this wants to be called after minXChange has finished, but not
     * before/during. minXChange is called in 2 cases:
     * 	recursively from a child
     * 	from a change of content (setContent, keyEvent, content callbacks) - these can all be public
     * 
     * So minXChange should not be public? But then the invariant is never called on
     * parent widgets affected by the size change, including many parent widgets
     * where invariants would be really useful.
     */
So make sure draw() and a few others are public, and invariants get called at these points. Thus a lot more must have at least package protection.

Implement a RootWidget moving functionality out of AWidgetManager, etc., now, or later?
RequestRedraw becomes a function of the renderer.



To do (importance 0-5: 0 pointless, 1 no obvious impact now, 2 todo sometime, 3 useful, 4 important, 5 urgent):
Also search for FIXME/NOTE/BUG/WARNING comment marks.
4   Move createWidget code out of WidgetManager.
4   GUI: up-clicks get passed as events and activate objects
3   May be useful to make all widgets override draw() to ensure the invariant runs locally.
3   Closing menus when release-click is not on menu or parent (ordinary & context).
3   Dragging and dropping of editable data: should content immediately appear as being dragged?
3   Dragging from anything other than AStringContentWidget.
3   Single-line edit: pressing return should lose keyboard focus and change value
3   Enable dragging from more widgets: bool content, enum
3   Content: setContent specialisations, opAssign should reject more values (particularly for BoolContent).
3   Widget saving: how to deal with modifier functions, esp. when they discard parameters? Remove feature except for dimdata and handle gui editing separately?
3   Windows compatibility - no registry support (useful to find path).
2   Layout spacing is present between sub-widgets of zero size
2   Optimise: memory/reuse of popupContext and dragContentDisplay (in WidgetManager).
2   Check for unnecessary redraws (associated with mouse movement, not clicking).
2   First glyph drawn incorrectly in release mode - ??
2   glBindTexture not working with non-0 index - perhaps use a higher level graphics library at some point.
2   Popup help boxes on hover/right click to display content description.
2   Options need a "level": simple options, for advanced users, for debugging only, etc.
2   Command-line options for paths to by-pass normal path finding functionality.
2   Sensitivity adjustments. From es_a_out:
        /+ FIXME: revise.
        + I can't see any point using HALF_RANGE here, since it should really be used dependant on
        + the device attached, not the axis. Also what about adjusted range like X3's throttle?
        +
        + Sensitivity: is this the right place to adjust it? For things like throttle where the
        + ends of the interval must remain fixed, multiplying cannot be used to adjust and adjusting
        + the curve via a power function doesn't seem to be what we want. For things where the
        + end points needn't remain fixed, multiplying seems the right thing to do, but cannot be
        + done here since we don't know the end points can be changed.
        
        real y = x;
        uint conf = s.pop();
        enum : uint {
            HALF_RANGE	= 0x8000_0000u,
            SENSITIVITY	= 0x0080_0000u,
        }
        // Convert ranges into standard intervals (with or without reverse values)
        if (conf & HALF_RANGE) y = (y + 32767.0) * 1.5259254737998596e-05;	// range  0.0 - 1.0
        else y *= 3.0518509475997192e-05;					// range -1.0 - 1.0
        real a;
        if (conf & SENSITIVITY) a = s.pop();
        /+ When a global sensitivity is available (possibly only use if it's enabled)...
        else a = axis.sensitivity;
        y = sign(y) * pow(abs(y), a);		// sensitivity adjustment by a +/
        myThis.axis[cast(inputID) s.pop()] = y;
        +/
1   Remove ability to scan, then load, mergetag sections. Not so necessary with section creator callback and allows "sliding window" type partial buffering. Also remove dataset and force use of section creator callback?
1   File loading from compressed archives and/or binary archives.