예제 #1
0
        private void ParseXaml()
        {
            Dispatcher.Invoke(
                () =>
            {
                XamlLayout.ParseLayout(NewLayout.Xaml, out var parsingEx);

                switch (parsingEx)
                {
                case AggregateException aggEx:
                    var messages = aggEx.InnerExceptions.Select(e => e.Message);
                    Errors       = string.Join("\r\n", messages);
                    break;

                case Exception ex:
                    Errors = ex.Message;
                    break;

                case null:
                    Errors = string.Empty;
                    break;
                }
            }
                );
        }
        public bool SetXamlLayout(XamlLayout xamlLayout)
        {
            Reset();

            var rootObject = xamlLayout.ParseLayout(out var ex);

            if (ex != null || !(rootObject is UIElement rootUIElement))
            {
                return(IsValid = false);
            }

            Content = rootUIElement;

            CalculateLayout();

            FindContentContainers();
            ComputeContentPanelMap();

            ValidateAcceptedContents();
            SetupContentColors();

            ComputeAcceptedContent();

            GenerateDemoContent();

            return(IsValid);
        }
예제 #3
0
        public bool SetXamlLayout(XamlLayout xamlLayout)
        {
            Reset();

            var rootObject = xamlLayout.ParseLayout(out var ex);

            if (ex != null || !(rootObject is UIElement rootUIElement))
            {
                LogTo.Warning(ex, "Xaml layout {Name} is invalid", xamlLayout.Name);

                return(IsValid = false);
            }

            SetCurrentValue(ContentProperty, rootUIElement);

            CalculateLayout();

            FindContentContainers();
            ComputeContentPanelMap();

            ValidateAcceptedContents();
            SetupContentColors();

            ComputeAcceptedContent();

            GenerateDemoContent();

            return(IsValid);
        }
예제 #4
0
        /// <param name="xamlLayout"></param>
        /// <param name="displayMode"></param>
        /// <inheritdoc />
        public XamlControlGroup(XamlLayout xamlLayout, bool displayMode = false)
        {
            _displayMode = displayMode;

            InitializeComponent();

            SetXamlLayout(xamlLayout);
        }
예제 #5
0
        private void Edit(XamlLayout layout)
        {
            var editor = new LayoutEditorWindow(layout);

            if (editor.ShowDialog() ?? false)
            {
                LayoutManager.SaveConfig();
            }
        }
예제 #6
0
        public LayoutEditorWindow(XamlLayout xamlLayout)
        {
            OriginalLayout         = xamlLayout;
            NewLayout              = new XamlLayout(xamlLayout, autoValidationSuspended: true);
            NewLayout.XamlChanged += OnXamlChanged;

            IsDefault = OriginalLayout.IsDefault;

            _parseXamlTask = new DelayedTask(ParseXaml);

            InitializeComponent();
        }
        public static string ToElementString(this ElementBuilder elemBuilder)
        {
            DateTime now            = DateTime.Now;
            string   collectionPath = Core.SM.Collection.Path;
            int      parentId       = elemBuilder.Parent?.Id ?? 1;
            string   lastRepDate1   = DateTime.Today.ToString("dd.MM.yy",
                                                              CultureInfo.InvariantCulture);
            string lastRepDate2 = DateTime.Today.ToString("dd.MM.yyyy",
                                                          CultureInfo.InvariantCulture);
            double lastRepTime = now.Hour + (now.Minute * 60 + now.Second) / 3600.0;
            string type;

            switch (elemBuilder.Type)
            {
            case ElementType.Topic:
                type = "Topic";
                break;

            case ElementType.Item:
                type = "Item";
                break;

            case ElementType.ConceptGroup:
            case ElementType.Task:
            case ElementType.Template:
            default:
                throw new NotImplementedException();
            }

            string     title  = (elemBuilder.GuessTitle() ?? string.Empty).Replace("\n", "").Replace("\r", "");
            XamlLayout layout = LayoutManager.Instance.GetLayout(elemBuilder.Layout)
                                ?? LayoutManager.DefaultOrGenericLayout;

            var ret = string.Format(CultureInfo.InvariantCulture,
                                    ElementFmt,
                                    collectionPath,
                                    parentId,
                                    elemBuilder.Priority,
                                    title,
                                    type,
                                    lastRepDate1,
                                    elemBuilder.Reference?.ToString() ?? string.Empty,
                                    layout.Build(elemBuilder.Contents),
                                    lastRepDate2,
                                    lastRepTime,
                                    elemBuilder.Status);


            ret = EncodeForSupermemo(ret);

            return(ret);
        }
예제 #8
0
        public void DeleteLayout(XamlLayout layout)
        {
            if (_layoutMap.ContainsKey(layout.Name) == false)
            {
                return;
            }

            _layoutMap.Remove(layout.Name);
            _layouts.Remove(layout);

            layout.NameChanged -= OnLayoutNameChanged;

            SetDefault(Default.Name);
        }
예제 #9
0
        private void Clone(XamlLayout layout)
        {
            string layoutName = layout.Name;
            int    i          = 1;

            for (; LayoutManager.LayoutExists(layoutName + i); i++)
            {
            }

            var newLayout = new XamlLayout(layout, layoutName + i);

            LayoutManager.AddLayout(newLayout);
            LayoutManager.SaveConfig();
        }
예제 #10
0
        private void OnLayoutNameChanged(XamlLayout xamlLayout, string before, string after)
        {
            if (_layoutMap.ContainsKey(before) == false)
            {
                throw new ArgumentException($"Layout name changed event called, but layout can't be found: {before}");
            }

            if (_layoutMap.ContainsKey(after))
            {
                throw new ArgumentException($"A layout already exists with that name: {after}");
            }

            _layoutMap.Remove(before);
            _layoutMap[after] = xamlLayout;
        }
예제 #11
0
        public void AddLayout(XamlLayout layout, bool replace = false)
        {
            if (_layoutMap.ContainsKey(layout.Name))
            {
                if (replace == false)
                {
                    throw new ArgumentException("A layout already exists with that name");
                }

                _layouts.Remove(_layoutMap[layout.Name]);
            }

            _layoutMap[layout.Name] = layout;
            _layouts.Add(layout);

            layout.NameChanged += OnLayoutNameChanged;
        }
예제 #12
0
        public void SetDefault(string layoutName)
        {
            var prevDefault = Default;

            try
            {
                if (layoutName == null || _layoutMap.ContainsKey(layoutName) == false)
                {
                    Default = GenericLayout;
                    return;
                }

                Default = _layoutMap[layoutName];
            }
            finally
            {
                if (prevDefault != null)
                {
                    prevDefault.IsDefault = false;
                }

                Default.IsDefault = true;
            }
        }
예제 #13
0
 private bool CanDelete(XamlLayout layout)
 {
     return(layout.IsBuiltIn == false);
 }
예제 #14
0
 private void Delete(XamlLayout layout)
 {
     LayoutManager.DeleteLayout(layout);
     LayoutManager.SaveConfig();
 }
예제 #15
0
 private bool CanEdit(XamlLayout layout)
 {
     return(layout.IsBuiltIn == false);
 }
예제 #16
0
 private void OnXamlChanged(XamlLayout xamlLayout, string before, string after)
 {
     _parseXamlTask.Trigger(500);
 }