Telerik Forums
UI for WPF Forum
1 answer
116 views
I have a GridView that I'm binding to a custom collection of custom objects.  In this GridView, I need to bind a ComboBoxColumn to a set of values in a different collection.

For example,

I've created a VB.NET List(of String) that holds the names of states. My class that the grid is bound to has a State property.  I want to bind the states column to that List(of String) collection so that the user sees the dropdown of all available options when editing the particular record.


My List(Of String) is defined in a Module, and thus accessible as a global variable in the app.  The custom class comes from a different library, and doesn't know anything about the list of states.

  I can't seem to get the ItemsSource of the ComboBoxColumn to bind to something defined in a Module.  Is such a scenario allowed?

Dimitrina
Telerik team
 answered on 14 Mar 2012
0 answers
78 views
Hi,
I saw RadGridView Demo, Edit rows but. i try it not work. can you share some samples.
Thanks.
Vinoth Arun
Top achievements
Rank 2
 asked on 14 Mar 2012
2 answers
313 views
Hi

I've followed this FAQ which explains that to set the Default Style, we can declaratively add the properties in XAML and set "DocumentInheritsDefaultStyle" to true.

I've done this, and open my document and type some text - it's in Times New Roman size 11.  If I add a table, all text added is in Times New Roman 11.

My problem is with tables.  If I check the built in styles TableNormal and TableGrid, they're actually set to Verdana 12.  Strange, then, that my table contains Times New Roman 11 text.

If I copy and paste the table somewhere else in the doument... all text changes to Verdana 12!

If anyone could explain:
- why copy and paste causes this change.  Surely if a table is a certain style or has certain overriden local values, they should remain?
- the difference between "TableNormal" and "TableGrid", and why we can't delete either via the UI.  And why, if I open a document without a TableGrid style, it creates one.
Iva Toteva
Telerik team
 answered on 14 Mar 2012
1 answer
73 views

Hi, not sure if I found a bug:

When in the range of the slot indicates a busy year earlier, in my case proved 1753 (First year sql server). Schedule performance drops significantly.

Slot slot = this.CreateWorkingSlot(new DateTime(1753, 1, 1, 9, 0, 0), new DateTime(1753, 1, 1, 13, 0, 0), RecurrenceDays.Monday | RecurrenceDays.Tuesday | RecurrenceDays.Wednesday | RecurrenceDays.Thursday | RecurrenceDays.Tuesday); 


 I'm afraid you do a loop in reverse.

Sorry for my english and thanks,

Konstantina
Telerik team
 answered on 14 Mar 2012
3 answers
126 views
Hi!

When I use the Metro-Theme and place a RadGridView inside a RadTabItem the text inside the Grid becomes white on a white background. What is going wrong here? We are using 2011-Q2-SP1 controls.On the screenshot you can see that there IS some data inside the grid but it can't be seen.

Regards
Neils
Tina Stancheva
Telerik team
 answered on 14 Mar 2012
1 answer
281 views
I am using new DragDropManager  and all works fine less then for a little problem that with previous version (RadDragDropManager) was working correctly :


Like attached picture , i have one user control composed by one Grid with one Image and one TextBox ; the usercontrol is marked with :

<UserControl x:Class="LibreriaWpfCoster.EditorSingolaVariabileInt32"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
 
             xmlns:globalization="clr-namespace:System.Globalization;assembly=mscorlib"
             xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" 
              
             MinWidth="40"
             MinHeight="20"
              
             mc:Ignorable="d"
             d:DesignWidth="40"
             d:DesignHeight="71"
             Loaded="UserControl_Loaded"
             >
     
    <Grid x:Name="LayoutRoot"
          Background="LightGreen"
          AllowDrop="True"
          >
 
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="20"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
 
        <!--Icona che cambia in funzione del tipo rilevato e cliccandoci sopra resetta la variabile-->
        <Image x:Name="imgObj"
               Source="Images/Numero32Negativo.png"
               Stretch="Uniform"
               MouseLeftButtonDown="imgObj_MouseLeftButtonDown"
               />
 
        <!--Oggetto per editare il nome della variabile-->
        <TextBox x:Name="varObj" 
                 Grid.Column="1"
                 Panel.ZIndex="0"
                 Text="{Binding Path=PlcVar, Mode=TwoWay}"
                 PreviewKeyDown="varObj_PreviewKeyDown"
                 ContextMenu="{x:Null}"
                 />
 
        <!--Oggetto per editare il nome della SysVar-->
        <TextBox x:Name="varSysObj" 
                 Grid.Column="1"
                 Panel.ZIndex="0"
                 Text="{Binding Path=SysVarName, Mode=TwoWay}"
                 PreviewKeyDown="varObj_PreviewKeyDown"
                 ContextMenu="{x:Null}"
                 />
 
    </Grid>
