/// <summary>
        /// Login to a SpeckleServer
        /// </summary>
        private void Login(object sender, RoutedEventArgs e)
        {
            var signInWindow = new SpecklePopup.SignInWindow(true);

            var helper = new System.Windows.Interop.WindowInteropHelper(signInWindow)
            {
                Owner = new System.Windows.Interop.WindowInteropHelper(this).Handle
            };

            this.IsEnabled = false;

            signInWindow.ShowDialog();

            this.IsEnabled = true;

            if (signInWindow.AccountListBox.SelectedIndex != -1)
            {
                var account = signInWindow.accounts[signInWindow.AccountListBox.SelectedIndex];

                EmailAddress = account.Email;
                RestApi      = account.RestApi;
                ApiToken     = account.Token;
                (SenderTab.Content as Grid).IsEnabled   = FileOpened && LoggedIn;
                (ReceiverTab.Content as Grid).IsEnabled = FileOpened && LoggedIn;
                UpdateClientLists();

                Status.AddMessage("Logged in to account at: " + RestApi);
            }
            else
            {
                Status.AddError("Failed to log in");
            }
        }
Example #2
0
        private void AddSpeckleMenu(object sender, ElapsedEventArgs e)
        {
            if (Grasshopper.Instances.DocumentEditor == null)
            {
                return;
            }

            if (MenuHasBeenAdded)
            {
                loadTimer.Stop();
                return;
            }

            var speckleMenu = new ToolStripMenuItem("Speckle");

            speckleMenu.DropDown.Items.Add("Speckle Account Manager", null, (s, a) =>
            {
                var signInWindow = new SpecklePopup.SignInWindow(false);
                var helper       = new System.Windows.Interop.WindowInteropHelper(signInWindow);
                helper.Owner     = Rhino.RhinoApp.MainWindowHandle();
                signInWindow.Show();
            });

            speckleMenu.DropDown.Items.Add(new ToolStripSeparator());

            speckleMenu.DropDown.Items.Add("Speckle Home", null, (s, a) =>
            {
                Process.Start(@"https://speckle.works");
            });

            speckleMenu.DropDown.Items.Add("Speckle Documentation", null, (s, a) =>
            {
                Process.Start(@"https://speckle.works/docs/essentials/start");
            });

            speckleMenu.DropDown.Items.Add("Speckle Forum", null, (s, a) =>
            {
                Process.Start(@"https://discourse.speckle.works");
            });

            try
            {
                var mainMenu = Grasshopper.Instances.DocumentEditor.MainMenuStrip;
                Grasshopper.Instances.DocumentEditor.Invoke(new Action(() =>
                {
                    mainMenu.Items.Insert(mainMenu.Items.Count - 2, speckleMenu);
                }));
                MenuHasBeenAdded = true;
                loadTimer.Stop();
            }
            catch (Exception err)
            {
                Debug.WriteLine(err.Message);
            }
        }
Example #3
0
        public virtual void ShowAccountsPopup( )
        {
            Window.Dispatcher.Invoke(() =>
            {
                var signInWindow = new SpecklePopup.SignInWindow();

                var helper   = new System.Windows.Interop.WindowInteropHelper(signInWindow);
                helper.Owner = new System.Windows.Interop.WindowInteropHelper(Window).Handle;

                signInWindow.ShowDialog();
                DispatchStoreActionUi("getAccounts");
            });
        }
        public override void AddedToDocument(GH_Document document)
        {
            base.AddedToDocument(document);
            Document = this.OnPingDocument();

            if (Client == null)
            {
                Account account = null;
                try
                {
                    account = LocalContext.GetDefaultAccount();
                }
                catch (Exception err)
                {
                }

                if (account == null)
                {
                    var signInWindow = new SpecklePopup.SignInWindow(true);
                    var helper       = new System.Windows.Interop.WindowInteropHelper(signInWindow);
                    helper.Owner = Rhino.RhinoApp.MainWindowHandle();

                    signInWindow.ShowDialog();

                    if (signInWindow.AccountListBox.SelectedIndex != -1)
                    {
                        account = signInWindow.accounts[signInWindow.AccountListBox.SelectedIndex];
                    }
                    else
                    {
                        AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Account selection failed.");
                        return;
                    }
                }

                RestApi   = account.RestApi;
                AuthToken = account.Token;
            }

            StreamIdChanger           = new System.Timers.Timer(1000); StreamIdChanger.Enabled = false;
            StreamIdChanger.AutoReset = false;
            StreamIdChanger.Elapsed  += ChangeStreamId;
        }
