Approved
Last Updated: 05 Dec 2019 13:43 by Desislava
ADMIN
Created by: Ivan Todorov
Comments: 3
Category: Panorama
Type: Feature Request
6
This will allow the users to scroll through the tiles in all rows when the available height is insufficient.

WORKAROUND:
 class CustomPanorama : RadPanorama
    {
        RadScrollBarElement vScroll;

        protected override void CreateChildItems(Telerik.WinControls.RadElement parent)
        {
            base.CreateChildItems(parent);

            this.vScroll = new RadScrollBarElement();
            this.vScroll.ScrollType = ScrollType.Vertical;
            this.vScroll.StretchHorizontally = false;
            this.vScroll.StretchVertically = true;
            this.vScroll.MinSize = new System.Drawing.Size(16, 0);
            this.vScroll.Alignment = System.Drawing.ContentAlignment.TopRight;

            this.PanoramaElement.Children.Add(vScroll);

            this.vScroll.ValueChanged += new EventHandler(vScroll_ValueChanged);
            this.PanoramaElement.GroupLayout.RadPropertyChanged += new Telerik.WinControls.RadPropertyChangedEventHandler(GroupLayout_RadPropertyChanged);
            this.PanoramaElement.TileLayout.RadPropertyChanged += new Telerik.WinControls.RadPropertyChangedEventHandler(GroupLayout_RadPropertyChanged);

            this.ScrollBarAlignment = HorizontalScrollAlignment.Bottom;
        }

        void GroupLayout_RadPropertyChanged(object sender, Telerik.WinControls.RadPropertyChangedEventArgs e)
        {
            if (e.Property == RadElement.BoundsProperty && sender == this.GetCurrentLayout())
            {
                UpdateVScroll();
            }
        }

        protected override void OnSizeChanged(EventArgs e)
        {
            base.OnSizeChanged(e);
            UpdateVScroll();
        }

        private void UpdateVScroll()
        {
            vScroll.Maximum = this.GetCurrentLayout().Size.Height;
            vScroll.LargeChange = Math.Max(0, (int)(this.Size.Height - this.PanoramaElement.ScrollBar.Size.Height));

            if (vScroll.LargeChange >= vScroll.Maximum)
            {
                vScroll.Visibility = ElementVisibility.Hidden;
            }
            else
            {
                vScroll.Visibility = ElementVisibility.Visible;
            }

            if (this.PanoramaElement.ScrollBar.Visibility == ElementVisibility.Visible)
            {
                vScroll.Margin = new System.Windows.Forms.Padding(0, 0, 0, this.PanoramaElement.ScrollBar.Size.Height);
            }
            else
            {
                vScroll.Margin = new System.Windows.Forms.Padding(0);
            }
        }

        void vScroll_ValueChanged(object sender, EventArgs e)
        {
            this.GetCurrentLayout().PositionOffset = new System.Drawing.SizeF(0, -this.vScroll.Value);
        }

        private LayoutPanel GetCurrentLayout()
        {
            if (this.ShowGroups)
            {
                return this.PanoramaElement.GroupLayout;
            }

            return this.PanoramaElement.TileLayout;
        }

        public override string ThemeClassName
        {
            get
            {
                return typeof(RadPanorama).FullName;
            }
            set
            {
                base.ThemeClassName = value;
            }
        }
    }
Completed
Last Updated: 23 May 2019 13:19 by ADMIN
Release R2 2019 SP1 (LIB 2019.2.527)
Open the attached project and show the designer. Open the tile's smart tag and try to enter a non numeric symbol for the column and press Enter.
Approved
Last Updated: 21 Feb 2019 11:18 by ADMIN

If i have lots of group, the horizontal axis gets full with the square 4x4 groups, but the vertacal axis has lots of empty space.
I could break the squareness of the groups to make them longer in the vertical axis, but that seems a bit ugly.

However, I cannot seem to find a way to put a group under another group, therefore utilising both the X and Y dimensions well.

Can it be done?



i.e.

--Group 1--   --Group2--

Tile     Tile     Tile     Tile

Tile     Tile     Tile     Tile



--Group 3--

Tile      Tile

Tile      Tile

 

Before (How it is now):

