mirror of
https://github.com/fjvallarino/monomer.git
synced 2024-11-10 11:21:50 +03:00
37 KiB
37 KiB
-
Done
- Check events only for interested widgets (use focus for keyboard and region for mouse)
- Add handling of disabled widget nodes
- Add handling of custom external actions for widgets
- Do something with return of custom handlers (the exact same thing we do with event handlers)
- Add scroll support
- Add hstack/vstack containers
- Improve input (keyboard) handling
- Implement copy/paste
- Add HiDPI handling
- Handle window resize
- Improve handling of Color (turn to 0.0 to 1.0 instead of 0 to 255? only do it for alpha?)
- Add handling of non visible widget nodes
- Handle widget fixed size
- Add good looking caret to textField
- Add support for onFocus/onBlur
- Maybe we don't need this and we can get by with position in render function?
- Add support for onEnter/onLeave (keep track of previous active widgets)
- We probably need it for drag&drop
- How is the user going to provide state updates?
- We already provide this with the State monad and corresponding lenses
- Improve mouse support/current state of mouse and keyboard for event handling
- Make handleEvent run inside MonadState (required to update user provided lenses) CANCELLED
- Add logic that allows widgets to update user state
- Does it make sense to avoid lenses internally, given that we already include the dependency?
- How will long running (i.e., not immediate) user tasks will be handled?
- Using local coordinates for widgets CANCELLED
- How do we adjust current displacement?
- Track drawing operations made by a Widget
- Reorganize drawing operations
- Stop, think and design
- How should all of this be organized?
- How should modules be laid out?
- What are good interfaces for the different parts of the system?
- Does it make sense that handleEvent is the only pure function in a widget?
- Based on the previous design, refactor modules
- Current massive refactor
- Replace Tree with Containers' Tree
- Fix issue with event handling (click makes everything disappear)
- Fix focus situation (remove _focusRing and replace with single focus, then use widgetNextFocusable)
- Provide focus to render (needed by textField)
- Check if resize children still makes sense (maybe the widget itself can resize on the corresponding event?)
- Handle SetFocus request
- Check if WidgetState is really needed
- Maybe Data.Dynamic can be used, but currently abandoned
- Rethink Tree.Path import
- Clean up Seq imports
- Where can we use Seq? Does it make sense to use it everywhere? What about Traversable?
- Reorganize Common Types. What do other projects do? They should be simple to import and use
- Create composite widget, allowing isolated event handling and UI creation
- Create application widget, based on composite
- Remove UserTask concept, handle it as WidgetTask
- Support long running tasks that can provide events through a channel
- Add Multiple response support (extra value in EventResponse)
- Try to remove all those Typeable requirements in CompositeWidget
- Removing Monad from Widget/WidgetInstance was good enough
- Some Typeable constraints still needed, but user should not need to do anything
- Provide a way of initializing the application
- Probably taking a simple event that is relayed to appEventsHandler is enough?
- Implement Global keys
- Improve merge process
- Add a way to get path of widget given an id, and provide a method to send a message/event (most likely, a new Request kind)
- Rename EventResult to something more accurate
- Replace resultWidget and friends with non-Maybe versions (update widgets)
- Add renderLast function to Renderer, which delays rendering until the first pass is done
- Futher calls to renderLast should not be ignored (tooltip on dropdown menu?)
- A handleDelayedRendering also needs to be added
- We also need a way of receiving events on upper layers
- All this is needed for dropdowns, but it's also useful for tooltips
- Create Dropdown
- Improve hstack/vstack
- If available space is greater than requested, do not apply resizing logic
- Does a styling engine make sense or doing something similar to Flutter is simpler?
- Does keeping style for some things (fixed width/height) make sense?
- Yes! All these properties are staying
- Could container handle padding and centering?
- No, staying how it is now. It does not disallow having a container, of course
- Implement styling engine. Think why Maybe Double instead of Maybe Dimension (to handle pixels, percent, etc)
- Handle this with a widget that takes care of assigning space
- Improve FixedSize. Consider adding min/max width/height
- Not for the moment
- Does keeping style for some things (fixed width/height) make sense?
- Improve ergonomics
- https://hackage.haskell.org/package/string-interpolate
- Check if advanced type level features would improve the design
- Check what syntax extensions can be abused to make life easier
- Look for ways that allow both lenses and user events to be used in the same widget
- Most likely through a Default instance
- Related to previous, look for ways to simplify widget setup. Default instance with common values?
- Find way of providing instance config (style, visibility, etc) before providing children (some sort of flip operator)
- Just provide
style
after children. SwiftUI does it this way
- Just provide
- Fix border drawing. Handle simple case (more efficient)
- Fix scroll click navigation
- Highlight bar when mouse over
- Highlight handle when mouse over
- Handle clicks in bar outside handle
- Handle handle drag
- Mouse over on overlapping axis gives precedence to vertical scroll
- Keep sending mouse move event if mouse is away but button is still pressed
- Handle mouse enter/leave window events
- Add support for scroll requests from children
- Improve Dropdown
- Expose customizable interface
- Request scroll when needed
- Validate Maybe values are supported
- Create nullable version which takes care of fmapping traversable with Just
- Check why vstack fails when using [spacer, listView]
- Remove status from Click event. Add ButtonPressed and ButtonReleased events
- Change order of parameters. We should always pass old before new
- Unify criteria for instantiation
- Component name without underscore receives parameters positionally
- Component name with underscore receives Config instance
- If two flexible sized and one remaining elements are in a vstack, problems arise
- Add renderer parameter to resize. It will be needed for auto adjustable Label and to handle ellipsis in texts
- Maybe creating a record of functions would be useful?
- Besides calcTextBounds, we need isClipboardPaste and isClipboardCopy which could be customizable
- Customization discarded. What would it be needed for?
- Try to unify path handling on widgetFind and widgetNextFocusable
- This is cancelled fo the moment. I can't find a good reason for doing it.
- WidgetEnv was added as a parameter for completeness sake
- This is also needed for widgetUpdateSizeReq and widgetResize
- Generalize the "startFrom" concept of widgetFind (and also validate it's actually well/fully implemented)
- Should Resize be restored? -> Restored
- Make sure enabled/visible attributes are being used
- This needs modifying WidgetContext (former PathContext) to include visible and enabled attributes
- Move widgetPath into WidgetInstance (do it in init/merge)
- Move currentPath into WidgetInstance
- Move focusedPath and targetPath to WidgetEnv
- Visible and enabled would get updated on init/merge
- Format code!
- Use newtypes whenever possible
- Make types Lens friendly
- Use lenses whenever they make the code clearer
- Use Lenses for Main/Core.hs' updateInputStatus
- Create Lenses for Graphics/Types.hs
- Make BaseWidget and BaseContainer use a custom type instead of just Widget. Maybe also rename them?
- Improve styling options. Handle cases for Normal, Hover, Focused with independent background and border
- Add support for dashed borders
- NanoVG does not seem to support this
- If we ever move to Skia, reconsider
- Fix ListView keyboard navigation
- Handle mouse entering/leaving the window
- Rename policy... to policyW/H
- Create Checkbox
- Create Radio
- Reorganize Drawing (move helpers to bottom)
- Create Image
- Add config for Label to choose from: Overflow | Cut (better name?) | Ellipsis
- DrawStyledBackground should draw borders after widget content
- Request text input when text field gets focus (required for mobile)
- Also set TextInputRect
- Improve textField
- Add text selection/editing to textField
- Find non visible character that returns correct height if input is empty
- Can we generalize widgetFind?
- To find widgetInstances that need a specific kind of event (entities that need timeStep)
- Instead of passing Point, pass WidgetQuery ADT. Currently it would support... PointQuery
- Do we need this?
- It is implemented in chore/unify-query. I honestly don't think it's an improvement
- Further textField improvements
- Handle long text and cursor position
- Scissor needed?
- Add support for changing cursor position with mouse click
- Handle long text and cursor position
- Rethink Image handling
- Should image component keep a copy around?
- Should it be provided to renderer every time and, if removed, put back in the list?
- Otherwise, when graphics memory is exhausted new images will not be added (until the widget is disposed)
- Rethink the idea of global theme in WidgetEnv
- Add option to render inner rounded borders with normal outer ones
- Further textField improvements
- Add support for validation
- Add max length limit
- Add range limit
- Initialize validators (maybe input is invalid and that needs to be signaled)
- Think widget config in a similar way to style config (combinator functions)
- textField should support textFieldV and validInputV
- Add mandatory event parameter for V constructors
- Why does the model update when trying to input a char in FloatingInput?
- Focus event not received after clicking and gaining focus
- Rethink focus handling. Maybe return a list of all focusable elements? Currently shift-tab is not possible
- Added a direction parameter to widgetFindNextFocus
- Think about argument position for widgets, in particular listview/radio
- Should value come before items/option?
- Should we use a list of configs instead of <> operator?
- Add options to label/button (ellipsis/cut)
- Add support for urls to image widget
- Add options to image widget (stretch/crop/etc)
- Check if re-adding image on render should be inside lock
- Improve spacer
- Remove Tree
- Check why image dissapears when model changes (missing merge)
- Reorganize modules.
- Common and Widget merged into new Core?
- Widget.Widgets moved to Widget?
- WidgetCombinators and StyleCombinators merged into a single Combinators?
- Create Lens package. BasicTypes lenses should also be there
- Create separate Util/WidgetUtil (rename Types to WidgetTypes)
- Simplify imports
- Create Lens.hs in each module instead of directory
- Clean up checkbox/radio (fgcolor, etc)
- Simplify Main.hs by abstracting SDL initialization
- Add center, right components based on box
- Validate font exists before using it in NanoVG (crashes otherwise)
- Also added default font
- Check if textBounds is enough, or we're missing descending part of font
- getFullTextSize should be used?
- Make label use fixed height by default
- Do not draw non visible items in grid/stack (outside viewport)
- Apply scissor
- WidgetRequest for error messages? Probably not worth it
- Maybe provide a config where a notification/lens can be sent?
- Fix dropdown issues
- Show listview in appropriate location (if dropdown is at the bottom, the listView should be up)
- Implement OnChange/OnChangeReq for listView and dropdown (currently they only implement the Idx versions)
- Fix issue on scroll. If moved and later expanded, content remains displaced
- Fix text size/cursor position issue
- Create Layer widget
- Add clickOutsideChild in box
- Create Dialog
- Receive Title + Message
- Receive Confirm and Cancel actions
- Receive Actions and Labels
- Receive title, body and buttons (actions and labels)
- Receive Title + Message
- Check if there's a 1px error in click handling
- Seems ok
- Is overlay not being cleared up? Fixed
- Review all uses of viewport
- Add cursor handling
- Most likely handled as part of style. Discard margins, but consider border + padding
- Maybe also add an option like SetOverlay
- Handle findNextFocus in zstack (only consider top layer, unless configured otherwise)
- Keyboard not working on dropdown
- Make sure that focus change requests do not leave overlay if active (most likely an if clause is needed in handleFocusChange)
- Return list of actions instead of Monoid in eventHandler
- Add way of requesting findNextFocus (needed on Dropdown)
- Add way of ignoring unassigned events in stack (or return nothing from findByPoint)
- Update style when merging to avoid recalculating/merging theme every time
- Use theme for all components
- Replace uses of Seq.zip with foldlWithIndex
- Check provided viewport is used correctly
- Provided viewport should consider parent viewport
- Check scroll styling works correctly (contentRect being applied, etc)
- Also handle hover so scrollbars get correct cursor
- Move computeTextRect out of Renderer
- Multiline label
- Check dropdown width/ellipsis
- Button should receive focus
- Move combinators out of exported Core (but still export from Monomer)
- Cancelled, not sure if it's an improvement
- Maybe unify criteria on zstack? Top layer config for both focus/click?
- Check getState/merge in all components
- Further textField improvements
- Check displaced textField when adding characters on right align
- Also, when right is reached from left, everything is pushed out of screen
- Double clicking on empty puts the cursor at the end of ghost character
- Right aligned version has cusor overlaid (add caret size to offset in specific cases)
- Check clipboard
- Check displaced textField when adding characters on right align
- Check Container thing in hover adding columns (not targetValid = Nothing should be removed)
- Add missing keyboard functions in Event
- Handle onBlur/onFocus in all focusable widgets
- Find way of avoiding hover effects when widget is not in the top layer
- Hover should only be active for top level item
- I need to think a way of setting a layer state for zstack
- Hover should only be active for top level item
- Maybe isPointInViewport should be replaced by something specific for each Widget
- Generalized utility functions to use them in specific widgets
- The findWidgetByPoint route is problematic, since it can lead to mutual recursion
- TextStyle changes CANCELLED
- TextOverflow in TextStyle?
- Add Bold/Italic support (instead of different Font for each case)
- Button should change color when clicked/actioned
- Check label with flexHeight (multilabel was not showing first line if it did not fit)
- Add Maps on Theme to handle user widget settings
- Handle window title, maximize, etc
- Also handle as requests?
- Provide a way of exiting application/close window handler
- Think about label size (fixed by default? lower factor)
- Avoid excessive delay on window resize
- Check 1px difference on right side of labels/buttons (probably already fixed)
- VStack should set itself to a fixed size if all children are fixed
- Remember use case for containerStyleOnMerge (scroll size, but can't replicate)
- Using it makes everything painfully slow
- Most likely related to focus of nested components. Maybe filtering move/hover out is enough?
- Now fixed, but still need to test old use cases work fine
- Default to integrated graphics
- Can we avoid redrawing if no event happened?
- Action events still cause rendering to happen (otherwise it's painful for widget developers)
- Move events need to request rendering
- Improve listView performance (avoid merge/resize)
- Maybe some composites could have a typeclass for its constructor, and react differently if provided Eq?
- Still need to provide method for custom mergeNeeded check
- Avoid forced resize after merge (if an item needs more space, it should request it)
- Avoid rebuilding glyphs if viewport did not change for label
- Fix dialog not generating RenderOnce
- The issue was in zstack, where changing visible items should generate a resize request
- Review composite initialization. View creation can be moved to init
- Check if passing model directly is still correct
- Test nested composites
- Update signatures of methods to use Widget/WidgetInstance as needed (restrict what can be changed)
- Change WidgetResult so WidgetInstance is Maybe
- This allows having a Default instance and later use lenses instead of the resultX functions
- Remove Maybe from handleEvent/handleMessage return type
- Reverted. Reward was low, and getSizeReq/resize were still inconsistent
- Change WidgetResult so WidgetInstance is Maybe
- Can _wiChildren be removed from Widget and only be kept in Container?
- Postponed/cancelled. After all the refactoring attempts regarding WidgetResult, I'm not sure about the benefits
- Change interfaces
- Several items were dropped or implemented and then reverted
- Main reason was requiring explicit Typeable annotations on s and e, which leads to pain on the user's side
- Code complexity also increased for a really small payoff (if any)
- Change return type and the moment when widgetUpdateSizeReq is called
- Comment GlobalKeys out and have Container use its local list of children for merging
- Create WidgetNode type, move Widget/children into it
- Remove type constraints on WidgetInstance
- Change type signatures to use WidgetNode
- Restore GlobalKeys
- Add method to collect tree of WidgetInstances
- Also return map of GlobalKeys
- Several items were dropped or implemented and then reverted
- Do not hover if mouse drag on different widget
- Fix selectOnBlur for dropdown
- Rename WidgetInstance to WidgetNodeStatus (or similar)
- Check dropdown's list not being properly located after resize/scroll (not clear)
- Rename WidgetResult's widget to node
- Remove createThemed and move Alert/Dialog to use composite
- Restore container changes for controlling merge of children (part of reverted scroll changes)
- Draw close button on Dialog
- Check why putting box reduces label's space
- scroll
vstack
(\i -> box $ label ("Label: " <> showt i)) <$> [0..100::Int]
- scroll
- Set focus on ButtonDown, not Click
- Can it be handled in Single/Container?
- Handled in Single, not in Container, since it clashes with children. Handle explicitly on Containers that need it.
- Restore focus to previous widget when zstack changes (dialog situation)
- Add config to invert mouse buttons (Core.hs:211)
- Scroll wheel rate should be configurable, or even depend on content size
- Added a few extra config options (rounded thumb)
- Image
- Does adding function to return imgData from Renderer make sense? Replace imageExists?
- Remove delay logic when adding an image
- Check why after click focus is not immediately shown in listView items
- Further textField improvements
- Handle undo history
- Handle mouse selection
- Capture mouse (when outside the window)
- Cmd + arrow should select all
- Check drag select on numeric fields
- Create numeric wrapper that allows increasing/decreasing with mouse
- Check if SDL can be initialized headless (for tests that involve the API)
- https://discourse.libsdl.org/t/possible-to-run-sdl2-headless/25665/2
- Window not created for the moment, since it's not currently needed
- SDL initialized and clipboard related functionality is now tested
- Add flag in Single to handle Cursor (for inputField)
- Or maybe do as in Radio
- Refactor radio (activeStyle thing)
- Add max/min tests drag on integralField
- Add testing
- Delayed until this point to try to settle down interfaces
- Validate stack assigns space correctly
- Refactor modules where consistency is lacking
- Make sure WidgetTask/Node association is preserved if node location in tree changes
- Button should handle ReleaseBtn instead of Click (allow multi click)
- ZStack should set _weIsTopLayer based on used space
- Reimplement containerIgnoreEmptyClick
- Box should allow setting size of children and ignore the rest
- Does having Cursor in style make sense?
- Keeping it for the moment
- Check multiple resize when opening dialogs
- This was caused by an unexpected need to call beginFrame before any calls to text related functions
- This is most likely a bug, but before this call the reported sizes are different than afterwards
- Remove getSizeReq from Widget interface. Keep it in Single/Container
- Other Widgets should take care of updating those fields during init/merge/handleEvent/handleMessage
- Remove Widget.resizeWidget
- Remove Widget.widgetUpdateSizeReq
- Update Style.handleSizeChange
- Remove old code from Single, Container and Composite
- Make sure Single, Container and Composite update size when needed
- Copy merge logic from Label to Button
- Add containerGetActiveStyle
- Review handleSizeReqChange
- Rethink containerStyleOnMerge (it should really be containerStyleOnEvent and yes we need it)
- Removed, no longer needed (performance issue gone with removal of getSizeReq)
- Listview is not properly changing styles
- Label needs to rebuild its glyphs if style/viewport changes
- Listview needs to update sizeReq of modified items
- If sizeReq changes, it should request ResizeWidgets
- When hover is lost, size is not reduced/recalculated
- Handle Window Lost Focus
- Not needed; I thought it was part of the previous issue
- Rethink, again, order of style merging (focus/hover)
- Focus border gets lost
- Maybe a FocusHover style is needed?
- Merged as: focus <> hover <> focusHover
- Maybe having Active style is a good idea?
- Test disabled state on widgets
- Check Single/Container flags (can some be removed?)
- Reordered and tried to match options in both
- Implement state simplifications on Single/Container
- Also pass state directly to getSizeReq
- Add serialization logic for Widget Tree
- Store state in Widget Tree
- Rethink merge. Maybe we can provide WidgetInstanceNode instead of WidgetNode?
- Add setState method
- Make handling state on Container as easy as in Single
- Add tests for ListView
- Rename tree methods
- Rename MonomerContextPersist
- Make save/restore configurable (app)
- Rebuild composite globalKeys
- Automatically set new WidgetId/Path on Container
- Remove embedded fonts. Rely on loaded fonts, template will also include them
- Restoring should fail if widget tree structure is different
- Image
- Fix crash when adding images
- If called from render, immediate add seems to work.
- Immediate add causes a crash if called from a task (nanovg is not thread safe, so it makes sense)
- Maybe have two versions of add? Two versions of render?
- When adding image, on failure remove the least used image and retry
- Fix crash when adding images
- Active state not working correctly (click button and drag outside)
- Does widgetResize need to return WidgetResult?
- User may want to listen for resize events
- Remove SetFocus from single components (already handled in template)
- Check Input drag release
- Create Split
- Use space proportional to what widgets request
- Create Dial
- Rename updateSizeReq/nodeUpdateSizeReq in tests
- ZStack should consider all visible layers when requesting size (split modal issue)
- It already works this way. Non issue
- Create Focus Memorizer (cancelled, zstack takes care)
- It should handle the situation of closing a dialog and returning to the previous focused widget
- Maybe zstack itself could handle it?
- Rename isWidget... to isNode
- Create Keystroke component (shortcuts and general key handling like Esc for dialog)
- Change modA/modC helpers to be predictable (not Mac OS specific things)
- Maybe inputField should put cursor in the end?
- Unify integralField/floatingField
- Remove Integral
- Add FromFractional instance of Scientific
- Create Tooltip component. It just wraps a given component and draws the tooltip with renderOverlay
- Should Render operations use WidgetId? Review other WidgetRequests
- Prettier mark for checkbox
- Check text baseline
- Create consistent dark and light themes
- Import HTML color names: https://www.rapidtables.com/web/color/RGB_Color.html
- Check active style vs focus (border disappears)
- https://visme.co/blog/website-color-schemes/
- https://coolors.co/91a6ff-ff8811-667761-b80c09-eaf8bf
- Add onResize, onDispose to composite
- Drag & drop for user
- Add attribute indicating if component supports being source/target
- Not needed, draggable component should start a drag operation
- Add new request types (drag started, drag stopped, drag cancelled)
- Add new events (drag hover)
- Add attribute indicating if component supports being source/target
- Add support for nanovg transforms
- nvgGlobalAlpha
- Composite operations?
- Draw child node in Draggable
- Move config of Box before managed widget (and other containers too)
- Create Theme widget to override global theme
- Does it make sense to handle offset
- It would avoid resizing on scroll
- We need to transform events
- This way we avoid having to translate widgets
- We need current transform in WidgetEnv
- Only used for rendering
- hovered would also use it
- We need to set transform on render (and clear it)
- Check scroll in scroll (one with max height)
- Request scissoring only if needed (review components)
- Do after scroll changes are in place (validation purposes)
- Remove Default req from NumericField. Add handling of up/down arrows
- Test drag outside window, release button, come back in
- Add option to avoid adding styles (Container)
- Return widgetInfo instead of just path in widgetFindByPoint
- Add widgetFindByPath
- Do something about Serialise. Temporarily hide from composite?
- Added WidgetModel typeclass. Provides a way of not forcing users to implement Serialise
- Allow opting out of scroll bar overlaid on top of content
- Add scroll focus following
- Resize called multiple times after window resize?
- Not a bug (there were two dropdowns besides the main scroll, hence the three logged resizes)
- Add examples
- Todo List
- Use scroll
- Scroll should auto-scroll to focus
- Todo List
- Add combinator to affect size factor only
- Discarded. A combinator (CmbResizeFactorDim) already exists
- Do something about TextDropdown
- Added S version for Show instances
- Check resize requests on Todo when entering text in description
- Review how sizeReq is updated. Custom user value may be ignored on further resizes
- Improve test utilities
- Some way to combine them, avoid this noInit thing, losing of focus, etc
- Test image updating WidgetId/Path
- Fix cursor change handling
- Children should not change it if they don't have their own icon
- OnLeave should restore the previous icon (use a stack)
- Check StyleChangeCfg
- Check cursor after click (most likely caused by "active" style)
- Remove StyleChangeCfg if possible
- Check dial cursor change
- Restore cursor when it goes outside the window
- Rethink cursor handling
- Maybe wrap result, check if set already posted, etc?
- Restore Widget/Util Types/Lens
- Add scissor to image
- Check split handle size
- Add scrollInvisible option (just set the values in cfg)
- Check icon widget not drawing correctly
- Add examples
- Fetch content from url, show rows of data with embedded images
- Check why border was not shown in some cases (may be ok)
- Improve cursor handling (if children do not have cursor settings they should not change it)
- Re-import Color Table and keep it in original order
- Maybe internally handle focus as widgetId? (use findWidgetByPath)
- Does it make sense to have Alert/Dialog accept a widget?
- Request render when hovering on scroll/thumb
- Add cursor icon unit tests
- Fetch content from url, show rows of data with embedded images
- Check order of BtnReleased/Click/DblClick
- Add underline and strikethrough
- Boolean combinators should have a default non-argument version and an underscore one that receives a boolean
- Maybe label resizeFactor should default to zero?
- Think about using stack resize logic in box
- Add option to modify size req
- Add maxLines config option to label
- Check Fixed+Flex sum/max criteria. Is a new Fixed+Flex type needed?
- Review dialogs after change is in place
- Move SizeReq to Core
- Add concept of active layout direction (needed to have a single spacer/filler)
- Make button use label + box (way too much duplicated code)
- Add option to not use theme on label
- Follow the same ideas as on Dropdown
- Review dialogs after change is in place (button currently uses expandSize)
- Remove clearExtra from dialog buttons
- Make label default to clip text (currently ellipsis). Same for trim
- Think about text related combinators
- Is the Text/text prefix needed?
- TextTrim could be trimSpaces?
- ListView's SendMessage will fail if location changes. Add SendMessageWid?
- Added mechanism to get WidgetNodeInfo from WidgetEnv given an arbitrary path
- Fix books labels
- Check if using WidgetId in MoveFocus and SetFocus is possible
- Auto scroll affects dropdown when listView is displayed
- Ignore overlays if scroll is not an overlay
- Scroll to focused element on init
- Is initPost needed in Container?
- Send message to scroll to reset position when content changes
- This is for listView. Maybe a config argument is needed, since this is not always desired?
- Solved sending a message
- Animation widgets
- Two simple ones to start with: fade in/out and slide in/out
- Check references to old ctx name
- Reorganize widgets (containers/singles)
- Add examples
- Todo should use generated ids instead of indexes
- Review returning Maybe from event handlers (return a single value always)
- Add examples
- Producer example (Binance ticker API)
-
Pending
- Add header in all files, indicating license and documenting what the module does
- Add license for used fonts, etc
- Add user documentation
- Windows build fix
- Simplify Composite. Do not handle events directly, make them go through as a message so they are handled in order
- Does it make sense to merge events into requests?
- Can s type argument be removed from WidgetRequest?
- Better still to add e to make it safer!
- Fix test cases
- Add onMerge config to Composite (needed to request focus in Alert/Dialog)
- handleEventFocusKeep in ZStackSpec
- The issue is caused because ZStack resets focus to previously focused item on layer, while Alert needs to set its focus. Since onVisibleChanged is set later, it misses it. We need to be able to send that request during merge.
- Fix hsplit (when left item is a loaded image all space is assigned to right side)
- Remove serialization logic
- Remove dependencies on CBOR and Serialise
- Remove widgetRestore
- Remove WidgetModel instances, make it a type alias
- Make Eq WidgetRequest require Eq e
- Rename widgetSave to something more appropriate
- Standardize use of Typeable/WidgetEvent/WidgetModel
- Should node come immediately after wenv in Widget methods?
- Is merging Task and Producer a good idea? (most likely not)
- It's clearer for the user to keep them as separate concepts
- Find a way out of currState in getSizeReq (most likely add method back to Widget). It's very confusing and error prone
- Should cascadeCtx be part of widget interface? Maybe it can be handled on init?
- This could avoid rebuilding listView items when hidden/shown
- Not doing it for the time being
- Can Req combinators be removed?
- Maybe create a single use container that sends message on click?
- It works in some cases, not in others (mainly in Dropdown's use of ListView). Not worth doing.
- Add examples
- Something of generative art (custom Widget example)
- Create Slider
- Improve slider rendering when value is small and rounder corners are used
- Maybe using scissor up to desired point, while drawing full rounded rect?
- Show handle/thumb
- Create Color Selector
- Add lens/value version
- Show pattern to test alpha
- Handle blur/focus/onchange
- Add externalLink component
- Add unit tests for new widgets
- Review onChangeReq (a parameter should be provided)
- Also reorder type parameters to be consistent (same order always)
- Top pixel seems to be invisible. Is this macOS title bar related? Is left too?
- Check if Info.plist has a related setting
- This is macOS related. When removing window decorations, all the content is shown correctly.
- Add wheel support to dial and slider
- Use combinators when possible in slider, dial and scroll
- Remember adding _ version for Bool combinators
- Should numeric field continuously update?
- Add wheel support
- Create Datetime field
- Initial value should not be forced.
- Can both direct field and Maybe version be provided?
- Create time component (having them separate is easier)
- Focus follow in nested scroll widgets does not work correctly
- Maybe offset should be in node info?
- Focus tracking in nested non-expanded scrolls is not possible otherwise
- Maybe IgnoreParentEvents could work?
- Rename ListView -> SelectList
- Add support for multiline text editing
- Add main functionality
- Add move to top and bottom, page up and down
- Add test cases
- Add mouse based selection
- Add history
- Remove added whitespace for empty lines
- Add scroll wrapper
- Add cursor following request
- Add select to bottom/beginning
- Fix scroll overlay using client space
- Rename _thsInputNumericStyle
- Rename resultWidget to resultNode
- Remove compositeExt/compositeExt_. Use compositeD_ when needed.
- Add documentation header in source files
- Add documentation to all exported functions
- Review after documenting
- Remove IsString for WidgetType?
- Most likely not needed. Haddock has problems when running outside stack because OverloadedStrings is in package.yaml.
- KeyReleased / BtnReleased is inconsistent. Use a single convention.
- restrictValue -> clamp.
- Split CmbImageFit
- Does adding all the isXXXXEvent back make sense? Added.
- CmbVisible and CmbVisible.
- Add Event Util isXXXX.
- Can validModel (inputField) handle WidgetData instead of only Lens?
- Done.
- Scroll docs for message.
- Check _wniOverlay. Can it be replaced with overlayPath check?
- Maybe modify dropdown to set overlay to the list?
- Fix cursor issue when clicking/closing dropdown
- Fix nested wheel event.
- I accidentally removed IgnoreParentEvents logic.
- Drag select in text area should make cursor visible.
- Remove IsString for WidgetType?
- Complete test cases
- Multiline text editing
- IgnoreParentEvents.
- Improve scroll test cases
- Rename LeftBtn -> BtnLeft
- Add header in all files, indicating license and documenting what the module does
Next
- Create user documentation
- Overview of the library
- Tutorials
- Create ContextMenu (could work similarly to Tooltip)
- Add context button in wenv/config (similar to main button)
Future
- Check if Windows/Linux also miss top pixel
- Fix for all if they do
- If they don't, add custom handling for macOS
- Check cross compilation
- Create File Selector
- Create GridView
- Adjusts column width and row height (not possible to have both combining hstack/vstack)
- Create Layout with width/heights specified in percents
- Add support for multiple selection in SelectList
- Add arrow icon similar to Renoise's
- Think about dashed lines (could be made with an image paint)
- Compare Cairo/Skia/ImDrawList interfaces to make Renderer able to handle future implementations
- Implement ImDrawList based Renderer
- Improve window resize situation
- SDL does not send resize until operation has finished, making content look ugly because it's not updated
- Check SDL_SetEventFilter trick instead of normal polling (https://wiki.libsdl.org/SDL_SetEventFilter)
- SDL supports Drag and Drop integration with OS