Example #1
0
        private void ButtonOpen_Click(object sender, RoutedEventArgs e)
        {
            if (Runtime.IsRunningInVisualStudioDesigner)
            {
                return;
            }

            SceneRenderingControl.OpenFromDisk();
        }
Example #2
0
        private static void CreateSampleScene(SceneRenderingControl scene_rendering_control, double x, double y, double skew)
        {
            int N = 300;

            Random random = new Random();

            string[] icon_filenames = new string[] { "papers/binoculars", "papers/boat", "papers/flame", "papers/radioactive", "papers/bread", "papers/news", "papers/music", "papers/percentage", "papers/postit" };

            NodeControl[] ncs = new NodeControl[N];
            for (int i = 0; i < N; ++i)
            {
                object node_content;

                switch (i % 2)
                {
                case 0:
                {
                    IconNodeContent icon_node_content = new IconNodeContent(icon_filenames[random.Next(icon_filenames.Length)]);
                    node_content = icon_node_content;
                    break;
                }

                case 1:
                {
                    StringNodeContent snc = new StringNodeContent();
                    snc.Text     = String.Format("Button {0}", i);
                    node_content = snc;
                    break;
                }

                default:
                    node_content = null;
                    break;
                }

                double raw_angle = 6 * i * Math.PI / 100;
                double distance  = 10 + i * 4 + RandomAugmented.Instance.NextDouble() * 10;
                double left      = x + distance * (-2 + skew) * Math.Sin(raw_angle) + RandomAugmented.Instance.NextDouble() * 30 - 15;
                double top       = y + distance * (+2 + skew) * Math.Cos(raw_angle) + RandomAugmented.Instance.NextDouble() * 30 - 15;

                ncs[i] = scene_rendering_control.AddNewNodeControl(node_content, left, top);

                // A line for this to the prev nc
                if (i > 3 && (i / 2) % 20 == 0)
                {
                    for (int j = 0; j < 3; ++j)
                    {
                        ConnectorControl cc = new ConnectorControl(scene_rendering_control);
                        cc.SetNodes(ncs[i - j], ncs[i]);
                        scene_rendering_control.AddNewConnectorControl(cc);
                    }
                }
            }
        }
Example #3
0
        private void NotifySceneRenderingControl()
        {
            WPFDoEvents.InvokeAsyncInUIThread(() =>
            {
                SceneRenderingControl scene_rendering_control = SceneRenderingControl;

                if (scene_rendering_control != null)
                {
                    scene_rendering_control.RecalculateAllNodeControlDimensions();
                }
            }, DispatcherPriority.Background);
        }
        public NodeControl(SceneRenderingControl scene_rendering_control, NodeControlSceneData scene_data)
        {
            this.scene_rendering_control = scene_rendering_control;
            this.scene_data = scene_data;

            InitializeComponent();

            Focusable = true;

            SizeChanged    += NodeControl_SizeChanged;
            GotFocus       += NodeControl_GotFocus;
            MouseDown      += NodeControl_MouseDown;
            MouseUp        += NodeControl_MouseUp;
            MouseMove      += NodeControl_MouseMove;
            PreviewKeyDown += NodeControl_PreviewKeyDown;
            KeyDown        += NodeControl_KeyDown;

            shadow = new PropertyShadowForPanels(this);
        }
Example #5
0
 private void ButtonNextClickMode_Click(object sender, RoutedEventArgs e)
 {
     if (sender == ButtonHand)
     {
         ButtonHand.IsChecked    = true;
         ButtonAddText.IsChecked = false;
         SceneRenderingControl.SetNextClickMode(SceneRenderingControl.NextClickMode.Hand);
     }
     else if (sender == ButtonAddText)
     {
         ButtonHand.IsChecked    = false;
         ButtonAddText.IsChecked = true;
         SceneRenderingControl.SetNextClickMode(SceneRenderingControl.NextClickMode.AddText);
     }
     else
     {
         Logging.Warn("An unknown control called ButtonNextClickMode_Click: {0}", sender);
     }
 }