Before

  After (How I'm proposing it can be):

After

Approved
Last Updated: 21 Jun 2018 13:27 by ADMIN
ADD. RadPanorama - add save/load layout functionality so one can save and load the tiles size and position
Completed
Last Updated: 02 Feb 2018 10:59 by Dimitar
Workaround: use the attached theme
https://docs.telerik.com/devtools/winforms/themes/using-custom-themes
Approved
Last Updated: 15 Aug 2017 10:02 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Sr.
Comments: 0
Category: Panorama
Type: Feature Request
0
It would be nice if the user is allowed to edit the tiles.
Approved
Last Updated: 15 Aug 2017 09:38 by Jesse Dyck
ADMIN
Created by: Stefan
Comments: 1
Category: Panorama
Type: Feature Request
2
ADD. RadPanorama - add selection support with checkboxes
Approved
Last Updated: 15 Aug 2017 09:38 by ADMIN
Currently RadPanorama animates all visible tiles when clicking on a tile.
Approved
Last Updated: 15 Aug 2017 09:38 by ADMIN
ADMIN
Created by: Julian Benkov
Comments: 0
Category: Panorama
Type: Feature Request
1
example:

 RadLiveTileElement tileElement = new RadLiveTileElement();
            tileElement.Text = "&Applications";
            tileElement.UseMnemonic = true;
            panorama.Items.Add(tileElement);
Approved
Last Updated: 15 Aug 2017 09:33 by ADMIN
ADMIN
Created by: Ivan Todorov
Comments: 0
Category: Panorama
Type: Feature Request
2
The user should be able to select tiles with the mouse or with the arrow keys.
Approved
Last Updated: 15 Aug 2017 09:33 by ADMIN
IMPROVE. RadPanorama - increase the RowsCount when the form's size is increased, so the user will be able to drag items there.
Completed
Last Updated: 14 Mar 2017 07:30 by ADMIN
To reproduce:

 Me.RadPanorama1.ShowGroups = True

 Dim group1 As New TileGroupElement
 group1.Text = "Group1"
 Me.RadPanorama1.Groups.Add(group1)
 group1.ColumnsCount = 3
 group1.RowsCount = 5


 group1.CellSize = New Size(200, 100)
 Me.RadPanorama1.Groups.Add(group1)
 For i = 0 To 2
     For j = 0 To 2
         Dim tile As New RadTileElement()
         tile.Row = i
         tile.Column = j
         tile.Text = "tile" & i & "." & j
         group1.Items.Add(tile)
     Next
 Next

 Dim group2 As New TileGroupElement
 group2.Text = "Group2"
 Me.RadPanorama1.Groups.Add(group2)
 group2.ColumnsCount = 3
 group2.RowsCount = 5

 Me.RadPanorama1.Groups.Add(group1)
 For i = 0 To 2
     For j = 0 To 2
         Dim tile As New RadTileElement()
         tile.Row = i
         tile.Column = j
         tile.Text = "tile" & i & "." & j
         group2.Items.Add(tile)
     Next
 Next
Completed
Last Updated: 15 Apr 2016 06:03 by ADMIN
IMPROVE. RadPanorama - the Items collection of the control should not accepts TileGroupElements
Approved
Last Updated: 30 Mar 2016 09:40 by ADMIN
To reproduce:

1. Add a RadPanorama with several tiles at design time.
2. Open the RadItem Collection Editor and try to reorder the items by using the arrows. Press OK. As a result, the tiles in the form are not ordered as expected although the order in the Collection Editor is the desired one.

Workaround: add the tiles at run-time in the correct order.
Declined
Last Updated: 09 Feb 2016 08:22 by ADMIN
Created by: Paul
Comments: 1
Category: Panorama
Type: Feature Request
1
Current: Right-Clicking a RadTileElement in a RadPanorama responds the same as a Left-Click.

Request: Right-Click displays a ContextMenu.
Completed
Last Updated: 26 Jan 2016 11:16 by ADMIN
Completed
Last Updated: 19 Oct 2015 14:07 by ADMIN
To reproduce:

1.Open Demo Hub example and maximize the form.
2.Start dragging "Maginifier" tile.
3. Try to drop it to the last group. You will notice that horizontal scrollbar does not move when the form is maximized. However, it behaves as expected if the form is not maximized.

Workaround:
public Form1()
{
    InitializeComponent();

    this.radPanorama1.PanoramaElement.DragDropService = new CustomService(this.radPanorama1.PanoramaElement);
}

public class CustomService : TileDragDropService
{
    public RadPanoramaElement OwnerElement { get; set; }

    public CustomService(RadPanoramaElement owner) : base(owner)
    {
        OwnerElement = owner;
    }

    public int ScrollStep
    { 
        get
        {
            return (int)typeof(TileDragDropService).GetField("scrollStep",
                System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(this);
        }
        set
        {
            typeof(TileDragDropService).GetField("scrollStep",
                System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).SetValue(this, value);
        }
    }

    protected override void HandleMouseMove(Point mousePos)
    {
        Point clientPoint = OwnerElement.PointFromScreen(mousePos);
        Timer scrollTimer = typeof(TileDragDropService).GetField("scrollTimer",
            System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(this) as Timer;
        if (clientPoint.X > this.OwnerElement.Size.Width - 5)
        {
            ScrollStep = (clientPoint.X - this.OwnerElement.Size.Width) + 5;
            if (!scrollTimer.Enabled)
            {
                scrollTimer.Start();
            }
        }
        else if (clientPoint.X < 5)
        {
            ScrollStep = clientPoint.X - 5;
            if (!scrollTimer.Enabled)
            {
                scrollTimer.Start();
            }
        }
        else
        {
            base.HandleMouseMove(mousePos);
        }
    }
}
Completed
Last Updated: 16 Oct 2015 13:09 by ADMIN
To reproduce:
public Form1()
{
    InitializeComponent();

    this.radPanorama1.ShowGroups = true;
    TileGroupElement group = new TileGroupElement();
    group.Name = "Group1";
    this.radPanorama1.Groups.Add(group);
    for (int i = 0; i < 20; i++)
    {
        group.Items.Add(new RadTileElement());
    }
    group.RowsCount = 5;

    this.radPanorama1.ScrollBarAlignment = HorizontalScrollAlignment.Bottom;
}

Workaround: set the ScrollBarAlignment property to HorizontalScrollAlignment.Top
Completed
Last Updated: 16 Sep 2015 07:36 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Sr.
Comments: 0
Category: Panorama
Type: Bug Report
0
To reproduce:

public Form1()
{
    InitializeComponent();

    this.radPanorama1.RowsCount = 5;
    this.radPanorama1.ColumnsCount = 1;
    this.radSpinEditor1.DataBindings.Add("Value", this.radPanorama1, "RowsCount", true, DataSourceUpdateMode.OnPropertyChanged);

    for (int i = 0; i < 5; i++)
	{
        RadTileElement tile = new RadTileElement();
        tile.Text = "Tile" + (i );
        tile.Row = i ;
        this.radPanorama1.Items.Add(tile);
	}        
}


Please refer to the sample video: http://screencast.com/t/lncUvh0vIRKN 

Workaround:

 private void radPanorama1_PropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            if (e.PropertyName=="RowsCount")
            {
                this.radPanorama1.PanoramaElement.InvalidateMeasure(true);
            }
        }
Completed
Last Updated: 08 Jan 2015 09:57 by ADMIN
To reproduce:

Add 2 TileGroupElements to a RadPanorama. Set the rowcount of the first to 2 and to the second one to 1. Add a tile to the first group and set its rowspan to 2. Start the application drag the tile, you will see exception.

Workaround:
Create a custom TileDragDropService:

public class MyTileDragDropService : TileDragDropService
{
    private Action<TileGroupElement, RadTileElement, int> OffsetTiles;
    private RadPanoramaElement Owner;

    public MyTileDragDropService(RadPanoramaElement owner)
        : base(owner)
    {
        this.Owner = (RadPanoramaElement)typeof(TileDragDropService).GetField("owner", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(this);
        MethodInfo matchedMethod = null;

        foreach (MethodInfo method in typeof(TileDragDropService).GetMethods(BindingFlags.Instance | BindingFlags.NonPublic))
        {
            if (method.Name == "OffsetTiles" && method.GetParameters().Length == 3)
            {
                matchedMethod = method;
                break;
            }
        }

        this.OffsetTiles = (Action<TileGroupElement, RadTileElement, int>)matchedMethod.CreateDelegate(typeof(Action<TileGroupElement, RadTileElement, int>), this);
    }

    protected override void HandleGroupedDragDrop(RadDropEventArgs e)
    {
        RadTileElement target = e.HitTarget as RadTileElement;
        RadTileElement source = this.Context as RadTileElement;
        Point dropLocation = e.DropLocation;

        if (target != null)
        {
            dropLocation = target.PointToControl(dropLocation);
        }

        TileGroupElement @group = GetTargetGroup(new RectangleF(dropLocation, source.Size));
        if (source == null || @group == null)
        {
            return;
        }

        Point targetCell = GetTargetCell(@group, dropLocation);
        if (targetCell.X == -1)
        {
            return;
        }

        targetCell.X = Math.Abs(Math.Min(targetCell.X, @group.RowsCount - source.RowSpan));
        if (targetCell.X >= @group.RowsCount)
        {
            targetCell.X = @group.RowsCount - 1;
        }

        source.Row = targetCell.X;
        source.Column = targetCell.Y;

        if (!@group.Items.Contains(source))
        {
            (source.Parent.Parent as TileGroupElement).Items.Remove(source);
            @group.Items.Add(source);
        }

        int oldColSpan = source.ColSpan;
        source.ColSpan = 0;

        this.OffsetTiles(@group, source, oldColSpan);

        source.ColSpan = oldColSpan;
        source.Column -= oldColSpan;

        this.Owner.InvalidateMeasure(true);
        this.Owner.UpdateLayout();

        return;
    }
}

And set it to the panorama:
panorama.PanoramaElement.DragDropService = new MyTileDragDropService();
1 2