Telerik Forums
UI for WPF Forum
2 answers
246 views
Hi,

I would like to modify PopUp template of the RadAutoCompleteBox to have grouped items result, like that:



Group 1
       ItemFound 
       ItemFound 
       ...
Group 2
      ItemFound 
      ItemFound
      ...


Can we do this with the built-in functionalities?
Otherwise, how can i do that? Some clues?

Manuel
Top achievements
Rank 1
 answered on 18 Dec 2014
6 answers
155 views
We are using RadRichTextBox with Default Spell check feature.

We found that SpellCheck could not change incorrect words within Annotation Ranges().

Is there any way to make spellcheck work for annotation ranges.
Tanya
Telerik team
 answered on 18 Dec 2014
1 answer
171 views
In WPF RadRichTextBox, we try to Insert AnnotationRanges using InsertFragment method. But, it throws exception in some scenarios when Track Changes is ON. Please find sample code below.

try
            {
                //Initialize
                RadDocument associatedDocument = associatedRichTextBox.Document;
                DocumentSelection selection = associatedDocument.Selection;
                DocumentPosition documentPosition = associatedDocument.CaretPosition;

                string selectedText = GetSelectedText(associatedDocument);

                // If text is not selected 
                if (String.IsNullOrEmpty(selectedText) && String.IsNullOrWhiteSpace(selectedText))
                {
                    MessageBox.Show("Please select a text", "Information", MessageBoxButton.OK, MessageBoxImage.Information);
                }
                else
                {
                    RadDocument tempDocument = associatedDocument.Selection.CreateDocumentFromSelection();

                    IEnumerable<FormulaRangeStart> formulaMarkers = tempDocument.GetAnnotationMarkersOfType<FormulaRangeStart>();

                    bool bformulaRangeExistsInSelection = false;
                    foreach (FormulaRangeStart frmla in formulaMarkers)
                    {
                        bformulaRangeExistsInSelection = true;
                        break;
                    }

                    if (bformulaRangeExistsInSelection)
                    {
                        MessageBox.Show("Selection already contains a formula range", "Formula Information", MessageBoxButton.OK, MessageBoxImage.Information);
                        return;
                    }

                    FormulaRangeStart formulaRangeStart = new FormulaRangeStart();
                    FormulaRangeEnd formulaRangeEnd = new FormulaRangeEnd();
                    formulaRangeEnd.PairWithStart(formulaRangeStart);

                    tempDocument.CaretPosition.MoveToFirstPositionInDocument();
                    tempDocument.InsertInline(formulaRangeStart);

                    tempDocument.CaretPosition.MoveToLastPositionInDocument();
                    tempDocument.InsertInline(formulaRangeEnd);

                    tempDocument.Selection.SelectAll();

                    IEnumerable<Paragraph> paragraphs = tempDocument.Selection.GetSelectedParagraphs();

                    foreach (Paragraph paragraph in paragraphs)
                    {
                        foreach (Telerik.Windows.Documents.Model.Inline inline in paragraph.Inlines)
                        {
                            if (inline is Span)
                            {
                                ((Span)(inline)).HighlightColor = Colors.DarkGray;
                            }
                        }
                    }

                    tempDocument.CaretPosition.MoveToLastPositionInDocument();

                    Span spanResetBgColor = new Span(FormattingSymbolLayoutBox.SPACE_SYMBOL_VISUAL);
                    spanResetBgColor.HighlightColor = Colors.White;
                    tempDocument.InsertInline(spanResetBgColor);

                    tempDocument.Selection.SelectAll();

                    associatedRichTextBox.IsTrackChangesEnabled = true;
                    associatedRichTextBox.TrackChangesOptions.TrackFormatting = true;

                    associatedRichTextBox.InsertFragment(tempDocument.Selection.CopySelectedDocumentElements(true));
                    associatedRichTextBox.Insert(FormattingSymbolLayoutBox.ENTER);
                    associatedRichTextBox.Document.Selection.Clear();
                    associatedRichTextBox.UpdateLayout();
                    associatedRichTextBox.UpdateEditorLayout();
                    associatedRichTextBox.Focus();
                    if (associatedRichTextBox.ActiveEditorPresenter != null)
                    {
                        associatedRichTextBox.ActiveEditorPresenter.RecreateUI();
                    }
                }
Todor
Telerik team
 answered on 18 Dec 2014
8 answers
335 views
Hi, I'm testing WPF UI. In the use of themes I get an error message. Error: "LocalizableResourceExtension" is not valid for "Setter.Value".

I have the following code in my Appliaction.xaml:

<Application x:Class="TelerikWpfAppDesignTest.Application"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml"
             >
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Themes/Windows8/System.Windows.xaml" />
                <ResourceDictionary Source="Themes/Windows8/Telerik.Windows.Controls.xaml" />
                <ResourceDictionary Source="Themes/Windows8/Telerik.Windows.Controls.Input.xaml" />
                <ResourceDictionary Source="Themes/Windows8/Telerik.Windows.Controls.Navigation.xaml" />
                <ResourceDictionary Source="Themes/Windows8/Telerik.Windows.Controls.RibbonView.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

Die benötigten xaml-Files habe ich meinem Projekt hinzugefügt und auch die Verweise sind vorhanden. Was mache ich falsch?
Kalin
Telerik team
 answered on 18 Dec 2014
1 answer
283 views
Hello, I would like to enquire on a solution to the problem as per title. This is my code currently:
for (int i = 0; i < maximumSheet; i++)
            {
                sheet1211.ActiveWorksheet = worksheets[i];
                double scaledWidth = (0.85 / 1366.00) * SystemInformation.VirtualScreen.Width;
                double scaledHeight = (0.85 / 768.00) * SystemInformation.VirtualScreen.Height;
                sheet1211.ActiveSheetEditor.ScaleFactor = new Size(scaledWidth, scaledHeight);
                sheet1211.ActiveSheetEditor.ScrollBarsProvider.HorizontalScrollBar.Visibility = Visibility.Collapsed;
                sheet1211.ActiveSheetEditor.ScrollBarsProvider.VerticalScrollBar.Visibility = Visibility.Collapsed;
            }

The ScaleFactors work across all sheets, but the ScrollBar didn't work for any of the sheets.
Doing just sheet1211.ActiveWorksheet = worksheets[0] and set the ScrollBars visibility works, but that's only 1 sheet, and furthermore if I change to the next sheet and back to worksheet[0] again in runtime by interface, the scrollbars will appear again.

So how do I set the visibility across all sheets just like how I set the ScaleFactor?

Thanks for your attention.

Dexter
Top achievements
Rank 1
 answered on 18 Dec 2014
2 answers
328 views
In my view model I have a byte[] (called "DocumentBytes") that is read from a .docx file.  I have my view set up like this:

<telerik:DocxDataProvider
  x:Name="docxDataProvider"
  Docx="{Binding DocumentBytes, Mode=TwoWay, UpdateSourceTrigger=LostFocus}"
  RichTextBox="{Binding ElementName=SnippetPreviewRichTextBox}"
  />
 
<telerik:RadRichTextBox x:Name="SnippetPreviewRichTextBox"/>

The rich textbox correctly displays the document from the file.  When the user makes a change to the content of the rich textbox and then the textbox loses focus, I need the byte[] (DocumentBytes) to be written back with the updated contents of the textbox, and in the docx format, as it was provided to the DocxDataProvider.

Out-of-the-box this didn't seem to work.  I expected the data provider to just write the value back to my property, but it didn't do that.

So, I tried to implement this myself using my view's code behind:
private bool DocumentHasChanged { get; set; }
 
private void SnippetPreviewRichTextBox_GotFocus(object sender, RoutedEventArgs e)
{
  this.DocumentHasChanged = false;
}
 
private void SnippetPreviewRichTextBox_LostFocus(object sender, RoutedEventArgs e)
{
  if (!this.DocumentHasChanged)
    return;
  var viewModel = this.DataContext as SnippetPreviewViewModel;
  if (viewModel == null)
    return;
 
  var formatProvider = new DocxFormatProvider();
  var docXBytes = formatProvider.Export(this.SnippetPreviewRichTextBox.Document);
  viewModel.DocumentBytes = docXBytes;
}
 
private void SnippetPreviewRichTextBox_DocumentContentChanged(object sender, EventArgs e)
{
  this.DocumentHasChanged = true;
}


This caused problems and threw exceptions when I would edit the document's content in the rich textbox, and then click on back on it (the LostFocus event was firing each time I clicked on the rich textbox).

I'm really surprised there isn't a short and concise example in the WPF documentation on this, and it's something I imagine most people have to do.  Perhaps the documentation is there and I just haven't found it.

So, what I'm looking for is a example of how to actually bind a byte[] from my view model, and get the view to write back to that same property when the rich textbox's content is updated.
Nathan
Top achievements
Rank 1
 answered on 17 Dec 2014
2 answers
261 views
After exporting a RadSpreadsheet workbook to xlsx format using XlsxFormatProvider, resulting Excel workbook opens within Excel and basic functions seem OK.  However, other simple Excel functions cause Excel to loop.  For example, right-click and select of "Format Cells ..." causes this loop behavior.

I am using runtime UI for WPF version v4.0.30319 and Office 2010.

Thank you!
-----------
namespace Xxxxx.Model

    public class ExcelService : IExcelService
    {
        private XlsxFormatProvider xlsxFormatProvider;        public ExcelService()
        {
            xlsxFormatProvider = new XlsxFormatProvider();
            WorkbookFormatProvidersManager.RegisterFormatProvider(xlsxFormatProvider);
        }

        public Workbook CreateWorkbook()
        {
            return new Workbook();
        }       

        public bool AddWorksheet(Workbook workbook, string sheetName, DataTable table)
        {
            int row;
            int col;           

            Worksheet worksheet = workbook.Worksheets.Add();
            worksheet.Name = sheetName;            
            col = 0;
            foreach (DataColumn tableColumn in table.Columns)
            {
                worksheet.Cells[0, col].SetValue(tableColumn.Caption);
                col++;
            }            

            row = 1;
            foreach (DataRow tableRow in table.Rows)
            {
                col = 0;
                foreach (DataColumn tableColumn in table.Columns)
                {
                    worksheet.Cells[row, col].SetValue(tableRow[tableColumn].ToString());
                    //worksheet.Cells[row, col].SetFormat(new CellValueFormat("@"));
                    col++;
                }
                row++;
            }
            return true;
        }       

        public bool ExportWorkbook(Workbook workbook)
        {
            var dialog = new Microsoft.Win32.SaveFileDialog();
            dialog.DefaultExt = "*.xlsx";
            dialog.Filter = "Excel Workbook (*.xlsx)|*.xlsx";           
            if (dialog.ShowDialog() == true)
            {
                using (Stream output = dialog.OpenFile())
                {
                    xlsxFormatProvider.Export(workbook, output);
                }
            }
            return true;
        }
    }
}


