[x] convert original specific theme properties into settings
[x] for these settings have settingName = {instanceName, propertyName, values}
[x] convert properties (such as cellsize, imageSize, orientation, etc) to settings.propertyName and introduce internal :set method and a behaviour table to make reverting to states a lot easier
[x] rename .objects to .instances
[x] rename all instances to more obvious name (e.g. instead of 'label' and 'notification' have 'noticeLabel' and 'noticeContainer'
[x] major revamp themes so that simply go:
toggleTweenInfo = xyz,
selected = {
settingName = settingValue,
},
deselected = {
settingName = settingValue,
}
[x] have a themes folder which includes themes like Default and Blue, then whenever a theme or theme setting is missing refer to Default
[x] :_update(settingName, toggleState) method which takes the settings associated instances and property and applies the appropriate value. If value nil, use deselected value (if that not present, cancel). If value == the value it already is, do nothing. If toggleState not specified, default to self:getToggleState(self.isSelected)
[x] :updateAll(toggleState) calls update for all settings with associated instances
[x] apply default theme on construction
[x] determine how to limit/change settings for features such as tips, captions, etc to certain devices (console, mobile, PC) then get rid of properties like consoleTip, etc
[x] introduce set and get methods, specifying toggleState or defaulting to both/deselected, for applying and retrieving settings
[x] when set is called, also check for an associated event/signal and fire
[x] add the end of every setting method, include ability to specify toggleState, "deselected", "selected" or "both"/nil
[x] convert setDeselected setSelected image into this
[x] only fire/change within _update if selected is different to deselected
[x] replace iconDetails with simply icon
[x] have previous value support (e.g. for iconcontroller line 285), maybe additional parameters setPrevious and getPrevious
[x] update icon controller so it does icon:get("settingName", self:getToggleState()) instead of icon.OLD_SETTING_OR_PROP
[x] make sure theme modifications are inline with new system
[x] when topbar icons are updated and move, make sure to calculate based upon icon._settings.settingName.values[toggleState] instead of their physical size (as items can be tweening)
[x] complete setTip and displayTip, then do same for caption
[x] rename setToggleMenu to setToggleItem (while keeping original as a hidden alias)
[x] convert all controller methods to .method (from :method)
[x] rename getAllIcons to getIcons
[x] give setLabel setText alias
[x] improve setCellSize so it can literally change the shape of the cell (Important for dropdowns
[x] make sure features like tips, containers, labels, images, etc scale correctly when the icon container changes size (e.g. when enlarged with set cell size)
[x] introduce ability for icons to be solely text
[x] replace terms 'scale' with size when using UDim2.new (e.g. iconSize, consider adding cell term)
[x] introduce :setLabelYScale()
[x] introduce :setImageYScale()
[x] introduce :setImageRatio()
[x] set the cells size right away (not in update method) and retrieve its width later by doing XOffset + (XScale * parent absolute X)
[x] define all relevant details (:get()) and return false if value == nil
[x] calculate the Y bounds based upon above formula. Set the limit to Scale 1, else 320 offset). If text bounds exceed, expand cell size up to width limit
[x] provide rich text support
[x] test and refine all of above
[x] update and test captions
[x] FOR CONSOLE:
[x] have tip appear below B button
[x] fix the reset button for PC-controller (IMPORTANT: this is likely cos im an idot and forgot the 2nd return value. also consider what happens when 'additional' is set. is the current value set, or previous? how does this impact? ok great thats all my 'last-minute before i fall asleep thoughts' g night
[x] fix tip bug for non-tip icons (e.g. settings for test place) which randomly appear when clicked
[x] test toggle state
[x] update all topbar cells when an icon changes size when toggled
[x] controller mode 'different toggles sizes' does not work
[x] when controller plugged in all icons get set to right
[x] CRITICAL BUG: every 5 ish plays none of the icons apply their additional methods. this is likely due to a cicular require, explore and fix
[x] introduce icon:setName() and IconController.getIconByName
[x] introduce events IconController.iconAdded and IconController.iconRemoved, and introduce method IconController.updateTopbar
[x] if order not specified, generate own count and do 1 + i
[x] Still have icons traceable within IconController so they can be repositioned
[x] Redo updated listen event and updater
[x] Have methods return self to allow for chain methods
[x] Remove name parameter and internal name dependencies
[x] When destroyed, make sure to remove from IconController list
[x] introduce constructor .mimic(coreIconName) to replace .createFakeChat and .removeFakeChat
Dropdowns
[x] icon:setDropdown(arrayOfIcons) - make dropdown a scrolling frame and have setting determining how many items it can contain and how wide the frame can be in pixels. Explore UILists and DisplayOrder to achieve this. Then parent children icons to this dropdown frame and set x scale to 1. Call icon:leave() before setting
[x] icon:leave() - leaves any dropdown or menu it's in
[x] if a dropdown is re-set, first call getDropdownItems and call :leave() on the remaining icons
[x] order is associated icons by order (look at display order uilist thingy)
[x] have frame expand to max icon (i.e. 82 + 8 in the test place)
[x] set canvas size correctly
[x] sort by ascending not descending
[x] have first hidden icon show half
[x] create a caption transparency blocker and make visible when dropdown with BackgroundColor (128, 128, 128), BackgroundTransparency (0.25),
[x] make dropdown captions and labels work on mobile when dragged over and for bottom ones below clipsdescendants
[x] have dropdown frame align relative to its icons alignment. Consider maximum boundaries, use math.clamp
[x] have dropdown parent by default left click, but also introduce theme settings to disable this and enable right click and long press (maybe via settings). See below
[x] dropdownBindToggleToIcon
[x] dropdownToggleOnLongPress
[x] dropdownToggleOnRightClick
[x] dropdownCloseOnTapAway
[x] have parent icon display total notices of all sub icons, then hiding these when selected
[x] introduce a notice tween and make sure all notices fade in and out
[x] have notices work for icons that call notify() then set to a dropdown
[x] have notice count of parent icon disappear when a child icon has :leave() called
[x] test calling icon:leave()
[x] set chat display order and/or hide chat and playerlist when overlapping
[x] dropdownHideChatOnOverlap
[x] dropdownHidePlayerlistOnOverlap
[x] Fix when controller mode enabled and disabled
[x] fix controller capture selection - only select icons that are visible (not ones within hidden dropdowns, menus, etc)
[x] Also fix mid set big icon size text overlap bug
[x] add click sound as a theme setting (replace with previous global one)
[x] add delay to select as it sometimes does not work when controller mode toggled
[x] if within dropdown for controller mode then click return icon then does not deselect
Menus/Expanders/Toolbars
Similar to dropdowns but function horizontally (i originally called them subicons)
[x] Replace subicons with this
[x] have canvas position remain the same for both dropdowns and menus when toggled
[x] sort dropdown and menu icons by :get(order) before calculating container/scrolling frame size
[x] a theme setting to determine whether icons layout leftwards or rightwards
[x] for the global updateTopbar thingy, account an icon with a dropdown as a singular icon, with additional size based upon its menu descendants. ignore icons that belong to a dropdown or menu.
[x] test all settings like right click, etc
[x] try chain dropdowns and menus (dropdown-dropdown, menu-menu, dropdown-menu, menu-dropdown)
[x] to make chain icons work, the positions and sizes of icons with dropdowns/menus which have parent icon dropdowns or menus needs to be manually set. to achieve this do:
[x] remove the original clipdescendant 'solution' and commit files
[x] setup menu opened and closed events
[x] when opened, set 'ignoreClipping' to true for the container instance and call _update
[x] within _update, check for ignoreClipping. if true, and 'fakeInstance' does not exist, then create a copy of the original instance and parent original to the activeItems folder
[x] whenever a size or position interpolation is called, apply this to the fakeInstance instead, then create a separate relative one to the original instance (ideally avoid additional changed events, and if needed, add them to the maid)
[x] when ((closed or ':leave') and ignoreClipping == true), set ignoreClipping to false and call _update
[x] within _update, check for ignoreClipping. if now false or nil, and 'fakeInstance' does exist, re-parent the original instance to the parent of the fake, then destroy the fake
[x] if canvas size changed, wait small delay until finished moving then call topbarupdate
[x] enable dropdowns to inherit dropdowns
[x] enable menus to inherit menus
[x] once dropdowns and menus are complete, introduce an auto-overflow icon (...) on both left and right. for each do:
[x] construct an overflow icon and hide
[x] when topbar updated...
[x] A = return absolute left or right vector of overflow icon (the one nearest to their own icons)
[x] B = return nearest position of input other-alignment icon (i.e. mid or opposite-alignment)
[x] from closest to furthest icon within your alignment do (if not == overflow)
[x] if icon visible and if B </> A then
[x] give icon to icon overflow dropdown
[x] if icon has dropdown, convert to menu
[x] if overflow not visible then show
[x] consider breaking
[x] for every icon within overflow dropdown do
[ ] if B >/< A then
[x] leave icon
[x] if icon was a dropdown, convert to dropdown
[x] if #overflowicons == 0 then hide overflow
[x] infinite recursion bug when overlap begins
[x] opening/closing of menus does not trigger overlap
[x] what happens if no right (when left) icons
[x] have ... fade in appear for viewport boundaries
[x] now test and ensure it works on right side
[x] what happens if no left (when right) icons
[x] the ... transition for right overflow is not smooth
[x] the very left boundary (for right icons) appears slightly off (something to do with dropdown alignment)
[x] what happens if left overlaps with right?
Additional
[x] add Destroy upper case alias
[x] Important: determine a way for external applications (such as Nanoblox) to check for TopbarPlus within that server first, then only if not present, use internal. Maybe have a module called 'TopbarPlusReference' which gets parented to ReplicatedStorage
Themes and Settings
[x] rename all instances to more obvious name (e.g. instead of 'label' and 'notification' have 'noticeLabel' and 'noticeContainer'
toggleState
, "deselected", "selected" or "both"/nil[x] when topbar icons are updated and move, make sure to calculate based upon icon._settings.settingName.values[toggleState] instead of their physical size (as items can be tweening)
General Improvements
icon.new(name, imageId, order, label)
toicon.new(name, order, imageId, label)
Simplify and Enhance
Dropdowns
Menus/Expanders/Toolbars
Similar to dropdowns but function horizontally (i originally called them subicons)
Additional
Chat Mimic Icon Bugs