Example #6
0
        public ConnectorControl(SceneRenderingControl scene_rendering_control)
        {
            this.scene_rendering_control = scene_rendering_control;

            Node_OnDimensionsChangedDelegate = Node_OnDimensionsChanged;
            Node_OnDeletedDelegate           = Node_OnDeleted;

            //this.Stroke = STROKE_BRUSH;
            //this.StrokeThickness = 0.5;
            Fill       = STROKE_BRUSH;
            HeadWidth  = 0;
            HeadHeight = 2;

            Focusable       = true;
            GotFocus       += ConnectorControl_GotFocus;
            MouseDown      += ConnectorControl_MouseDown;
            PreviewKeyDown += ConnectorControl_PreviewKeyDown;

            shadow = new PropertyShadow(this);
        }
        static void GetAdjoiningConnectors(SceneRenderingControl scene_rendering_control, NodeControl node_control_parent, out List <ConnectorControl> connectors_both, out List <ConnectorControl> connectors_to, out List <ConnectorControl> connectors_from)
        {
            connectors_both = new List <ConnectorControl>();
            connectors_to   = new List <ConnectorControl>();
            connectors_from = new List <ConnectorControl>();

            // Get the inbound and outbound edges
            foreach (ConnectorControl connector in scene_rendering_control.ObjNodesLayer.Children.OfType <ConnectorControl>())
            {
                if (connector.node_from == node_control_parent)
                {
                    connectors_both.Add(connector);
                    connectors_from.Add(connector);
                }
                if (connector.node_to == node_control_parent)
                {
                    connectors_both.Add(connector);
                    connectors_to.Add(connector);
                }
            }
        }
Example #8
0
        public SelectedNodeControl(SceneRenderingControl scene_rendering_control)
        {
            this.scene_rendering_control = scene_rendering_control;

            InitializeComponent();

            ObjGridOverlay.Background = background_brush;
            ObjBorder.BorderBrush     = border_brush;
            ObjBorder.BorderThickness = border_thickness;

            SelectedNode_OnDimensionsChangedDelegate = SelectedNode_OnDimensionsChanged;
            SelectedNode_OnDeletedDelegate           = SelectedNode_OnDeleted;

            FormatSizer(SizerTL, Cursors.SizeNWSE);
            FormatSizer(SizerTR, Cursors.SizeNESW);
            FormatSizer(SizerBL, Cursors.SizeNESW);
            FormatSizer(SizerBR, Cursors.SizeNWSE);

            Focusable  = true;
            Visibility = Visibility.Collapsed;
        }
Example #9
0
        private void DoLayout()
        {
            int SPEED = 1;

            SceneRenderingControl scene_rendering_control = SceneRenderingControl;

            if (scene_rendering_control != null)
            {
                // If the nodes and connectors have changed, recache them!
                if (cache_scene_changed_marker != scene_rendering_control.SceneChangedMarker)
                {
                    Logging.Info("Scene has changed, so autolayout is recaching.");
                    cache_scene_changed_marker = scene_rendering_control.SceneChangedMarker;
                    cache_node_controls        = new List <NodeControl>(scene_rendering_control.NodeControls);
                    cache_connector_controls   = new List <ConnectorControl>(scene_rendering_control.ConnectorControlManager.ConnectorControls);
                }

                // We reuse this so that it is memory allocation time efficient
                NodesVector vector = new NodesVector();

                // Also note that Utilities codebase had ATTRACTION *before* REPULSION.
                // Haven't looked at the precise code, but wouldn't be surprised if this is
                // very similar to the D3 force anneal code (D3.js) anyway. There aren't that
                // many ways to stabilize a (large) graph in 2D.
                //
                // See also https://github.com/jimmejardine/qiqqa-open-source/issues/26

                // Perform the repulsion
                if (true)
                {
                    int MAX_NODES = cache_node_controls.Count;
                    for (int i = 0; i < MAX_NODES; ++i)
                    {
                        NodeControlSceneData nodeI = cache_node_controls[i].NodeControlSceneData;
                        if (nodeI.Deleted)
                        {
                            continue;
                        }

                        for (int j = i + 1; j < MAX_NODES; ++j)
                        {
                            NodeControlSceneData nodeJ = cache_node_controls[j].NodeControlSceneData;
                            if (nodeJ.Deleted)
                            {
                                continue;
                            }

                            vector.Recalculate(nodeI, nodeJ);

                            // Utilities code had:
                            //
                            // See also https://github.com/jimmejardine/qiqqa-open-source/issues/26
#if UNUSED_CODE
                            double strength = SPEED * Math.Min(2, (vector.minimum_extent / (vector.box_distance + 1)));
                            DoPushPull(nodeI, nodeJ, vector, strength);
#else
                            // Qiqqa code chunk alt:
                            double strength = vector.maximum_extent * SPEED * (1 / (vector.box_distance + 1));
                            strength = Math.Min(strength, 5);
                            if (strength > 10)
                            {
                            }
                            // end of Qiqqa alt chunk; looks to me like someone has been fiddling around here...
                            // (including the logline below, which was also not in Utilities codebase...
                            DoPushPull(nodeI, nodeJ, vector, strength);
                            //Logging.Info("REPULSE STRENGTH={0}, box.distance={1}", strength, vector.box_distance);
#endif
                        }
                    }
                }

                // Perform the attraction
                if (true)
                {
                    int MAX_CONNECTORS = cache_connector_controls.Count;
                    for (int i = 0; i < MAX_CONNECTORS; ++i)
                    {
                        ConnectorControl connector = cache_connector_controls[i];
                        if (connector.Deleted)
                        {
                            continue;
                        }

                        NodeControlSceneData nodeI = connector.NodeFrom.NodeControlSceneData;
                        NodeControlSceneData nodeJ = connector.NodeTo.NodeControlSceneData;

                        vector.Recalculate(nodeI, nodeJ);

#if UNUSED_CODE
                        // Utilities codebase was:
                        // See also https://github.com/jimmejardine/qiqqa-open-source/issues/26
                        double strength = -1 * SPEED * (vector.distance / vector.minimum_extent);
                        DoPushPull(nodeI, nodeJ, vector, strength);
#else
                        double strength = -1 * SPEED * (vector.box_distance / 50);
                        DoPushPull(nodeI, nodeJ, vector, strength);
                        //Logging.Info("ATTRACT STRENGTH={0}", strength);
#endif
                    }
                }

                NotifySceneRenderingControl();
            }
        }
