monomer/tasks.md

598 lines
32 KiB
Markdown
Raw Normal View History

2020-03-31 06:14:52 +03:00
- 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?
2020-04-07 07:04:55 +03:00
- We already provide this with the State monad and corresponding lenses
- Improve mouse support/current state of mouse and keyboard for event handling
2020-04-11 23:31:55 +03:00
- 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?
2020-03-31 06:14:52 +03:00
- How will long running (i.e., not immediate) user tasks will be handled?
2020-04-28 00:29:28 +03:00
- Using local coordinates for widgets **CANCELLED**
- How do we adjust current displacement?
2020-04-28 01:42:54 +03:00
- Track drawing operations made by a Widget
- Reorganize drawing operations
2020-04-07 07:04:55 +03:00
- Stop, think and design
2020-03-31 06:14:52 +03:00
- How should all of this be organized?
2020-07-14 01:38:51 +03:00
- How should modules be laid out?
2020-05-04 07:33:44 +03:00
- What are good interfaces for the different parts of the system?
2020-03-31 06:14:52 +03:00
- Does it make sense that handleEvent is the only pure function in a widget?
2020-04-28 00:29:28 +03:00
- Based on the previous design, refactor modules
- Current massive refactor
2020-05-31 02:03:45 +03:00
- 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)
2020-05-31 02:03:45 +03:00
- 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
2020-07-14 01:38:51 +03:00
- Maybe Data.Dynamic can be used, but currently abandoned
2020-05-31 02:03:45 +03:00
- 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
2020-06-08 21:25:52 +03:00
- Create composite widget, allowing isolated event handling and UI creation
2020-06-06 06:19:21 +03:00
- Create application widget, based on composite
2020-05-31 02:03:45 +03:00
- Remove UserTask concept, handle it as WidgetTask
2020-06-06 06:19:21 +03:00
- 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
2020-06-15 00:53:04 +03:00
- 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
2020-06-17 22:15:17 +03:00
- 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)
2020-06-03 05:23:23 +03:00
- 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
2020-06-24 06:45:57 +03:00
- All this is needed for dropdowns, but it's also useful for tooltips
2020-06-26 01:56:00 +03:00
- Create Dropdown
2020-04-28 00:29:28 +03:00
- Improve hstack/vstack
- If available space is greater than requested, do not apply resizing logic
2020-04-28 00:29:28 +03:00
- 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
2020-04-28 00:29:28 +03:00
- Could container handle padding and centering?
2020-06-30 01:50:05 +03:00
- No, staying how it is now. It does not disallow having a container, of course
2020-04-28 00:29:28 +03:00
- 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
2020-05-31 02:03:45 +03:00
- Improve FixedSize. Consider adding min/max width/height
2020-06-30 01:50:05 +03:00
- Not for the moment
2020-04-28 00:29:28 +03:00
- Improve ergonomics
- https://hackage.haskell.org/package/string-interpolate
2020-04-28 00:29:28 +03:00
- Check if advanced type level features would improve the design
- Check what syntax extensions can be abused to make life easier
- https://limperg.de/ghc-extensions/#basic-patterns
- https://limperg.de/ghc-extensions/#datakinds
- Maybe -> https://typeclasses.com/extensions-intro
2020-04-28 00:29:28 +03:00
- Look for ways that allow both lenses and user events to be used in the same widget
2020-06-06 06:19:21 +03:00
- Most likely through a Default instance
2020-04-28 00:29:28 +03:00
- 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
2020-07-03 23:22:03 +03:00
- Fix border drawing. Handle simple case (more efficient)
- Fix scroll click navigation
2020-07-03 23:22:03 +03:00
- 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
2020-07-11 04:08:19 +03:00
- Add support for scroll requests from children
2020-06-26 01:56:00 +03:00
- Improve Dropdown
- Expose customizable interface
- Request scroll when needed
2020-06-28 03:03:06 +03:00
- Validate Maybe values are supported
- Create nullable version which takes care of fmapping traversable with Just
2020-07-12 03:48:26 +03:00
- Check why vstack fails when using [spacer, listView]
2020-07-12 22:53:48 +03:00
- Remove status from Click event. Add ButtonPressed and ButtonReleased events
2020-07-14 01:38:51 +03:00
- Change order of parameters. We should always pass _old_ before _new_
2020-07-08 05:23:13 +03:00
- Unify criteria for instantiation
- Component name without underscore receives parameters positionally
- Component name with underscore receives Config instance
2020-07-15 02:53:31 +03:00
- If two flexible sized and one remaining elements are in a vstack, problems arise
2020-07-14 06:05:35 +03:00
- 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?
2020-06-24 06:45:57 +03:00
- Try to unify path handling on widgetFind and widgetNextFocusable
2020-07-18 22:36:59 +03:00
- 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)
2020-07-19 04:29:48 +03:00
- 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
2020-07-30 07:39:48 +03:00
- Format code!
2020-08-08 02:37:15 +03:00
- Use newtypes whenever possible
2020-08-05 08:11:09 +03:00
- Make types Lens friendly
- Use lenses whenever they make the code clearer
2020-08-05 22:51:20 +03:00
- Use Lenses for Main/Core.hs' updateInputStatus
- Create Lenses for Graphics/Types.hs
2020-08-17 02:26:57 +03:00
- Make BaseWidget and BaseContainer use a custom type instead of just Widget. Maybe also rename them?
2020-08-17 21:15:51 +03:00
- 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
2020-08-20 06:29:29 +03:00
- Rename policy... to policyW/H
2020-08-11 03:08:50 +03:00
- Create Checkbox
- Create Radio
2020-08-19 06:04:11 +03:00
- Reorganize Drawing (move helpers to bottom)
- Create Image
2020-08-30 07:19:54 +03:00
- Add config for Label to choose from: Overflow | Cut (better name?) | Ellipsis
2020-09-01 02:43:03 +03:00
- 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
2020-08-30 07:19:54 +03:00
- 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
2020-09-11 08:13:23 +03:00
- Further textField improvements
- Add support for validation
2020-09-14 03:21:33 +03:00
- Add max length limit
- Add range limit
- Initialize validators (maybe input is invalid and that needs to be signaled)
2020-09-26 07:44:54 +03:00
- Think widget config in a similar way to style config (combinator functions)
2020-09-22 22:38:48 +03:00
- textField should support textFieldV and validInputV
2020-09-26 23:44:47 +03:00
- 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?
2020-10-01 05:27:36 +03:00
- Add options to label/button (ellipsis/cut)
2020-10-02 02:50:35 +03:00
- Add support for urls to image widget
- Add options to image widget (stretch/crop/etc)
2020-09-30 06:09:33 +03:00
- Check if re-adding image on render should be inside lock
2020-10-05 20:44:48 +03:00
- Improve spacer
- Remove Tree
- Check why image dissapears when model changes (missing merge)
2020-10-05 20:11:04 +03:00
- Reorganize modules.
- Common and Widget merged into new Core?
- Widget.Widgets moved to Widget?
- WidgetCombinators and StyleCombinators merged into a single Combinators?
2020-10-05 20:44:48 +03:00
- 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)
2020-10-05 23:10:08 +03:00
- Simplify Main.hs by abstracting SDL initialization
2020-10-09 23:13:30 +03:00
- 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?
2020-10-09 23:13:30 +03:00
- Make label use fixed height by default
- Do not draw non visible items in grid/stack (outside viewport)
- Apply scissor
2020-10-05 20:11:04 +03:00
- WidgetRequest for error messages? Probably not worth it
- Maybe provide a config where a notification/lens can be sent?
2020-09-25 02:32:59 +03:00
- Fix dropdown issues
2020-10-05 20:11:04 +03:00
- Show listview in appropriate location (if dropdown is at the bottom, the listView should be up)
2020-09-25 02:32:59 +03:00
- Implement OnChange/OnChangeReq for listView and dropdown (currently they only implement the Idx versions)
2020-10-15 21:38:14 +03:00
- 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
2020-04-28 00:29:28 +03:00
- Create Dialog
2020-10-14 16:47:18 +03:00
- Receive Title + Message
- Receive Confirm and Cancel actions
- Receive Actions and Labels
- Receive title, body and buttons (actions and labels)
- Check if there's a 1px error in click handling
2020-10-21 01:07:51 +03:00
- Seems ok
- Is overlay not being cleared up? Fixed
- Review all uses of viewport
2020-10-21 01:07:51 +03:00
- Add cursor handling
- Most likely handled as part of style. Discard margins, but consider border + padding
- Maybe also add an option like SetOverlay
2020-10-21 07:54:13 +03:00
- 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
2020-10-28 20:34:37 +03:00
- 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
2020-11-06 07:12:59 +03:00
- 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
2020-11-06 07:12:59 +03:00
- Maybe unify criteria on zstack? Top layer config for both focus/click?
- Check getState/merge in all components
2020-11-07 04:35:46 +03:00
- 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
2020-11-10 02:17:16 +03:00
- 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
2020-11-18 22:37:25 +03:00
- 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
2020-11-19 05:01:23 +03:00
- Check label with flexHeight (multilabel was not showing first line if it did not fit)
- Add Maps on Theme to handle user widget settings
2020-11-20 07:37:35 +03:00
- 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)
2020-11-20 20:43:53 +03:00
- Avoid excessive delay on window resize
- Check 1px difference on right side of labels/buttons (probably already fixed)
2020-11-22 17:58:42 +03:00
- 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
- http://supermegaultragroovy.com/2016/12/10/auto-graphics-switching/
- 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
2020-11-29 08:52:36 +03:00
- 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
2020-12-07 01:58:11 +03:00
- 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
- 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
- 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]
- 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)
2020-12-16 05:54:51 +03:00
- 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
2020-12-21 02:54:54 +03:00
- Further textField improvements
- Handle undo history
- Handle mouse selection
- Capture mouse (when outside the window)
2020-12-25 07:27:43 +03:00
- Cmd + arrow should select all
- Check drag select on numeric fields
- Create numeric wrapper that allows increasing/decreasing with mouse
2020-12-21 02:54:54 +03:00
- 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
2020-12-25 07:27:43 +03:00
- 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
2020-09-16 05:00:10 +03:00
- Refactor modules where consistency is lacking
2020-12-28 04:33:36 +03:00
- 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
2020-12-29 20:51:38 +03:00
- 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)
2021-01-04 18:55:08 +03:00
- 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
2021-01-06 16:50:21 +03:00
- 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
2021-01-13 20:13:13 +03:00
- 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?
2021-01-14 22:31:57 +03:00
- When adding image, on failure remove the least used image and retry
- https://hackage.haskell.org/package/lrucache
- 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
2021-01-20 17:02:55 +03:00
- Rename updateSizeReq/nodeUpdateSizeReq in tests
- ZStack should consider all visible layers when requesting size (split modal issue)
- It already works this way. Non issue
2021-01-21 19:23:46 +03:00
- 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
2021-01-27 22:56:32 +03:00
- 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
2021-01-31 21:30:16 +03:00
- 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)
2021-01-31 21:34:30 +03:00
- Add support for nanovg transforms
- nvgGlobalAlpha
- Composite operations?
2021-01-31 23:16:57 +03:00
- Draw child node in Draggable
- Move config of Box before managed widget (and other containers too)
- Create Theme widget to override global theme
2021-02-02 23:33:57 +03:00
- 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
2021-02-08 01:03:57 +03:00
- 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
- 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
2021-02-11 18:58:32 +03:00
- Improve test utilities
- Some way to combine them, avoid this noInit thing, losing of focus, etc
- Test image updating WidgetId/Path
2021-02-15 17:31:04 +03:00
- 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
2021-02-15 17:31:04 +03:00
- 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
- Check order of BtnReleased/Click/DblClick
- Add underline and strikethrough
2021-02-22 22:37:26 +03:00
- 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
2021-02-26 16:05:09 +03:00
- 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
2021-02-27 23:07:08 +03:00
- 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
2021-03-02 02:26:21 +03:00
- 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
2021-03-03 17:18:38 +03:00
- Scroll to focused element on init
2021-03-03 20:12:50 +03:00
- 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
2021-03-07 00:05:15 +03:00
- Animation widgets
- Two simple ones to start with: fade in/out and slide in/out
2021-03-07 02:41:54 +03:00
- Check references to old ctx name
- Pending
- Add header in all files, indicating license and documenting what the module does
2020-11-07 04:35:46 +03:00
- Add license for used fonts, etc
- Add user documentation
2021-01-30 23:04:52 +03:00
- Windows build fix
- https://stackoverflow.com/questions/51275681/how-to-include-a-dependency-c-library-in-haskell-stack
2021-02-07 00:49:51 +03:00
Next
- Reorganize widgets (containers/singles)
- Review returning Maybe from event handlers
2021-02-11 18:58:32 +03:00
- Add examples
- Composite example
2021-02-15 04:03:18 +03:00
- Validate nested structures update correctly when disabling/enabling parent
2021-02-11 18:58:32 +03:00
- Something of generative art (OpenGL example)
2021-01-19 05:53:35 +03:00
Future
2021-03-06 19:25:47 +03:00
- Should DuplicateRecordFields be used in internal widget types to avoid the lens prefixes (which are not used in lenses)
- Rename ListView -> SelectList
- Add support for multiple selection
- Should cascadeCtx be part of widget interface? Maybe it can be handled on init?
- This could avoid rebuilding listView items when hidden/shown
- Add support for multiline text editing
2021-03-03 17:18:38 +03:00
- Maybe offset should be in node info?
- Focus tracking in nested non-expanded scrolls is not possible otherwise
- Maybe IgnoreParentEvents could work?
- Remove attoparsec dependency (only used in numericField to validate format)
2021-01-23 02:15:36 +03:00
- Create Slider
2021-01-19 20:47:10 +03:00
- Create File Selector
- Create GridView
- Adjusts column width and row height (not possible to have both combining hstack/vstack)
2021-01-19 20:47:10 +03:00
- Create Layout with width/heights specified in percents
- Create Color Selector
- Add externalLink component
- https://stackoverflow.com/questions/3037088/how-to-open-the-default-web-browser-in-windows-in-c/54334181
2021-01-19 05:53:35 +03:00
- 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
- https://github.com/ollix/MetalNanoVG
2020-12-16 05:54:51 +03:00
- Implement ImDrawList based Renderer
2020-11-20 07:37:35 +03:00
- 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