</UserControl>

AllowDrop is placed on the Grid , but placing on the entire Usercontrol doesn't change the problem.

When i drop with this code :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
 
using ClassiCoster;
using System.ComponentModel;
 
using Telerik.Windows.DragDrop;
using Telerik.Windows;
 
namespace LibreriaWpfCoster
{
    /// <summary>
    /// Interaction logic for EditorSingolaVariabileInt16.xaml
    /// </summary>
    public partial class EditorSingolaVariabileInt32 : UserControl
    {
        public EditorSingolaVariabileInt32()
        {
            InitializeComponent();
 
            DragDropManager.AddDropHandler(this, OnVarDrop);
            DragDropManager.AddDragOverHandler(this, OnVarDragOver);
            DragDropManager.AddDragLeaveHandler(this, OnVarDragLeave);
        }
         
        /// <summary>
        /// Variabile PLC
        /// </summary>
        public SingolaVariabileInt32 Variabile
        {
            get { return (SingolaVariabileInt32)GetValue(VariabileProperty); }
            set { SetValue(VariabileProperty, value); }
        }
 
        public static readonly DependencyProperty VariabileProperty = DependencyProperty.Register("Variabile",
                                                                                                  typeof(SingolaVariabileInt32),
                                                                                                  typeof(EditorSingolaVariabileInt32),
                                                                                                  new PropertyMetadata(new SingolaVariabileInt32(), OnVariabilePropertyChanged));
 
 
        private static void OnVariabilePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            (d as EditorSingolaVariabileInt32).LayoutRoot.DataContext = ((EditorSingolaVariabileInt32)d).Variabile;
            (d as EditorSingolaVariabileInt32).MettiInPrimoPianoIlControlloCorretto();
        }
 
        private static List<PlcVariableType> _allowedVars = new List<PlcVariableType>(new PlcVariableType[]
        {
            PlcVariableType.INT8,
            PlcVariableType.UINT8,
            PlcVariableType.INT16,
            PlcVariableType.UINT16,
            PlcVariableType.INT32,
            PlcVariableType.UINT32,
        });
 
        /// <summary>
        /// Specifica i tipi di variabili ammessi per venir messe in binding
        /// </summary>
        public List<PlcVariableType> AllowedVars
        {
            get { return _allowedVars; }
            set { _allowedVars = value; }
        }
 
        private static List<PlcVariableType> _allowedIndexVars = new List<PlcVariableType>(new PlcVariableType[]
        {
             PlcVariableType.INT8,
             PlcVariableType.UINT8,
             PlcVariableType.INT16,
             PlcVariableType.UINT16,
             PlcVariableType.INT32,
             PlcVariableType.UINT32,
        });
 
        /// <summary>
        /// Specifica i tipi di variabili che possono venir messe in binding per gli indici
        /// </summary>
        public List<PlcVariableType> AllowedIndexVars
        {
            get { return _allowedIndexVars; }
            set { _allowedIndexVars = value; }
        }
 