Example #10
0
 public AutoArranger(SceneRenderingControl scene_rendering_control)
 {
     this.scene_rendering_control = new WeakReference <SceneRenderingControl>(scene_rendering_control);
 }
 internal DragDropManager(SceneRenderingControl scene_rendering_control)
 {
     this.scene_rendering_control = new WeakReference <SceneRenderingControl>(scene_rendering_control);
 }
 internal DragDropManager(SceneRenderingControl scene_rendering_control)
 {
     this.scene_rendering_control = scene_rendering_control;
 }
 public static void CreateSampleScene_Spiral(SceneRenderingControl scene_rendering_control)
 {
     CreateSampleScene(scene_rendering_control, 0, 0, 0);
     //CreateSampleScene(scene_rendering_control, +2000, +2000, -1);
     //CreateSampleScene(scene_rendering_control, -5000, +5000, +1);
 }
        public static void CreateSampleScene_Coordinates(SceneRenderingControl scene_rendering_control)
        {
            int EXTENT = 30;
            int SCALE  = 100;

            NodeControl nx = scene_rendering_control.AddNewNodeControl(new StringNodeContent()
            {
                Text = "nx"
            }, -2 * SCALE * EXTENT, 0, 100, 100);
            NodeControl px = scene_rendering_control.AddNewNodeControl(new StringNodeContent()
            {
                Text = "px"
            }, +2 * SCALE * EXTENT, 0, 100, 100);
            NodeControl ny = scene_rendering_control.AddNewNodeControl(new StringNodeContent()
            {
                Text = "ny"
            }, 0, -2 * SCALE * EXTENT, 100, 100);
            NodeControl py = scene_rendering_control.AddNewNodeControl(new StringNodeContent()
            {
                Text = "py"
            }, 0, +2 * SCALE * EXTENT, 100, 100);

            for (int x = -EXTENT; x <= EXTENT; ++x)
            {
                for (int y = -EXTENT; y <= EXTENT; ++y)
                {
                    double width  = 100 / (1 + Math.Abs(x) + Math.Abs(y));
                    double height = 100 / (1 + Math.Abs(x) + Math.Abs(y));

                    double xpos = x * SCALE;
                    double ypos = y * SCALE;

                    StringNodeContent snc = new StringNodeContent();
                    snc.Text = String.Format("{0} {1}", xpos, ypos);

                    NodeControl node_control = scene_rendering_control.AddNewNodeControl(snc, xpos, ypos, width, height);

                    if (x == -EXTENT)
                    {
                        ConnectorControl cc = new ConnectorControl(scene_rendering_control);
                        cc.SetNodes(nx, node_control);
                        scene_rendering_control.AddNewConnectorControl(cc);
                    }
                    if (x == +EXTENT)
                    {
                        ConnectorControl cc = new ConnectorControl(scene_rendering_control);
                        cc.SetNodes(px, node_control);
                        scene_rendering_control.AddNewConnectorControl(cc);
                    }
                    if (y == -EXTENT)
                    {
                        ConnectorControl cc = new ConnectorControl(scene_rendering_control);
                        cc.SetNodes(ny, node_control);
                        scene_rendering_control.AddNewConnectorControl(cc);
                    }
                    if (y == +EXTENT)
                    {
                        ConnectorControl cc = new ConnectorControl(scene_rendering_control);
                        cc.SetNodes(py, node_control);
                        scene_rendering_control.AddNewConnectorControl(cc);
                    }
                }
            }
        }