Example #5
0
        public override void AddedToDocument(GH_Document document)
        {
            base.AddedToDocument(document);
            Document = OnPingDocument();

            if (Client == null)
            {
                Locked   = true;
                NickName = "Initialising";

                Account account = null;
                try
                {
                    account = LocalContext.GetDefaultAccount();
                    RestApi = account.RestApi;
                    Client  = new SpeckleApiClient(account.RestApi);
                    Client.IntializeSender(account.Token, Document.DisplayName, "Grasshopper", Document.DocumentID.ToString()).ContinueWith(task =>
                    {
                        Rhino.RhinoApp.InvokeOnUiThread(ExpireComponentAction);
                    });
                }
                catch (Exception err)
                {
                }

                if (account == null)
                {
                    var signInWindow = new SpecklePopup.SignInWindow(true);
                    var helper       = new System.Windows.Interop.WindowInteropHelper(signInWindow);
                    helper.Owner = Rhino.RhinoApp.MainWindowHandle();

                    signInWindow.ShowDialog();

                    if (signInWindow.AccountListBox.SelectedIndex != -1)
                    {
                        account = signInWindow.accounts[signInWindow.AccountListBox.SelectedIndex];
                        RestApi = account.RestApi;
                        Client  = new SpeckleApiClient(account.RestApi);
                        Client.IntializeSender(account.Token, Document.DisplayName, "Grasshopper", Document.DocumentID.ToString()).ContinueWith(task =>
                        {
                            Rhino.RhinoApp.InvokeOnUiThread(ExpireComponentAction);
                        });
                    }
                    else
                    {
                        AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Account selection failed.");
                        return;
                    }
                }
            }
            else
            {
            }

            Client.OnReady += (sender, e) =>
            {
                StreamId = Client.StreamId;
                if (!WasSerialised)
                {
                    Locked   = false;
                    NickName = "Anonymous Stream";
                }
                ////this.UpdateMetadata();
                Rhino.RhinoApp.InvokeOnUiThread(ExpireComponentAction);
            };

            Client.OnWsMessage += OnWsMessage;

            Client.OnLogData += (sender, e) =>
            {
                Log += DateTime.Now.ToString("dd:HH:mm:ss ") + e.EventData + "\n";
            };

            Client.OnError += (sender, e) =>
            {
                AddRuntimeMessage(GH_RuntimeMessageLevel.Error, e.EventName + ": " + e.EventData);
                Log += DateTime.Now.ToString("dd:HH:mm:ss ") + e.EventData + "\n";
            };

            ExpireComponentAction = () => ExpireSolution(true);

            ObjectChanged += (sender, e) => UpdateMetadata();

            foreach (var param in Params.Input)
            {
                param.ObjectChanged += (sender, e) => UpdateMetadata();
            }

            MetadataSender = new System.Timers.Timer(1000)
            {
                AutoReset = false, Enabled = false
            };
            MetadataSender.Elapsed += MetadataSender_Elapsed;

            DataSender = new System.Timers.Timer(2000)
            {
                AutoReset = false, Enabled = false
            };
            DataSender.Elapsed += DataSender_Elapsed;

            ObjectCache = new Dictionary <string, SpeckleObject>();

            Grasshopper.Instances.DocumentServer.DocumentRemoved += DocumentServer_DocumentRemoved;
        }
