private void ButtonOpen_Click(object sender, RoutedEventArgs e) { if (Runtime.IsRunningInVisualStudioDesigner) { return; } SceneRenderingControl.OpenFromDisk(); }
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); } } } }
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); }
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); } }
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); } } }
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; }
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(); } }
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); } } } }
private void ButtonNew_Click(object sender, RoutedEventArgs e) { SceneRenderingControl.New(); }
private void DoSearch() { SceneRenderingControl.Search(TextBoxFind.Text); TextBoxFind.SelectAll(); }
private void ButtonOpen_Click(object sender, RoutedEventArgs e) { SceneRenderingControl.OpenFromDisk(); }
private void ButtonSaveAs_Click(object sender, RoutedEventArgs e) { SceneRenderingControl.SaveAsToDisk(); }
public NodeControl(SceneRenderingControl scene_rendering_control) : this(scene_rendering_control, new NodeControlSceneData()) { }
private void ButtonZoomOut_Click(object sender, RoutedEventArgs e) { SceneRenderingControl.ZoomOut(); }
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()"); }
public AutoArranger(SceneRenderingControl scene_rendering_control) { this.scene_rendering_control = scene_rendering_control; }
public void OpenSample() { SceneRenderingControl.OpenSample(); }