Bob
Top achievements
Rank 1
 answered on 17 Dec 2014
8 answers
326 views
Hi,

I have a poblem with your RichTextBox control. When i set render options in WPF application like this:

RenderOptions.EdgeMode(dependencyObject, EdgeMode.Aliased);

caret in richTextBox disappeared. To reproduce the problem font size should be set to less then 15 and font style should not be set to italic.

( I think that the problem is thickness of caret and the render of 1px width in this render mode)

Please let my know how to set visibility of caret.
Maciej
Top achievements
Rank 1
 answered on 17 Dec 2014
8 answers
300 views
Hi,

Is there a way to show the RadPanelBarItem header to the right instead of left when Orientation="Horizontal". I have only 1 RadPanelBarItem and using it to create a search panel on the left that can be collapsed/expanded.

Thanks

            <telerik:RadPanelBar Grid.Column="0" VerticalAlignment="Stretch" Orientation="Horizontal">
                <telerik:RadPanelBarItem Header="Search" IsExpanded="True" HorizontalContentAlignment="Center">
                            <StackPanel Orientation="Horizontal">
                                <telerik:RadComboBox>
                                    <telerik:RadComboBoxItem Content="Item 1" IsSelected="True" />
                                </telerik:RadComboBox>
                            </StackPanel>
                </telerik:RadPanelBarItem>
            </telerik:RadPanelBar>
