public Grid TextSizeStepper(ICustomTextEdit editor)
        {
            Grid stepper = new Grid {
                RowSpacing = 0, Margin = 0
            };

            //stepper.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) });
            //stepper.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });
            //stepper.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(3, GridUnitType.Star) });
            //stepper.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(3, GridUnitType.Star) });
            //stepper.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });
            //stepper.BackgroundColor = MainTabbedPage.secondBarColor;
            //stepper.Children.Add(TextDn(editor), 1, 0);
            //stepper.Children.Add(TextUp(editor), 2, 0);
            stepper.RowDefinitions.Add(new RowDefinition {
                Height = new GridLength(1, GridUnitType.Star)
            });
            stepper.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1, GridUnitType.Star)
            });
            stepper.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1, GridUnitType.Star)
            });
            stepper.BackgroundColor = MainTabbedPage.secondBarColor;
            stepper.Children.Add(TextDn(editor), 0, 0);
            stepper.Children.Add(TextUp(editor), 1, 0);
            return(stepper);
        }
        public ImageButton TextUp(ICustomTextEdit editor)
        {
            ImageButton button = new ImageButton()
            {
                Source            = "icons8BigA40.png",
                HeightRequest     = MainTabbedPage.buttonHeightRequest,
                WidthRequest      = MainTabbedPage.buttonHeightRequest,
                HorizontalOptions = LayoutOptions.CenterAndExpand,
                BackgroundColor   = MainTabbedPage.secondBarColor,
            };

            button.Clicked += async(object sender, EventArgs e) => {
                float size = editor.GetFontSize();
                if (size < 128)
                {
                    editor.SetFontSize(size + 1);
                }
            };
            return(button);
        }
        public Button BtnInsertText(ICustomTextEdit editor, string title, int fontSize, string str)
        {
            Button button = new Button()
            {
                Margin            = 0, BorderWidth = 0, Padding = 0,
                Text              = title,
                HeightRequest     = MainTabbedPage.buttonHeightRequest,
                HorizontalOptions = LayoutOptions.CenterAndExpand,
                BackgroundColor   = MainTabbedPage.secondBarColor,
                FontSize          = fontSize,
            };

            button.Clicked += async(object sender, EventArgs e) => {
                editor.InsertText(str);
                if (Gui.platform != Kaemika.Platform.iOS)
                {
                    editor.ShowInputMethod();
                }
            };
            return(button);
        }