        /// <summary>
        /// Fa l'effetto per draggare una variabile
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnVarDragOver(object sender, Telerik.Windows.DragDrop.DragEventArgs e)
        {
            Boolean Evidenzia = false;
 
            if (e.Data is DataObject)
            {
                VariabilePlc vPlc = (e.Data as DataObject).GetData(typeof(VariabilePlc)) as VariabilePlc;
 
                if (vPlc != null)
                {
                    if (vPlc.SysVarID > 0) ProvaASelezionareUnIndice();
 
                    Evidenzia = GenericiEditorVariabili.DimmiSeAppartieneAllaLista(_allowedVars, vPlc.Tipo);
 
                    if (!Evidenzia && vPlc.SysVarID < 1 && GenericiEditorVariabili.DimmiSeHoSelezionatoUnIndice(varObj))
                    {
                        Evidenzia = GenericiEditorVariabili.DimmiSeAppartieneAllaLista(_allowedIndexVars, vPlc.Tipo);
                    }
                }
            }
 
            e.Effects = Evidenzia ? DragDropEffects.Copy : DragDropEffects.None;
 
            GenericiEditorVariabili.EvidenziaPerDrag(LayoutRoot, Evidenzia);
 
            e.Handled = true;
        }
 
        private void OnVarDragLeave(object sender, Telerik.Windows.DragDrop.DragEventArgs e)
        {
            e.Effects = DragDropEffects.None;
            GenericiEditorVariabili.EvidenziaPerDrag(LayoutRoot, false);
            e.Handled = true;
        }
 
        /// <summary>
        /// Viene eseguito al drop di una variabile
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnVarDrop(object sender, Telerik.Windows.DragDrop.DragEventArgs e)
        {
            GenericiEditorVariabili.EvidenziaPerDrag(LayoutRoot, false);
            if (e.Data == null || !(e.Data is DataObject)) return;
 
            VariabilePlc vPlc = (e.Data as DataObject).GetData(typeof(VariabilePlc)) as VariabilePlc;
 
            if (vPlc != null)
            {
                ProvaASelezionareUnIndice();
 
                if (vPlc.SysVarID < 1 && GenericiEditorVariabili.DimmiSeHoSelezionatoUnIndice(varObj))
                {
                    if (GenericiEditorVariabili.DimmiSeAppartieneAllaLista(_allowedIndexVars, vPlc.Tipo))
                    {
                        String strPrima = varObj.Text.Substring(0, varObj.SelectionStart);
                        String strDopo = varObj.Text.Substring(varObj.SelectionStart + varObj.SelectionLength);
                        Variabile.PlcVar = strPrima + vPlc.PlcVar + strDopo;
                    }
                    else
                    {
                        if (GenericiEditorVariabili.DimmiSeAppartieneAllaLista(_allowedVars, vPlc.Tipo))
                        {
                            Variabile.ResetVar();
                            Variabile.PlcVar = vPlc.PlcVar;
                        }
                    }
                }
                else
                {
                    if (GenericiEditorVariabili.DimmiSeAppartieneAllaLista(_allowedVars, vPlc.Tipo))
                    {
                        Variabile.ResetVar();
 
                        if (vPlc.SysVarID > 0)
                        {
                            Variabile.SysVarName = vPlc.PlcVar;
                            Variabile.SysVarID = vPlc.SysVarID;
                        }
                        else
                        {
                            Variabile.PlcVar = vPlc.PlcVar;
                        }
                    }
                }
 
                MettiInPrimoPianoIlControlloCorretto();
                e.Handled = true;
            }
        }
 
 
 
        //private void OnDropQuery(object sender, DragDropQueryEventArgs e)
        //{
        //    switch (e.Options.Status)
        //    {
        //        case DragStatus.DropDestinationQuery:
        //            if (e.Options.Payload is VariabilePlc)
        //            {
        //                VariabilePlc vPlc = e.Options.Payload as VariabilePlc;
 
        //                if (GenericiEditorVariabili.DimmiSeAppartieneAllaLista(_allowedVars, vPlc.Tipo) ||
        //                    (vPlc.SysVarID < 1 && GenericiEditorVariabili.DimmiSeAppartieneAllaLista(_allowedIndexVars, vPlc.Tipo))
        //                   )
        //                {
        //                    e.QueryResult = true;
        //                    e.Handled = true;
        //                }
        //            }
        //            break;
        //    }
        //}
 
        //private void OnDropInfo(object sender, DragDropEventArgs e)
        //{
        //    LibreriaWpfCoster.CustomDragCue cueObj = e.Options.DragCue as LibreriaWpfCoster.CustomDragCue;
 