Example #15
0
 private void ButtonNew_Click(object sender, RoutedEventArgs e)
 {
     SceneRenderingControl.New();
 }
Example #16
0
 private void DoSearch()
 {
     SceneRenderingControl.Search(TextBoxFind.Text);
     TextBoxFind.SelectAll();
 }
Example #17
0
 private void ButtonOpen_Click(object sender, RoutedEventArgs e)
 {
     SceneRenderingControl.OpenFromDisk();
 }
Example #18
0
 private void ButtonSaveAs_Click(object sender, RoutedEventArgs e)
 {
     SceneRenderingControl.SaveAsToDisk();
 }
 public NodeControl(SceneRenderingControl scene_rendering_control) :
     this(scene_rendering_control, new NodeControlSceneData())
 {
 }
Example #20
0
 private void ButtonZoomOut_Click(object sender, RoutedEventArgs e)
 {
     SceneRenderingControl.ZoomOut();
 }
Example #21
0
        public BrainstormControl()
        {
            Logging.Debug("+BrainstormControl()");

            InitializeComponent();

            SceneRenderingControl.SceneRenderingControl_PostConstructor(ObjBrainstormMetadata);

            bool ADVANCED_MENUS = ConfigurationManager.Instance.ConfigurationRecord.GUI_AdvancedMenus;

            if (!ADVANCED_MENUS)
            {
                ButtonNew.Caption = "New\nBrainstorm";
            }
            ButtonNew.Icon    = Icons.GetAppIcon(Icons.New);
            ButtonNew.ToolTip = "Create a new brainstorm";
            ButtonNew.Click  += ButtonNew_Click;
            if (!ADVANCED_MENUS)
            {
                ButtonOpen.Caption = "Open\nBrainstorm";
            }
            ButtonOpen.Icon    = Icons.GetAppIcon(Icons.Open);
            ButtonOpen.ToolTip = "Open an existing brainstorm";
            ButtonOpen.Click  += ButtonOpen_Click;
            if (!ADVANCED_MENUS)
            {
                ButtonSave.Caption = "Save\nBrainstorm";
            }
            ButtonSave.Icon    = Icons.GetAppIcon(Icons.Save);
            ButtonSave.ToolTip = "Save this brainstorm";
            ButtonSave.Click  += ButtonSave_Click;
            if (!ADVANCED_MENUS)
            {
                ButtonSaveAs.Caption = "Save As\nBrainstorm";
            }
            ButtonSaveAs.Icon         = Icons.GetAppIcon(Icons.SaveAs);
            ButtonSaveAs.ToolTip      = "Save this brainstorm as another name";
            ButtonSaveAs.Click       += ButtonSaveAs_Click;
            TextBoxFind.ToolTip       = "Enter your search words here and press <ENTER> to search this brainstorm";
            TextBoxFind.OnHardSearch += TextBoxFind_OnHardSearch;
            if (!ADVANCED_MENUS)
            {
                ButtonPrint.Caption = "Print";
            }
            ButtonPrint.Icon    = Icons.GetAppIcon(Icons.Printer);
            ButtonPrint.ToolTip = "Print this brainstorm";
            ButtonPrint.Click  += ButtonPrint_Click;
            if (!ADVANCED_MENUS)
            {
                ButtonZoomIn.Caption = "Zoom\nIn";
            }
            ButtonZoomIn.Icon    = Icons.GetAppIcon(Icons.ZoomIn);
            ButtonZoomIn.ToolTip = "Zoom in";
            ButtonZoomIn.Click  += ButtonZoomIn_Click;
            if (!ADVANCED_MENUS)
            {
                ButtonZoomOut.Caption = "Zoom\nOut";
            }
            ButtonZoomOut.Icon    = Icons.GetAppIcon(Icons.ZoomOut);
            ButtonZoomOut.ToolTip = "Zoom out";
            ButtonZoomOut.Click  += ButtonZoomOut_Click;
            if (!ADVANCED_MENUS)
            {
                ButtonHelp.Caption = "Toggle\nHelp";
            }
            ButtonHelp.Icon    = Icons.GetAppIcon(Icons.Help);
            ButtonHelp.ToolTip = "Toggle help";
            ButtonHelp.Click  += ButtonHelp_Click;

            if (!ADVANCED_MENUS)
            {
                ButtonHand.Caption = "Move\n& Pan";
            }
            ButtonHand.Icon    = Icons.GetAppIcon(Icons.Hand);
            ButtonHand.ToolTip = "Move around brainstorm";
            ButtonHand.Click  += ButtonNextClickMode_Click;
            if (!ADVANCED_MENUS)
            {
                ButtonAddText.Caption = "Add\nNode";
            }
            ButtonAddText.Icon    = Icons.GetAppIcon(Icons.BrainstormAddText);
            ButtonAddText.ToolTip = "Add a text node";
            ButtonAddText.Click  += ButtonNextClickMode_Click;
            if (!ADVANCED_MENUS)
            {
                ButtonAddConnector.Caption = "Add\nConnector";
            }
            ButtonAddConnector.Icon    = Icons.GetAppIcon(Icons.BrainstormAddConnector);
            ButtonAddConnector.ToolTip = "Connect two nodes in this brainstorm";
            ButtonAddConnector.Click  += ButtonAddConnector_Click;
            if (!ADVANCED_MENUS)
            {
                ButtonAddImage.Caption = "Add\nImage";
            }
            ButtonAddImage.Icon    = Icons.GetAppIcon(Icons.BrainstormAddImage);
            ButtonAddImage.ToolTip = "Add an image node";
            ButtonAddImage.Click  += ButtonNextClickMode_Click;

            if (!ADVANCED_MENUS)
            {
                ButtonAutoArrange.Caption = "Auto\nArrange";
            }
            ButtonAutoArrange.Icon    = Icons.GetAppIcon(Icons.BrainstormAutoArrange);
            ButtonAutoArrange.ToolTip = "Automatically arrange your brainstorm.";
            ButtonAutoArrange.Click  += ButtonAutoArrange_Click;

            RadioNodeAdditionMode_Connect.Click += RadioNodeAdditionMode_Click;
            RadioNodeAdditionMode_Create.Click  += RadioNodeAdditionMode_Click;
            {
                string tooltip = "When exploring your library, you can choose either to:\n\treuse nodes that are already on your brainstorm (to see existing relationships); or to\n\tcreate duplicates (to explore your library deeply without getting too cluttered).";
                RadioNodeAdditionMode_Connect.ToolTip = tooltip;
                RadioNodeAdditionMode_Create.ToolTip  = tooltip;
            }

            Webcasts.FormatWebcastButton(ButtonWebcast_Themes, Webcasts.BRAINSTORM_THEMES);
            if (!ADVANCED_MENUS)
            {
                ButtonWebcast_Themes.Caption = "Tutorial 1\n";
            }
            Webcasts.FormatWebcastButton(ButtonWebcast_Intro, Webcasts.BRAINSTORM);
            if (!ADVANCED_MENUS)
            {
                ButtonWebcast_Intro.Caption = "Tutorial 2\n";
            }

            // The tabs in the editor area
            DualTabControlArea.Children.Clear();
            DualTabControlArea.AddContent("Edit", "Edit", null, false, false, ObjStackEditor);
            DualTabControlArea.AddContent("Help", "Help", null, false, false, ObjBrainstormControlHelpWhenEmpty);
            DualTabControlArea.AddContent("Info", "Info", null, false, false, ObjBrainstormMetadata);
            DualTabControlArea.MakeActive("Help");
            LoadEditorFrameworkElement(ObjStackEditorHelpWhenEmpty);

            // Listen for node changes
            SceneRenderingControl.SelectedNodeControlChanged += ObjSceneRenderingControl_SelectedNodeControlChanged;

            Logging.Debug("-BrainstormControl()");
        }
Example #22
0
 public AutoArranger(SceneRenderingControl scene_rendering_control)
 {
     this.scene_rendering_control = scene_rendering_control;
 }
Example #23
0
 public void OpenSample()
 {
     SceneRenderingControl.OpenSample();
 }