Ram
Top achievements
Rank 1
 answered on 17 Dec 2014
1 answer
116 views
Hello,
in an application, I need to display a tool-tip for each column header.
To do so I have defined the column Header property to contain a special-made control that, amongst other, define tool-tip for the header.

Doing so has 2 problems:

  1. The button displayed when the user groups by the column only display a bitmap of the column header. This means, for example, that if the column is not wide enough, the displayed text is truncated.

  2. More important: if the column width is too small, the text is not displayed at all on the column header. But, when grouping by this column, the application crashes: ArgumentOutOfRangeException: The parameter value must be greater than zero.\r\nParameter name: pixelWidth.
The stack of this error is:
   at System.Windows.Media.Imaging.RenderTargetBitmap..ctor(Int32 pixelWidth, Int32 pixelHeight, Double dpiX, Double dpiY, PixelFormat pixelFormat)
   at Telerik.Windows.Controls.FrameworkElementToImageConverter.ToImage(FrameworkElement element)
   at Telerik.Windows.Controls.GridView.GridViewGroupPanel.ConvertFrameworkElementToImage(FrameworkElement frameworkElement)
   at Telerik.Windows.Controls.GridView.GridViewGroupPanel.GetEffectiveContentForDescriptor(IGroupDescriptor descriptor)
   at Telerik.Windows.Controls.GridView.GridViewGroupPanel.PrepareContainerForItemOverride(DependencyObject element, Object item)
   at System.Windows.Controls.ItemsControl.MS.Internal.Controls.IGeneratorHost.PrepareItemContainer(DependencyObject container, Object item)
   at System.Windows.Controls.Panel.AddChildren(GeneratorPosition pos, Int32 itemCount)
   at System.Windows.Controls.Panel.OnItemsChangedInternal(Object sender, ItemsChangedEventArgs args)
   at System.Windows.Controls.Panel.OnItemsChanged(Object sender, ItemsChangedEventArgs args)
   at System.Windows.Controls.ItemContainerGenerator.OnItemAdded(Object item, Int32 index)
   at System.Windows.Controls.ItemContainerGenerator.OnCollectionChanged(Object sender, NotifyCollectionChangedEventArgs args)
   at System.Windows.WeakEventManager.ListenerList`1.DeliverEvent(Object sender, EventArgs e, Type managerType)
   at System.Windows.WeakEventManager.DeliverEventToList(Object sender, EventArgs args, ListenerList list)
   at System.Windows.WeakEventManager.DeliverEvent(Object sender, EventArgs args)
   at System.Collections.Specialized.NotifyCollectionChangedEventHandler.Invoke(Object sender, NotifyCollectionChangedEventArgs e)
   at System.Windows.Data.CollectionView.OnCollectionChanged(NotifyCollectionChangedEventArgs args)
   at System.Windows.WeakEventManager.ListenerList`1.DeliverEvent(Object sender, EventArgs e, Type managerType)
   at System.Windows.WeakEventManager.DeliverEventToList(Object sender, EventArgs args, ListenerList list)
   at System.Windows.WeakEventManager.DeliverEvent(Object sender, EventArgs args)
   at System.Windows.Data.CollectionView.OnCollectionChanged(NotifyCollectionChangedEventArgs args)
   at System.Windows.Data.ListCollectionView.ProcessCollectionChangedWithAdjustedIndex(NotifyCollectionChangedEventArgs args, Int32 adjustedOldIndex, Int32 adjustedNewIndex)
   at System.Collections.Specialized.NotifyCollectionChangedEventHandler.Invoke(Object sender, NotifyCollectionChangedEventArgs e)
   at System.Collections.ObjectModel.ObservableCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
   at Telerik.Windows.Data.RadObservableCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
   at Telerik.Windows.Data.ObservableItemCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
   at Telerik.Windows.Data.RadObservableCollection`1.InsertItem(Int32 index, T item)
   at Telerik.Windows.Controls.GridView.GridViewDataControl.PerformGrouping(IGroupDescriptor descriptor, Nullable`1 insertionIndex, GroupingEventAction action)
   at Telerik.Windows.Controls.GridView.GridViewDataControl.<>c__DisplayClass77.<RequestGrouping>b__76()
   at Telerik.Windows.Controls.CursorManager.PerformTimeConsumingOperation(FrameworkElement frameworkElement, Action action)
   at Telerik.Windows.Controls.GridView.GridViewDataControl.RequestGrouping(IGroupDescriptor descriptor, Nullable`1 insertionIndex, GroupingEventAction action)
   at Telerik.Windows.Controls.GridView.DragDropController.OnGroupPanelDrop(Object sender, DragEventArgs e)
   at Telerik.Windows.DragDrop.DragEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
   at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
   at Telerik.Windows.DragDrop.IInputElementExtensions.RaiseEvent(DependencyObject d, RoutedEventArgs routedEventArgs)
   at Telerik.Windows.DragDrop.DragDropManager.DelegateHelper.OnDragEventHandler(Object sender, DragEventArgs e)
   at Telerik.Windows.DragDrop.DragDropManager.DelegateHelper.OnDrop(Object sender, DragEventArgs e)
   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
   at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
   at System.Windows.OleDropTarget.RaiseDragEvent(RoutedEvent dragEvent, Int32 dragDropKeyStates, Int32& effects, DependencyObject target, Point targetPoint)
   at System.Windows.OleDropTarget.MS.Win32.UnsafeNativeMethods.IOleDropTarget.OleDrop(Object data, Int32 dragDropKeyStates, Int64 point, Int32& effects)
   at MS.Win32.UnsafeNativeMethods.DoDragDrop(IDataObject dataObject, IOleDropSource dropSource, Int32 allowedEffects, Int32[] finalEffect)
   at System.Windows.OleServicesContext.OleDoDragDrop(IDataObject dataObject, IOleDropSource dropSource, Int32 allowedEffects, Int32[] finalEffect)
   at System.Windows.DragDrop.DoDragDrop(DependencyObject dragSource, Object data, DragDropEffects allowedEffects)
   at Telerik.Windows.DragDrop.DragDropManager.DoDragDrop(DependencyObject dragSource, Object data, DragDropEffects allowedEffects, DragDropKeyStates initialKeyState, Object dragVisual, Point relativeStartPoint, Point dragVisualOffset)
   at Telerik.Windows.DragDrop.DragInitializer.StartDrag()
   at Telerik.Windows.DragDrop.DragInitializer.StartDragPrivate(UIElement sender)
   at Telerik.Windows.DragDrop.DragInitializer.DragSourceOnMouseMove(Object sender, MouseEventArgs e)
   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
   at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
   at System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)
   at System.Windows.Input.InputManager.ProcessStagingArea()
   at System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
   at System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)
   at System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
   at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
   at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
   at System.Windows.Application.RunInternal(Window window)
   at System.Windows.Application.Run()
   at Fivb.Vis.App.Main()
It seems that the bitmap snapshot has a negative width.

Both problems can be easily solved if we can define the text to display in the button grouping.
Or perhaps you have a better solution...
Nick
Telerik team
 answered on 17 Dec 2014
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
DataPager
PersistenceFramework
Styling
TimeBar
OutlookBar
TransitionControl
FileDialogs
Book
ToolBar
ColorPicker
TimePicker
MultiColumnComboBox
SyntaxEditor
VirtualGrid
NavigationView (Hamburger Menu)
Wizard
ExpressionEditor
WatermarkTextBox
DesktopAlert
BarCode
SpellChecker
DataServiceDataSource
EntityFrameworkDataSource
RadialMenu
ChartView3D
Data Virtualization
BreadCrumb
LayoutControl
ProgressBar
Sparkline
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
Callout
PasswordBox
SplashScreen
Localization
Rating
Accessibility
CollectionNavigator
AutoSuggestBox
Security
VirtualKeyboard
HighlightTextBlock
TouchManager
StepProgressBar
Badge
OfficeNavigationBar
ExpressionParser
CircularProgressBar
SvgImage
PipsPager
SlideView
AI Coding Assistant
+? more
Top users last month
Miljana
Top achievements
Rank 2
Iron
Iron
Joel
Top achievements
Rank 3
Bronze
Bronze
Bronze
Cynthia
Top achievements
Rank 1
John
Top achievements
Rank 1
Iron
Mozart
Top achievements
Rank 1
Iron
Veteran
Want to show your ninja superpower to fellow developers?
Top users last month
Miljana
Top achievements
Rank 2
Iron
Iron
Joel
Top achievements
Rank 3
Bronze
Bronze
Bronze
Cynthia
Top achievements
Rank 1
John
Top achievements
Rank 1
Iron
Mozart
Top achievements
Rank 1
Iron
Veteran
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?