        //    if (e.Options.Status == DragStatus.DropPossible) GenericiEditorVariabili.EvidenziaPerDrag(LayoutRoot,cueObj , true);
        //    if (e.Options.Status == DragStatus.DropImpossible) GenericiEditorVariabili.EvidenziaPerDrag(LayoutRoot,cueObj , false);
 
        //    if (e.Options.Status != DragStatus.DropComplete) return;
 
        //    GenericiEditorVariabili.EvidenziaPerDrag(LayoutRoot,cueObj, false);
 
        //    VariabilePlc vPlc = e.Options.Payload as VariabilePlc;
 
        //    if (e.Options.Status == DragStatus.DropComplete && vPlc != null)
        //    {
        //        ProvaASelezionareUnIndice();
 
        //        if (vPlc.SysVarID < 1 && GenericiEditorVariabili.DimmiSeHoSelezionatoUnIndice(varObj))
        //        {
        //            if (GenericiEditorVariabili.DimmiSeAppartieneAllaLista(_allowedIndexVars, vPlc.Tipo))
        //            {
        //                String strPrima = varObj.Text.Substring(0, varObj.SelectionStart);
        //                String strDopo = varObj.Text.Substring(varObj.SelectionStart + varObj.SelectionLength);
        //                Variabile.PlcVar = strPrima + vPlc.PlcVar + strDopo;
        //            }
        //            else
        //            {
        //                if (GenericiEditorVariabili.DimmiSeAppartieneAllaLista(_allowedVars, vPlc.Tipo))
        //                {
        //                    Variabile.ResetVar();
        //                    Variabile.PlcVar = vPlc.PlcVar;
        //                }
        //            }
        //        }
        //        else
        //        {
        //            if (GenericiEditorVariabili.DimmiSeAppartieneAllaLista(_allowedVars, vPlc.Tipo))
        //            {
        //                Variabile.ResetVar();
 
        //                if (vPlc.SysVarID > 0)
        //                {
        //                    Variabile.SysVarName = vPlc.PlcVar;
        //                    Variabile.SysVarID = vPlc.SysVarID;
        //                }
        //                else
        //                {
        //                    Variabile.PlcVar = vPlc.PlcVar;
        //                }
        //            }
        //        }
 
        //        MettiInPrimoPianoIlControlloCorretto();
        //        e.Handled = true;
        //    }
        //}
 
        /// <summary>
        /// Partendo dalla posizione del cursore prova a vedere se nell'intorno c'è un array
        /// </summary>
        private void ProvaASelezionareUnIndice()
        {
            int PosParentesiSinistra, PosParentesiDestra;
 
            if (varObj.Text.Length < 4 || varObj.SelectionStart < 1) return;
            if (varObj.SelectionStart >= varObj.Text.Length) return;
 
            if (",".IndexOf(varObj.Text.Substring(varObj.SelectionStart, 1)) != -1) varObj.SelectionStart++;
            for (PosParentesiSinistra = varObj.SelectionStart; PosParentesiSinistra > 1; PosParentesiSinistra--)
            {
                if ("[,".IndexOf(varObj.Text.Substring(PosParentesiSinistra, 1)) != -1)
                {
                    break;
                }
            }
 
            for (PosParentesiDestra = varObj.SelectionStart; PosParentesiDestra < varObj.Text.Length; PosParentesiDestra++)
            {
                if (",]".IndexOf(varObj.Text.Substring(PosParentesiDestra, 1)) != -1)
                {
                    break;
                }
            }
 
            if (PosParentesiSinistra > 0 && (PosParentesiDestra < varObj.Text.Length))
            {
                varObj.SelectionStart = PosParentesiSinistra + 1;
                varObj.SelectionLength = PosParentesiDestra - PosParentesiSinistra - 1;
            }
        }
 
