private void OpenDocument()
        {
            var notification = new OpenFileDialogNotification();
            notification.RestoreDirectory = true;
            notification.Filter = "DGML files (*.dgml)|*.dgml|DOT files (*.dot)|*.dot|GraphML files (*.graphml)|*.graphml|DOT plain files (*.plain)|*.plain";
            notification.FilterIndex = 0;
            notification.DefaultExt = ".dgml";

            OpenFileRequest.Raise( notification,
                n =>
                {
                    if( n.Confirmed )
                    {
                        Open( n.FileName );
                    }
                } );
        }
        private void LoadMasks()
        {
            var notification = new OpenFileDialogNotification();
            notification.RestoreDirectory = true;
            notification.Filter = "GraphViz filter files (*.bgf)|*.bgf";
            notification.FilterIndex = 0;
            notification.DefaultExt = ".bgf";

            OpenFileRequest.Raise( notification,
                n =>
                {
                    if( n.Confirmed )
                    {
                        var masks = myPersistanceService.Load( n.FileName );

                        var module = myPresentation.GetModule<INodeMaskModule>();
                        var masksToRemove = module.Items.ToList();

                        // unfort. we have to add masks first and then remove the old ones because the system reacts on
                        // removal and in case of very huge graphs this causes performance issues because then the whole
                        // graph is picked instead of subset

                        // do reverse as we use push (stack)
                        foreach( var mask in masks.Reverse() )
                        {
                            module.Push( mask );
                        }

                        foreach( var mask in masksToRemove )
                        {
                            module.Remove( mask );
                        }

                    }
                } );
        }
        private void OnBrowseClicked()
        {
            var notification = new OpenFileDialogNotification();
            notification.RestoreDirectory = true;
            notification.Filter = "Assemblies (*.dll,*.exe)|*.dll;*.exe";
            notification.FilterIndex = 0;

            OpenFileRequest.Raise( notification,
                n =>
                {
                    if ( n.Confirmed )
                    {
                        AssemblyToAnalyseLocation = n.FileName;
                    }
                } );
        }