Example #6
0
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            if (Client == null)
            {
                Account account = null;
                try
                {
                    RestApi = account.RestApi;
                    Client  = new SpeckleApiClient(account.RestApi);
                    Client.IntializeSender(account.Token, "docName", "Revit_Datasmith", "").ContinueWith(task =>
                                                                                                         { });
                }
                catch (Exception err)
                {
                }

                if (account == null)
                {
                    var signInWindow = new SpecklePopup.SignInWindow(true);

                    signInWindow.ShowDialog();

                    if (signInWindow.AccountListBox.SelectedIndex != -1)
                    {
                        account = signInWindow.accounts[signInWindow.AccountListBox.SelectedIndex];
                        RestApi = account.RestApi;
                        Client  = new SpeckleApiClient(account.RestApi);
                        Client.IntializeSender(account.Token, "docName", "Revit_Datasmith", "").ContinueWith(task =>
                                                                                                             { });
                    }
                    else
                    {
                        return(Result.Cancelled);
                    }
                }
            }
            else
            {
            }

            Client.OnReady += (sender, e) =>
            {
                StreamId = Client.StreamId;
            };

            MetadataSender = new System.Timers.Timer(1000)
            {
                AutoReset = false, Enabled = false
            };
            MetadataSender.Elapsed += MetadataSender_Elapsed;

            DataSender = new System.Timers.Timer(2000)
            {
                AutoReset = false, Enabled = false
            };
            DataSender.Elapsed += DataSender_Elapsed;

            ObjectCache = new Dictionary <string, SpeckleObject>();


            // Original datasmith form. Need to remove form.
            DatasmithRevitCommand dmrc = new DatasmithRevitCommand();

            dmrc.SpeckleCommand = this;
            dmrc.Execute(commandData, ref message, elements);



            //ForceUpdateData();


            return(Result.Succeeded);
        }
        public void Loaded(ViewLoadedParams viewLoadedParams)
        {
            //new node manager
            var nodeManagerViewModel = new NodeManagerViewModel(viewLoadedParams);

            _nodeManager = new NodeManager
            {
                Owner       = viewLoadedParams.DynamoWindow,
                DataContext = nodeManagerViewModel
            };

            var speckleMenu = new MenuItem {
                Header = "Speckle"
            };

            var speckleAccountsMenu = new MenuItem {
                Header = "Manage Accounts"
            };
            var speckleNodeManagerMenu = new MenuItem {
                Header = "Manage Speckle Nodes"
            };
            var speckleSendReceiveNodesMenu = new MenuItem {
                Header = "Send/Receive nodes (experimental)"
            };


            var speckleNodeSender = new MenuItem {
                Header = "Node Sender"
            };
            var speckleNodeReceiver = new MenuItem {
                Header = "Node Receiver"
            };

            //accounts
            speckleAccountsMenu.Click += (sender, args) =>
            {
                //var viewModel = new SampleWindowViewModel(p);
                var window = new SpecklePopup.SignInWindow()
                {
                    Owner = viewLoadedParams.DynamoWindow,
                    WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner
                };
                window.Show();
            };

            //node manager
            speckleNodeManagerMenu.Click += (sender, args) =>
            {
                _nodeManager.Show();
            };

            //node sender click
            speckleNodeSender.Click += (sender, args) =>
            {
                var viewModel = new SenderViewModel(viewLoadedParams);
                var window    = new Sender()
                {
                    Owner       = viewLoadedParams.DynamoWindow,
                    DataContext = viewModel
                };
                window.ForceSend.Click += viewModel.Send_Click;
                window.Show();
            };

            //node receiver click
            speckleNodeReceiver.Click += (receiver, args) =>
            {
                var viewModel = new ReceiverViewModel(viewLoadedParams);
                var window    = new Receiver()
                {
                    Owner       = viewLoadedParams.DynamoWindow,
                    DataContext = viewModel,
                };
                window.StreamChanged += viewModel.StreamChanged;
                window.Show();
            };



            //sub menus
            speckleSendReceiveNodesMenu.Items.Add(speckleNodeReceiver);
            speckleSendReceiveNodesMenu.Items.Add(speckleNodeSender);

            //top level menus
            speckleMenu.Items.Add(speckleAccountsMenu);
            speckleMenu.Items.Add(speckleNodeManagerMenu);
            speckleMenu.Items.Add(speckleSendReceiveNodesMenu);

            viewLoadedParams.dynamoMenu.Items.Insert(viewLoadedParams.dynamoMenu.Items.Count - 1, speckleMenu);
        }