        private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
            LayoutRoot.DataContext = Variabile;
            MettiInPrimoPianoIlControlloCorretto();
            varObj.ContextMenu = null;
        }
 
        private void MettiInPrimoPianoIlControlloCorretto()
        {
            Int32 varObjZ = 0;
            Int32 varSysObjZ = 0;
 
            if (Variabile.SysVarID > 0)
            {
                varSysObjZ = 1;
            }
            else
            {
                varObjZ = 1;
            }
 
            varObj.SetValue(Panel.ZIndexProperty, varObjZ);
            varSysObj.SetValue(Panel.ZIndexProperty, varSysObjZ);
        }
 
        /// <summary>
        /// Ho gestito quest'evento per aggiornare in caso di testo vuoto
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void varObj_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            switch (e.Key)
            {
                case Key.Enter:
                case Key.Back:
                case Key.Delete:
                    Variabile.ResetVar();
                    MettiInPrimoPianoIlControlloCorretto();
                    break;
 
                default:
                    break;
            }
 
            e.Handled = true;
        }
 
        /// <summary>
        /// Serve per cancellare la variabile plc se gli si clicca sopra
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void imgObj_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            Variabile.ResetVar();
            MettiInPrimoPianoIlControlloCorretto();
            e.Handled = true;
        }
 
    }
}

The drop is allowed only on the Image of the control and not on the whoole usercontrol loke with previous version ....
I have try too setting AllowDrop on only one RadNumericUpDown and in this case the drop is allowed ONLY if i am with cursor over the up/down buttons

I have added two images to explain the problem.
Can you help me , because for my company is important to solve this problem.

Best regards

Claudio Rossi
Nick
Telerik team
 answered on 14 Mar 2012
4 answers
383 views

Hi,

Since we’ve encountered your new RadMaskedInput controls and realized, that these are the replacement of your RadMaskedTextBox (they are, aren’t they?), we didn’t find any reason for this update. Even worse, we are about to use your old RadMaskedTextBox on.

We mostly use your input controls for non-restricted text or non-restricted numeric values. In those cases we expect an input behavior like a normal TextBox got. More precisely, inputs a user enters shouldn’t replace old characters just because the mask restricts the length of the characters. The input, a user does should be just inserted at the caret’s position, without replacing.

The other problem, we’ve ran into is the following: We’ve bound a string value to the Value property of a RadMaskedTextInput control. This control has a mask of 20 optional alphanumeric characters (Mask=”a20”). Now when moving the caret at a different position then the beginning, the entered text would be saved without leading whitespaces. That’s a behavior which no user would expect.

Using your old input control, we didn’t run into all this trouble. I don’t think that there are many developers, who are used to your old Input Control, like the new ones. I don’t understand why you’ve replaced good working controls with these weak components.  

I would recommend you to provide just one suite of input controls, which really work and which offers a way to be less restrictive.

Best,

Martin

Martin
Top achievements
Rank 1
 answered on 14 Mar 2012
3 answers
211 views
Hi,

is it a known bug when DateTimeContinuousAxis PlotMode is set to OnTicksPadded, when the chart is zoomed, the XAxis drifted depending on the zoom value? It works fine when PlotMode is set to OnTicks, but there's no padding with the chart border (that;s why I need OnTicksPadded).

