Search Unity

New UI Widgets

Discussion in 'Assets and Asset Store' started by ilih, Feb 11, 2015.

  1. ilih

    ilih

    Joined:
    Aug 6, 2013
    Posts:
    1,416
    There are a few ways to fix it:
    1. replace line
      UIWidgets.UtilitiesCompare.Compare(x.catRarity, y.catRarity);

      with
      x.catRarity.Compare(y.catRarity);

      at ComparersAcCatData.cs.
      After recompilation widgets generation will be automatically continued
    2. or update to v1.15.4b3 (this bug was already fixed in that version)
    3. orcomment
      public Rarity catRarity;
      before generation and uncomment after it
    4. or add the following method to the UIWidgets.UtilitiesCompare class:
      Code (CSharp):
      1.         public static int Compare(Enum x, Enum y)
      2.         {
      3.             return x.CompareTo(y);
      4.         }
     
    Last edited: Feb 19, 2022
  2. Arcanor

    Arcanor

    Joined:
    Nov 4, 2009
    Posts:
    283
    Thanks so much for your fast response, on the weekend! You are a fantastic asset developer! One of the very best here.
     
    hopeful likes this.
  3. jGate99

    jGate99

    Joined:
    Oct 22, 2013
    Posts:
    1,945
    Hi @ilih
    ListViewHeader with reveal, can you please provide a sample so i can show or hide it on runtime, so when i hide it listview take full height, but when i show it then it take space just like listview reveal
     
  4. ilih

    ilih

    Joined:
    Aug 6, 2013
    Posts:
    1,416
    I understand right that you need ScrollRectHeader with methods to show/hide instead of auto-show/hide on scroll?
     
  5. jGate99

    jGate99

    Joined:
    Oct 22, 2013
    Posts:
    1,945
    I mean im showing lets say "favourite items" on header review area, when user dont have favourite items then header reveal area is empty and take space. So ideally a way to disable header reveal and list takes all height when no data is there, i can show as an image drawing if not clear
     
  6. jGate99

    jGate99

    Joined:
    Oct 22, 2013
    Posts:
    1,945
    Please check this, let me know if it clears

    upload_2022-2-20_15-33-29.png
     
  7. jGate99

    jGate99

    Joined:
    Oct 22, 2013
    Posts:
    1,945
    Hi @ilih, another question is, i see that there is scroll events example however in ionic we can see "loading more items" right after last item? so can you provide an example which shows both loading more items (assuming there will b more itemst o load) and also a case where it wont show this because all items are loaded
    https://ionicframework.com/docs/api/infinite-scroll
     
  8. ilih

    ilih

    Joined:
    Aug 6, 2013
    Posts:
    1,416
    Added Visibility option to the ScrollRectHeader at v1.15.4b5.
    Check Examples / Table / Table scene how to use it.

    You can use ScrollRectFooter with the enabled ChangeLayout option and toggle Visibility to show/hide "loading more items".
    Check Examples / ScrollRectUtilities / Pull scene and TestScrollRectEventsPull.cs.
     
    jGate99 likes this.
  9. jGate99

    jGate99

    Joined:
    Oct 22, 2013
    Posts:
    1,945
    Hi @ilih,
    Thanks for the update, however Pull scene is not on par with ionic loading.
    For example,
    1- First is it should not load after 3 requests (and doesnt even show loading )
    2- if you look at ionic infinite scroll, it feels like part of list item or last list item, and when there are no more items left there is no empty "margin" , but in your example there is empty margin

    If you can make those improvments that'd be awesome
     
  10. jGate99

    jGate99

    Joined:
    Oct 22, 2013
    Posts:
    1,945
  11. ilih

    ilih

    Joined:
    Aug 6, 2013
    Posts:
    1,416
    Because it is just a sample; now many requests that can be done should be controlled from your code, demo code does not have any limitations on it.
    upload_2022-2-20_22-51-13.png

    Forgot to enable ScrollRectFooter.ChangeLayout; no free space at the bottom with it.
     
  12. jGate99

    jGate99

    Joined:
    Oct 22, 2013
    Posts:
    1,945
    Im seeing wrong result where loading appears automatically even though its not suppose to appear
    OnPullAllowed and direction = down i show loading
    onPullCanceld i hide
    on PullDownEvent i make backend request
    but i notice that loading appears without making backend request

    what could be issue?


    Update: I noticed isInited property in visible is always false for ScrollRectFooter
     
    Last edited: Feb 21, 2022
  13. ilih

    ilih

    Joined:
    Aug 6, 2013
    Posts:
    1,416
    I think you should make "loading" visible in PullDownEvent right before the backend request and hide it after the request is finished:
    Code (CSharp):
    1.         void Pull(ScrollRectEvents.PullDirection direction)
    2.         {
    3.             switch (direction)
    4.             {
    5.                 case ScrollRectEvents.PullDirection.Down:
    6.                     StartCoroutine(SendRequest());
    7.                     break;
    8.             }
    9.         }
    10.  
    11.         IEnumerator SendRequest()
    12.         {
    13.             LoadingInfo.Visible = true;
    14.  
    15.             // backend request
    16.             using (var www = UnityWebRequest.Get(new System.Uri(request)))
    17.             {
    18.                 yield return www.SendWebRequest();
    19.                 // process response
    20.             }
    21.  
    22.             LoadingInfo.Visible = false;
    23.         }
     
    jGate99 likes this.
  14. jGate99

    jGate99

    Joined:
    Oct 22, 2013
    Posts:
    1,945
    This works best, another similar case is where my header size keeps chaning, for example header could have no row (active = false) or (x number of horizontal rows) in that case header height will vary, how should i approach it?
     
  15. Arcanor

    Arcanor

    Joined:
    Nov 4, 2009
    Posts:
    283
    I've tried each of your suggestions, and still having problems.

    1a. After replacing the line in ComparersAcCatData.cs at line 148, then re-running the generator, an editor window pops up asking which files to overwrite. I left the default (all selected), and the generator simply overwrote the fix I'd just applied.

    1b. I tried running the generator a second time, but deselected the ComparersAcCatData class when the window popped up. Now I get a new error:
    Code (CSharp):
    1. Assets\_Custom\Scripts\WidgetsAcCatData\Scripts\ComparersAcCatData.cs(149,23): error CS1061: 'AcCatData.Rarity' does not contain a definition for 'Compare' and no accessible extension method 'Compare' accepting a first argument of type 'AcCatData.Rarity' could be found (are you missing a using directive or an assembly reference?)
    2.  
    2. I've tried downloading the update (your suggestion 2) but when I try to download the latest version for Unity 2020.3.x, your download aborts, and gives an error, saying:
    Code (CSharp):
    1. ERROR: PACKAGE NOT DOWNLOADED FROM ASSETSTORE. YOU SHOULD DOWNLOAD IT FIRST.
    4. Next, I tried your suggestion 4, and added that enum comparison to UIWidgets.UtilitiesCompare. The widget generation did complete, but when I started the generated scene, there were no contents in any of the lists.

    I've not tried your suggestion 3, since commenting out that class member causes many downstream cascading errors that would also have to temporarily be commented out across multiple classes, and it seems it might be difficult to ensure everything gets back to where it started, so I'm holding off on that unless it's the only option.
     
  16. ilih

    ilih

    Joined:
    Aug 6, 2013
    Posts:
    1,416
    You can add the following method to the ScrollRectBlock.cs and use it to change header height.
    Code (CSharp):
    1.         public virtual void SetSize(float size)
    2.         {
    3.             if (IsHorizontal)
    4.             {
    5.                 MaxSize.x = size;
    6.                 Block.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, size);
    7.             }
    8.             else
    9.             {
    10.                 MaxSize.y = size;
    11.                 Block.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, size);
    12.             }
    13.  
    14.             Scroll();
    15.         }
     
    jGate99 likes this.
  17. ilih

    ilih

    Joined:
    Aug 6, 2013
    Posts:
    1,416
    Sorry, I made a typo: should be CompareTo:
    x.catRarity.CompareTo(y.catRarity);
    , not Compare.
    Recompilation did not happen because of it and generation was not continued.

    It is an assetstore bug, sometimes it does not mark the package as downloaded.
    You can send me the invoice number to support@ilih.ru and I add it to exceptions.

    Test content is created only if the data type has a public parameterless constructor.
    It is not a problem, generated widgets should work fine, data can be changed using the Inspector window if type serializable or from code.
     
  18. Arcanor

    Arcanor

    Joined:
    Nov 4, 2009
    Posts:
    283
    UPDATE: I was able to download the beta package per suggestion 2. I was putting in the Order ID and not the Invoice ID (unity doesn't show invoice ID for older orders, so I had to dive deep into my mail archives to find it).

    After installing the new update v1.15.4b5 (for unity 2020.3.x), I'm seeing the same results as 4 above. The generator completes, but there's no content in the listviews when I run the created scene.
    (see attached image)

    EDIT:
    Actually maybe this is the expected result? I will try creating a prefab from the listview and trying it in another scene, with data.
     

    Attached Files:

    Last edited: Feb 21, 2022
  19. ilih

    ilih

    Joined:
    Aug 6, 2013
    Posts:
    1,416
    Yes, widgets will have test content only if the data type has a public parameterless constructor.
     
  20. Stovoy

    Stovoy

    Joined:
    Dec 29, 2014
    Posts:
    1
    When creating a new style via Create -> New Ui Widgets -> Style in the Project explorer / asset folder, I get errors like these:

    Code (CSharp):
    1. NullReferenceException: Object reference not set to an instance of an object
    2. UIWidgets.Styles.Style.UpgradeV4 () (at Assets/New UI Widgets/Scripts/Style/Style.cs:887)
    3. UIWidgets.Styles.Style.Upgrade () (at Assets/New UI Widgets/Scripts/Style/Style.cs:961)
    4. UIWidgets.Styles.StyleMenuOptions.CreateStyle () (at Assets/New UI Widgets/Editor/Styles/StyleMenuOptions.cs:31)
    5.  
    There are other null errors too, if that line is commented out. It seems Accordion is null, Collections is null, RangeSliderHorizontal is null... Am I doing something wrong?
     
  21. ilih

    ilih

    Joined:
    Aug 6, 2013
    Posts:
    1,416
    It is a bug.
    Fix:
    Remove line 31 from file New UI Widgets / Editor / Styles / StyleMenuOptions.cs
    style.Upgrade();

    It is an unnecessary line for the newly created styles.
     
    Stovoy likes this.
  22. Valdarix

    Valdarix

    Joined:
    Jul 24, 2018
    Posts:
    4
    I am attempting to run Generate Widgets on a class I created and I am getting the following error.

    Code (CSharp):
    1. Exception thrown while invoking [DidReloadScripts] method 'SavedGames.Widgets.PrefabGeneratorSave:Run ()' : NullReferenceException: Object reference not set to an instance of an object
    2. UIWidgets.UtilitiesEditor.SetPrefabLabel (UnityEngine.Object prefab) (at Assets/New UI Widgets/Scripts/Utilities/UtilitiesEditor.cs:328)
    3. UIWidgets.WidgetGeneration.PrefabGenerator.Save (UnityEngine.GameObject go) (at Assets/New UI Widgets/Editor/WidgetsGeneration/PrefabGenerator.cs:230)
    4. UIWidgets.WidgetGeneration.PrefabGenerator.Generate () (at Assets/New UI Widgets/Editor/WidgetsGeneration/PrefabGenerator.cs:146)
    5. SavedGames.Widgets.PrefabGeneratorSave.Run () (at Assets/Scripts/Objects/WidgetsSave/Editor/PrefabGeneratorSave.cs:28)
    Very simple class

    Code (CSharp):
    1. namespace SavedGames
    2. {
    3. public class Save
    4.     {
    5.         public string SaveName;
    6.         public string CreatedDate;
    7.         public string LastPlayed;
    8.     }
    9.  
    10. }
    11.  
    I am using Unity 2022.1.0b9 so that may be the issue. I tried searching the forums but can't location any similar issues.
     
  23. ilih

    ilih

    Joined:
    Aug 6, 2013
    Posts:
    1,416
    I am able to reproduce this bug in 2022.1.0b9.
    Now looking for a workaround.
     
  24. ilih

    ilih

    Joined:
    Aug 6, 2013
    Posts:
    1,416
    Source of the problem:
    PrefabUtility.SaveAsPrefabAsset()
    return null for the saved prefabs.

    Workaround:
    Replace 3 methods in New UI Widgets / Editor / WidgetsGeneration / PrefabGenerator.cs
    • Generate()
    • Prefab2Menu()
    • Save()
    Then run generation again if it does not restart automatically.
    After it is finished you need to open the asset at WidgetsSave / Prefabs / PrefabsMenuSave and set references to the created prefabs from the same folder.
    Code (CSharp):
    1.         protected void Generate()
    2.         {
    3.             var destroy_go = new List<GameObject>();
    4.  
    5.             try
    6.             {
    7.                 PrefabsMenu = ScriptableObject.CreateInstance<PrefabsMenuGenerated>();
    8.                 var real_menu = UtilitiesEditor.LoadAssetWithGUID<PrefabsMenuGenerated>(Info.PrefabsMenuGUID);
    9.  
    10.                 var i = 0;
    11.  
    12.                 ProgressbarUpdate(i);
    13.  
    14.                 foreach (var prefab in PrefabsOrder)
    15.                 {
    16.                     var prefab_name = prefab + Info.ShortTypeName;
    17.  
    18.                     if (Info.Prefabs.ContainsKey(prefab) && Info.Prefabs[prefab])
    19.                     {
    20.                         var go = PrefabGenerators[prefab]();
    21.                         if (go != null)
    22.                         {
    23.                             go.name = prefab_name;
    24.                             Prefab2Menu(PrefabsMenu, go, prefab);
    25.                             Prefab2Menu(real_menu, Save(go), prefab);
    26.                         }
    27.                     }
    28.  
    29.                     i += 1;
    30.                     ProgressbarUpdate(i);
    31.                 }
    32.  
    33.                 if (Info.Scenes["TestScene"])
    34.                 {
    35.                     GenerateScene();
    36.                 }
    37.  
    38.                 GenerateDataBindSupport();
    39.  
    40.                 ProgressbarUpdate(ProgressMax);
    41.  
    42.                 EditorUtility.SetDirty(real_menu);
    43.             }
    44.             catch (Exception)
    45.             {
    46.                 EditorUtility.ClearProgressBar();
    47.                 throw;
    48.             }
    49.             finally
    50.             {
    51.                 foreach (var go in destroy_go)
    52.                 {
    53.                     UnityEngine.Object.DestroyImmediate(go);
    54.                 }
    55.             }
    56.         }
    57.  
    58.         protected void Prefab2Menu(PrefabsMenuGenerated menu, GameObject prefab, string fieldName)
    59.         {
    60.             var type = menu.GetType();
    61.             var field = type.GetField(fieldName);
    62.             field.SetValue(menu, prefab);
    63.         }
    64.  
    65.         protected GameObject Save(GameObject go)
    66.         {
    67.             var style = UIWidgets.PrefabsMenu.Instance.DefaultStyle;
    68.             if (style != null)
    69.             {
    70.                 style.ApplyTo(go);
    71.             }
    72.             var filename = PrefabSavePath + "/" + go.name + ".prefab";
    73.             return Compatibility.CreatePrefab(filename, go);
    74.         }
    75.  
    upload_2022-2-25_2-46-0.png
     
  25. Valdarix

    Valdarix

    Joined:
    Jul 24, 2018
    Posts:
    4
    Thanks for the quick workaround. Works beautifully.
     
  26. jGate99

    jGate99

    Joined:
    Oct 22, 2013
    Posts:
    1,945
    Code (CSharp):
    1.         public virtual void SetSize(float size)
    2.         {
    3.             if (IsHorizontal)
    4.             {
    5.                 MaxSize.x = size;
    6.                 Block.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, size);
    7.             }
    8.             else
    9.             {
    10.                 MaxSize.y = size;
    11.                 Block.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, size);
    12.             }
    13.  
    14.             Scroll();
    15.         }
    [/QUOTE]
    Is this also implemnted in latest beta?
    Thanks
     
  27. ilih

    ilih

    Joined:
    Aug 6, 2013
    Posts:
    1,416
    Yes, in v1.15.4b7.
     
    jGate99 likes this.
  28. jGate99

    jGate99

    Joined:
    Oct 22, 2013
    Posts:
    1,945
    Hi @ilih
    I mentioned few weeks ago that Date Scroller scroll really fast and you mentioned to lower scroll sensivity , and it works in Editor using Mouse
    However on mobile using touch its still way fast and seems like scroll sensitivty doesnt seem to take affect there
    Please advise
    upload_2022-3-1_3-7-7.png
     
  29. ilih

    ilih

    Joined:
    Aug 6, 2013
    Posts:
    1,416
    Add following changes to the Scripts / ScrollBlock / ScrollBlockBase.cs:
    • add
      DragSensitivity
      field
      Code (CSharp):
      1. [SerializeField]
      2. public float DragSensitivity = 0.5f;
    • replace line in
      OnDrag()
      method
      old line:
      Scroll(scroll_delta);

      new line:
      Scroll(scroll_delta * DragSensitivity);
    Then you can change DragSensitivity to reduce sensitivity on touch devices.
    1 is the default; a value less than 1 to reduce; a value more than 1 to increase.
     
    jGate99 likes this.
  30. jGate99

    jGate99

    Joined:
    Oct 22, 2013
    Posts:
    1,945
    Thanks another issue related to variable height Header in ListView, i get these errors if my Header is using Vertical Layoyut with content size fitter
     
  31. jGate99

    jGate99

    Joined:
    Oct 22, 2013
    Posts:
    1,945
  32. ilih

    ilih

    Joined:
    Aug 6, 2013
    Posts:
    1,416
  33. jGate99

    jGate99

    Joined:
    Oct 22, 2013
    Posts:
    1,945
    Hi @ilih,
    If you open "ListViewHeader" and remove "LayoutElement" from reveal header, add vertical layout and and content size fitter with prefered height, you will see these errors

    upload_2022-3-1_13-18-18.png

    Interestingly those errors happens on the DefaultItem which has nothing to do wtih Header


    transform.localPosition assign attempt for 'No flag' is not valid. Input localPosition is { 111.000000, NaN, 0.000000 }.
    UnityEngine.Transform:set_localPosition (UnityEngine.Vector3)
    EasyLayoutNS.EasyLayoutBaseType:SetPositions () (at Assets/New UI Widgets/Scripts/EasyLayout/EasyLayoutBaseType.cs:639)
    EasyLayoutNS.EasyLayoutBaseType:performLayout (System.Collections.Generic.List`1<EasyLayoutNS.LayoutElementInfo>,bool,EasyLayoutNS.ResizeType) (at Assets/New UI Widgets/Scripts/EasyLayout/EasyLayoutBaseType.cs:454)
    EasyLayoutNS.EasyLayout:performLayout (bool,EasyLayoutNS.ResizeType) (at Assets/New UI Widgets/Scripts/EasyLayout/EasyLayout.cs:1496)
    EasyLayoutNS.EasyLayout:SetLayoutHorizontal () (at Assets/New UI Widgets/Scripts/EasyLayout/EasyLayout.cs:1287)
    UnityEngine.Canvas:SendWillRenderCanvases ()
     
  34. ilih

    ilih

    Joined:
    Aug 6, 2013
    Posts:
    1,416
    Tried it, no errors.

    Please try to check the RectTransform values of the DefaultItem and all of its parent game objects in the hierarchy.
    Probably one or more of them have NaN value.
     
  35. jGate99

    jGate99

    Joined:
    Oct 22, 2013
    Posts:
    1,945
    Hi @ilih
    Please check this,
    This will throw error, however if you uncheck/disable vertical layout and content size, then no errors happens
     

    Attached Files:

  36. ilih

    ilih

    Joined:
    Aug 6, 2013
    Posts:
    1,416
    I checked, still no errors.
    What Unity version are you using?
     
  37. jGate99

    jGate99

    Joined:
    Oct 22, 2013
    Posts:
    1,945
    upload_2022-3-1_20-19-6.png
    According to changelon v1.15.4 ui widgets
     
  38. ilih

    ilih

    Joined:
    Aug 6, 2013
    Posts:
    1,416
    Fix:
    1. method
      Init()
      in Scripts / ScrollRectUtilities / ScrollRectBlock.cs
      add line
      LayoutRebuilder.ForceRebuildLayoutImmediate(Block);

      before line:
      MaxSize = Block.rect.size;
    2. method
      VisibilityRate()
      in Scripts / ScrollRectUtilities / ScrollRectBlock.cs
      old line:
      var visible_rate = 1f - Mathf.Clamp01(scroll / size);

      new line:
      var visible_rate = (size == 0f) ? 0f : 1f - Mathf.Clamp01(scroll / size);
     
    jGate99 likes this.
  39. jGate99

    jGate99

    Joined:
    Oct 22, 2013
    Posts:
    1,945
    Is this and time scroller available in new beta?
     
  40. ilih

    ilih

    Joined:
    Aug 6, 2013
    Posts:
    1,416
    this fix is not included yet, time scroller is available.
     
    jGate99 likes this.
  41. jGate99

    jGate99

    Joined:
    Oct 22, 2013
    Posts:
    1,945
    It solves those errors but header gets resized however list view doesnt get that headaer is now small height wise and there is gap between
     
  42. ilih

    ilih

    Joined:
    Aug 6, 2013
    Posts:
    1,416
    Please try v1.15.4b8
    You also will need to change
    ScrollRectHeader.BaseMargin
    value to base value
    Layout.MarginTop
    (when header hidden).
     
    jGate99 likes this.
  43. jGate99

    jGate99

    Joined:
    Oct 22, 2013
    Posts:
    1,945
    I set baseMargin = 0 and now it works automatically
    Thanks
     
    Last edited: Mar 3, 2022
  44. ilih

    ilih

    Joined:
    Aug 6, 2013
    Posts:
    1,416
    In previous versions, you needed to set
    EasyLayout.MarginTop
    = margin (default is 5) + header height (36) = 41.
    Because you use a header with variable height this way will not work.
    Instead of it, you need just set
    ScrollRectHeader.BaseMargin
    = margin (default is 5).
    upload_2022-3-3_18-57-16.png
    upload_2022-3-3_19-1-26.png
     
  45. ilih

    ilih

    Joined:
    Aug 6, 2013
    Posts:
    1,416
    Important Notification

    I should notify about the current state of things:
    There is a risk that I physically not be able to continue support.

    Risks:
    • possible full internet ban: access can be blocked by global providers or russian government
    • sites ban: a lot of sites blocked, often bans also hits unrelated sites; technically VPN can help, but global payments providers (visa, mastercard, paypal, etc) are no more available, so all paid services also not available
    • no more CPU and other hi-tech supplies: in case of PC failure will be very hard to repair it
    I'm not sure I've listed all of them, probably will be more.

    For now, support, bug fixes, development going as usual.
    Currently, I am looking for a job with relocation outside of russia; it can solve mentioned risks.


    P.S.
    I do not support the so-called "special military operation" in Ukraine and did not vote for Putin and his party.
     
    Last edited: Mar 9, 2022
    SeerSucker69, jGate99 and hopeful like this.
  46. jGate99

    jGate99

    Joined:
    Oct 22, 2013
    Posts:
    1,945
    Hi @ilih
    If you look at these 2 videos
    https://we.tl/t-lGml94ipGT

    You'll notice that list view with small item height scrolls fast (or atleast seems to) and item heigh big scrolls slow (or it seems to)
    so how can i make scrolling fast for a listview with big item height?
     
  47. ilih

    ilih

    Joined:
    Aug 6, 2013
    Posts:
    1,416
    I added ScrollRectDragSensitivity component in v1.15.4b9
    Add it to ScrollRect and change the Sensitivity option.
    1f is the default drag speed
    more than 1 to increase
    less than 1 to decrease
    negative to drag in a reverse direction
     
    jGate99 likes this.
  48. jGate99

    jGate99

    Joined:
    Oct 22, 2013
    Posts:
    1,945
    It works in Editor, but on android big list barely scrolls, im gonna send you project (where there is just 3 list, small, big and big fast using your ScrollRectDrag component) so its easier for you to test and debug
    including apk
     
  49. ilih

    ilih

    Joined:
    Aug 6, 2013
    Posts:
    1,416
    I checked android demo.
    From what I found: scroll speed itself is okay, but inertia is not, big lists are stopped almost immediately.

    Fix: try to remove Scrollbar reference and check how inertia works without it.
    If scrollbar is needed then it can be fixed with another script.
    upload_2022-3-11_22-3-6.png
     
    jGate99 likes this.
  50. jGate99

    jGate99

    Joined:
    Oct 22, 2013
    Posts:
    1,945
    @ All the New UI Widgets Happy Customers

    As you can see in whole thread how ilih provided unmatched support over the years, and turned this ui library into one and only, there is no alternate for it, As i'm myself a happy customer so in these dire times, i'd request you all to buy another copy for New UI Widgets to support him and show your appreciation.

    I just bought mine and i hope everyone who got benefit from New UI widgets'd buy it too
     
    cgrow67 likes this.