Beispiel #4
0
        public OutputPage()
        {
            Title           = "Output";
            IconImageSource = "icons8truefalse100.png";

            outputActions = new Dictionary <string, OutputAction>();
            foreach (OutputAction outputAction in outputActionsList())
            {
                outputActions[outputAction.name] = outputAction;
            }

            // in iOS>Resource the images of the TitleBar buttons must be size 40, otherwise they will scale but still take the horizontal space of the original

            textOutputButton  = TextOuputButton();
            graphOutputButton = GraphOutputButton();
            scoreOutputButton = ScoreOutputButton();

            ToolbarItems.Add(scoreOutputButton);
            scoreOutputButton.IsEnabled = false;
            ToolbarItems.Add(graphOutputButton);
            graphOutputButton.IsEnabled = true;
            ToolbarItems.Add(textOutputButton);
            textOutputButton.IsEnabled = true;
            ToolbarItems.Add(
                new ToolbarItem("CopyAll", "icons8export96", async() => {
                string text = "";
                if (currentOutputAction.kind == OutputKind.Text)
                {
                    text = editor.GetText();
                }
                if (currentOutputAction.kind == OutputKind.Graph)
                {
                    var layout = GraphLayoutHandler.GraphLayout();
                    if (layout == null)
                    {
                        return;
                    }
                    var graph = layout.GRAPH;
                    if (graph == null)
                    {
                        return;
                    }
                    text = Export.GraphViz(graph);
                }
                if (currentOutputAction.kind == OutputKind.Score)
                {
                    // ####  SVG
                }
                if (text != "")
                {
                    await Clipboard.SetTextAsync(text);
                }
            }));

            editor = Kaemika.XMGui.TextEditor();
            editor.SetEditable(false);

            plot = new GraphLayoutView();

            score = new ScoreView();

            var stepper     = MainTabbedPage.theModelEntryPage.TextSizeStepper(editor);
            var startButton = MainTabbedPage.theModelEntryPage.StartButton(switchToChart: false, switchToOutput: false); // just needed to get its HightRequest

            outputPicker = OutputPicker();

            int  bottomBarPadding = 4;
            Grid bottomBar        = new Grid {
                RowSpacing = 0, Padding = bottomBarPadding
            };

            bottomBar.RowDefinitions.Add(new RowDefinition {
                Height = new GridLength(1, GridUnitType.Star)
            });
            bottomBar.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1, GridUnitType.Star)
            });
            bottomBar.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1, GridUnitType.Star)
            });
            bottomBar.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1, GridUnitType.Star)
            });
            bottomBar.BackgroundColor = MainTabbedPage.secondBarColor;

            bottomBar.Children.Add(stepper, 0, 0);
            bottomBar.Children.Add(outputPicker, 1, 0);
            Grid.SetColumnSpan(outputPicker, 2);

            grid = new Grid {
                ColumnSpacing = 0
            };
            grid.RowDefinitions.Add(new RowDefinition {
                Height = new GridLength(1, GridUnitType.Star)
            });
            grid.RowDefinitions.Add(new RowDefinition {
                Height = new GridLength(startButton.HeightRequest + 2 * bottomBarPadding)
            });
            grid.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1, GridUnitType.Star)
            });

            backdrop = new Label {
                Text = "", BackgroundColor = Color.White
            };

            overlapping = new AbsoluteLayout();
            AbsoluteLayout.SetLayoutBounds(score, new Rectangle(0, 0, 1, 1));
            AbsoluteLayout.SetLayoutFlags(score, AbsoluteLayoutFlags.All);
            AbsoluteLayout.SetLayoutBounds(plot, new Rectangle(0, 0, 1, 1));
            AbsoluteLayout.SetLayoutFlags(plot, AbsoluteLayoutFlags.All);
            AbsoluteLayout.SetLayoutBounds(backdrop, new Rectangle(0, 0, 1, 1));
            AbsoluteLayout.SetLayoutFlags(backdrop, AbsoluteLayoutFlags.All);
            AbsoluteLayout.SetLayoutBounds(editor.AsView(), new Rectangle(0, 0, 1, 1));
            AbsoluteLayout.SetLayoutFlags(editor.AsView(), AbsoluteLayoutFlags.All);
            overlapping.Children.Add(score);
            overlapping.Children.Add(plot);
            overlapping.Children.Add(backdrop);
            overlapping.Children.Add(editor.AsView());

            grid.Children.Add(overlapping, 0, 0);
            grid.Children.Add(bottomBar, 0, 1);

            Content = grid;
        }
        public ModelEntryPage()
        {
            modelInfo       = new ModelInfo();
            Title           = modelInfo.title;
            IconImageSource = "icons8mindmap96.png";

            // in iOS>Resource the images of the TitleBar buttons must be size 40, otherwise they will scale but still take the horizontal space of the original

            //ToolbarItems.Add(DeleteItem());

            editItem = EditItem();
            ToolbarItems.Add(editItem);

            pasteAllItem           = PasteAllItem();
            pasteAllItem.IsEnabled = false;
            ToolbarItems.Add(pasteAllItem);

            copyAllItem = CopyAllItem();
            ToolbarItems.Add(copyAllItem);

            editor = Kaemika.XMGui.TextEditor();

            editor.OnTextChanged(
                async(ICustomTextEdit textEdit) => {
                if (!modelInfo.modified)
                {
                    modelInfo.modified = true;
                    ResetCurrentModels();
                }
            });

            editor.OnFocusChange(
                async(ICustomTextEdit textEdit) => {
                if (modelInfo.modified)
                {
                    SaveEditor();
                }
            });

            noisePicker = NoisePicker();
            subPicker   = SymbolPicker("Sub", 7, subscripts);
            supPicker   = SymbolPicker("Sup", 7, superscripts);
            mathPicker  = SymbolPicker(" ∑ ", 12, math);
            spamSpecies = BtnInsertText(editor, "species", 8, "species ");
            spamAt      = BtnInsertText(editor, "@", 12, " @ ");
            spamNumber  = BtnInsertText(editor, "number", 8, "number ");
            spamEq      = BtnInsertText(editor, "=", 12, " = ");
            spamPlus    = BtnInsertText(editor, "+", 12, " + ");
            spamArrow   = BtnInsertText(editor, "->", 12, " -> ");
            spamBiArrow = BtnInsertText(editor, "<->", 12, " <-> ");
            spamSharp   = BtnInsertText(editor, "Ø", 12, "Ø");
            spamCatal   = BtnInsertText(editor, ">>", 12, " >> ");
            spamBra     = BtnInsertText(editor, "{", 12, "{");
            spamKet     = BtnInsertText(editor, "}", 12, "}");
            spamReport  = BtnInsertText(editor, "report", 8, "report ");
            //spamComma = BtnInsertText(editor, ",", 12, ", ");
            spamEquil    = BtnInsertText(editor, "equilib.", 8, "equilibrate for ");
            startButton  = StartButton(switchToChart: true, switchToOutput: false);
            deviceButton = DeviceButton();
            stepper      = TextSizeStepper(editor);

            int topBarPadding = 0;

            topBar = new Grid {
                RowSpacing = 0, ColumnSpacing = 0, Padding = topBarPadding
            };
            topBar.RowDefinitions.Add(new RowDefinition {
                Height = new GridLength(1, GridUnitType.Star)
            });
            topBar.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1, GridUnitType.Star)
            });
            topBar.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1, GridUnitType.Star)
            });
            topBar.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1, GridUnitType.Star)
            });
            topBar.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1, GridUnitType.Star)
            });
            topBar.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1, GridUnitType.Star)
            });
            topBar.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1, GridUnitType.Star)
            });
            topBar.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1, GridUnitType.Star)
            });
            topBar.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1, GridUnitType.Star)
            });
            topBar.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1, GridUnitType.Star)
            });
            topBar.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1, GridUnitType.Star)
            });
            topBar.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1, GridUnitType.Star)
            });
            topBar.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1, GridUnitType.Star)
            });
            topBar.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1, GridUnitType.Star)
            });
            topBar.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1, GridUnitType.Star)
            });
            topBar.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1, GridUnitType.Star)
            });
            topBar.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1, GridUnitType.Star)
            });
            topBar.BackgroundColor = MainTabbedPage.secondBarColor;
            topBar.IsVisible       = false;

            topBar.Children.Add(spamSpecies, 0, 0);
            topBar.Children.Add(spamAt, 1, 0);
            topBar.Children.Add(spamNumber, 2, 0);
            topBar.Children.Add(spamEq, 3, 0);
            topBar.Children.Add(spamPlus, 4, 0);
            topBar.Children.Add(spamArrow, 5, 0);
            topBar.Children.Add(spamBiArrow, 6, 0);
            topBar.Children.Add(spamSharp, 7, 0);
            topBar.Children.Add(spamCatal, 8, 0);
            topBar.Children.Add(spamBra, 9, 0);
            topBar.Children.Add(spamKet, 10, 0);
            topBar.Children.Add(spamReport, 11, 0);
            topBar.Children.Add(spamEquil, 12, 0);
            topBar.Children.Add(subPicker, 13, 0);
            topBar.Children.Add(supPicker, 14, 0);
            topBar.Children.Add(mathPicker, 15, 0);
            //topBar.Children.Add(spamComma, xx, 0);

            int bottomBarPadding = 4;

            bottomBar = new Grid {
                RowSpacing = 0, Padding = bottomBarPadding
            };
            bottomBar.RowDefinitions.Add(new RowDefinition {
                Height = new GridLength(1, GridUnitType.Star)
            });
            bottomBar.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1, GridUnitType.Star)
            });                                                                                                     // stepper
            bottomBar.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1, GridUnitType.Star)
            });                                                                                                     // noisePicker
            bottomBar.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1, GridUnitType.Star)
            });                                                                                                     // deviceButton
            bottomBar.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1, GridUnitType.Star)
            });                                                                                                     // startButton
            bottomBar.BackgroundColor = MainTabbedPage.secondBarColor;

            bottomBar.Children.Add(stepper, 0, 0);
            bottomBar.Children.Add(deviceButton, 1, 0);
            bottomBar.Children.Add(noisePicker, 2, 0);
            bottomBar.Children.Add(startButton, 3, 0);

            Grid grid = new Grid {
                ColumnSpacing = 0
            };

            grid.RowDefinitions.Add(new RowDefinition {
                Height = new GridLength(spamSpecies.HeightRequest + 2 * topBarPadding)
            });                                                                                                                 // top bar
            grid.RowDefinitions.Add(new RowDefinition {
                Height = new GridLength(1, GridUnitType.Star)
            });                                                                                                                     // editor
            grid.RowDefinitions.Add(new RowDefinition {
                Height = new GridLength(startButton.HeightRequest + 2 * bottomBarPadding)
            });                                                                                                                     // bottom bar
            grid.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1, GridUnitType.Star)
            });

            grid.Children.Add(topBar, 0, 0);
            grid.Children.Add(editor.AsView(), 0, 1);
            grid.Children.Add(bottomBar, 0, 2);

            Content = grid;
        }