Please see the latest picture.(the first picture, wpf_radchartview_plotmode_zoom_1.png, 
 doesn't show the problem clearly).
Nikolay
Telerik team
 answered on 14 Mar 2012
1 answer
115 views
I try to set Binding To ContentControl   with No Success

<telerik:RadOutlookBar.ContentTemplate>
<DataTemplate>

 

    <ContentControl Content="{Binding ActiveBar}"/>

</DataTemplate>
</telerik:RadOutlookBar.ContentTemplate>

Miro Miroslavov
Telerik team
 answered on 14 Mar 2012
2 answers
90 views
Hi

I am new to the telerik wpf controls and because I am am unsure of their capabilities, I don't know which one to select. I've been considering  the radgridview in "hierachical mode" but now I'm not sure whether this is the correct control to use or perhaps the TreeListView.

My use case is as follows:
I have some hierarchical data as follows

Subject A  Name  Address  DoB etc
   HospitalVisit1  VisitDate  SeenBy etc etc
      Treatment1 Location Drug  etc etc
      Treatment2 Location Drug  etc etc 
      Treatment3 Location Drug  etc etc 
   HospitalVisit2  VisitDate  SeenBy etc etc
      Treatment1 Location Drug etc etc
      Treatment2 Location Drug etc etc 

Subject B  Name  Address  DoB etc
   HospitalVisit1  VisitDate  SeenBy etc etc
      Treatment1 Location Drug etc etc
      Treatment2 Location Drug etc etc 

I need to display the above. Then I going to provide the UI to flatten this data into 1 row per subject. To do this, I think I need to add a boolean columns to permit the user to choose which of the child events they want to use in the flattening mechanism. eg for Subject A

X    Subject A  Name  Address  DoB etc
        HospitalVisit1  VisitDate  SeenBy etc etc
           Treatment1 Location Drug  etc etc
           Treatment2 Location Drug  etc etc 
           Treatment3 Location Drug  etc etc 
X      HospitalVisit2  VisitDate  SeenBy etc etc
X         Treatment1 Location Drug etc etc
           Treatment2 Location Drug etc etc  

The rows marked X will then be used to create a flat structure eg

Subject A  Name  Address  DoB HospitalVisit2  VisitDate  SeenBy  Treatment1 Location Drug etc etc 

I'd be grateful if someone could suggest which control would best suit my purposes. I'd assumed the radgridview or the treelistview but perhaps there may be other ways of doing this which may be better

Many thx

Simon



Vlad
Telerik team
 answered on 14 Mar 2012
Narrow your results
Selected tags
Tags
GridView
General Discussions
Chart
RichTextBox
Docking
ScheduleView
ChartView
TreeView
Diagram
Map
ComboBox
TreeListView
Window
RibbonView and RibbonWindow
PropertyGrid
DragAndDrop
TabControl
TileView
Carousel
DataForm
PDFViewer
MaskedInput (Numeric, DateTime, Text, Currency)
AutoCompleteBox
DatePicker
Buttons
ListBox
GanttView
PivotGrid
Spreadsheet
Gauges
NumericUpDown
PanelBar
DateTimePicker
DataFilter
Menu
ContextMenu
TimeLine
Calendar
Installer and Visual Studio Extensions
ImageEditor
BusyIndicator
Expander
Slider
TileList
PersistenceFramework
DataPager
Styling
TimeBar
OutlookBar
TransitionControl
Book
FileDialogs
ToolBar
ColorPicker
TimePicker
SyntaxEditor
MultiColumnComboBox
VirtualGrid
Wizard
ExpressionEditor
NavigationView (Hamburger Menu)
WatermarkTextBox
DesktopAlert
BarCode
SpellChecker
DataServiceDataSource
EntityFrameworkDataSource
RadialMenu
ChartView3D
Data Virtualization
BreadCrumb
ProgressBar
Sparkline
LayoutControl
TabbedWindow
ToolTip
CloudUpload
ColorEditor
TreeMap and PivotMap
EntityFrameworkCoreDataSource (.Net Core)
HeatMap
Chat (Conversational UI)
VirtualizingWrapPanel
Calculator
NotifyIcon
TaskBoard
TimeSpanPicker
BulletGraph
Licensing
WebCam
CardView
DataBar
FilePathPicker
PasswordBox
Rating
SplashScreen
Accessibility
Callout
CollectionNavigator
Localization
AutoSuggestBox
Security
VirtualKeyboard
HighlightTextBlock
TouchManager
StepProgressBar
Badge
OfficeNavigationBar
ExpressionParser
CircularProgressBar
SvgImage
PipsPager
SlideView
AI Coding Assistant
+? more
Top users last month
Rob
Top achievements
Rank 3
Bronze
Iron
Iron
Sergii
Top achievements
Rank 1
Iron
Iron
Dedalus
Top achievements
Rank 1
Iron
Iron
Lan
Top achievements
Rank 1
Iron
Doug
Top achievements
Rank 1
Want to show your ninja superpower to fellow developers?
Top users last month
Rob
Top achievements
Rank 3
Bronze
Iron
Iron
Sergii
Top achievements
Rank 1
Iron
Iron
Dedalus
Top achievements
Rank 1
Iron
Iron
Lan
Top achievements
Rank 1
Iron
Doug
Top achievements
Rank 1
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?