public ImageBoxScrollbarView(ImageBox imageBox, ServerEventMediator eventMediator)
        {
            _eventMediator = eventMediator;
            IsTabStop = true; // allow focus
            ServerEntity = imageBox;

            DataContext = imageBox; 
            
            InitializeComponent();

            LayoutRoot.IsHitTestVisible = !imageBox.Tiles.Any(t => t.HasCapture);

            _eventMediator.TileHasCaptureChanged += EventBrokerTileHasCaptureChanged;

            ImageScrollBar.SetBinding(RangeBase.ValueProperty,
                    new Binding(TopLeftPresentationImageIndexPropertyName) { 
                        Mode = BindingMode.OneTime 
            });

            ImageScrollBar.Maximum = ServerEntity.ImageCount - ServerEntity.Tiles.Count;
            ImageScrollBar.Visibility = ImageScrollBar.Maximum > 0 ? Visibility.Visible : Visibility.Collapsed;

            ServerEntity.PropertyChanged += OnPropertyChanged;

            _scrollbarEventPublisher =
                new DelayedEventPublisher<ScrollBarUpdateEventArgs>(
                    (s, ev) => _eventMediator.DispatchMessage(new UpdatePropertyMessage
                                                                  {
                                                                      Identifier = Guid.NewGuid(),
                                                                      PropertyName =
                                                                          TopLeftPresentationImageIndexPropertyName,
                                                                      TargetId = ServerEntity.Identifier,
                                                                      Value = ev.ScrollbarPosition
                                                                  }), 100);
        }
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                if (_parentForm != null)
                {
                    _parentForm.Move -= OnParentMoved;
                    _parentForm       = null;
                }

                if (_component != null)
                {
                    _component.Closing -= OnComponentClosing;
                    _component          = null;
                }

                if (_delayedEventPublisher != null)
                {
                    _delayedEventPublisher.Dispose();
                    _delayedEventPublisher = null;
                }

                if (_physicalWorkspace != null)
                {
                    _physicalWorkspace.Drawing                -= OnPhysicalWorkspaceDrawing;
                    _physicalWorkspace.LayoutCompleted        -= OnLayoutCompleted;
                    _physicalWorkspace.ScreenRectangleChanged -= OnScreenRectangleChanged;

                    _physicalWorkspace = null;
                }
            }

            base.Dispose(disposing);
        }
        internal PrintImageViewerControl(PrintImageViewerComponent component)
        {
            _component = component;
            InitializeComponent();

            this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
            _component.Closing                += new EventHandler(OnComponentClosing);
            _component.Drawing                += new EventHandler(OnPhysicalWorkspaceDrawing);
            _component.LayoutCompleted        += new EventHandler(OnLayoutCompleted);
            _component.ScreenRectangleChanged += new EventHandler(OnScreenRectangleChanged);
            _delayedEventPublisher             = new DelayedEventPublisher(OnRecalculateImageBoxes, 50);

            #region ��ӡ������
            printComponent = _component.DicomPrintComponent as DicomPrintComponent;
            if (printComponent != null)
            {
                FilmSize        fileSize        = printComponent.DicomPrinterConfigurationEditorComponent.FilmSize.ToFilmSize();
                FilmOrientation filmOrientation = printComponent.DicomPrinterConfigurationEditorComponent.FilmOrientation;
                _component.Layout(fileSize, filmOrientation);

                this.Load += Loaded;
            }

            #endregion

            #region �˵��͹�����

            this.ToolbarModel     = _component.ToolbarModel;
            this.ContextMenuModel = component.ContextMenuModel;

            #endregion

            FilmCount.DataBindings.Add("Text", _component, "FilmCount", true, DataSourceUpdateMode.OnPropertyChanged);
            ImageCount.DataBindings.Add("Text", _component, "ImageCount", true, DataSourceUpdateMode.OnPropertyChanged);
        }
        public void Destroy()
        {
            _destroyed = true;
            if (_eventMediator != null)
            {
                _eventMediator.UnregisterEventHandler(ServerEntity.Identifier);

                _eventMediator.TileHasCaptureChanged -= EventBrokerTileHasCaptureChanged;
                _eventMediator = null;
            }

            if (_menu != null)
            {
                _menu.Dispose();
                _menu = null;
            }

            if (_fpsPublisher != null)
            {
                _fpsPublisher.Dispose();
                _fpsPublisher = null;
            }

            StopMouseMoveTimer();
        }
Beispiel #5
0
		public TableView()
        {
			SuppressSelectionChangedEvent = false;
			InitializeComponent();

            // if we allow the framework to generate columns, there seems to be a bug with 
            // setting the minimum column width > 100 pixels
            // therefore, turn off the auto-generate and create the columns ourselves
            _dataGridView.AutoGenerateColumns = false;

            _rowHeight = this.DataGridView.RowTemplate.Height;
            this.DataGridView.RowPrePaint += SetCustomBackground;
            this.DataGridView.RowPostPaint += DisplayCellSubRows;
            this.DataGridView.RowPostPaint += OutlineCell;
            this.DataGridView.RowPostPaint += SetLinkColor;

			// System.Component.DesignMode does not work in control constructors
			if (LicenseManager.UsageMode != LicenseUsageMode.Designtime)
			{
				// Use a DelayedEventPublisher to make fixes for bugs 386 and 8032 a little clearer.  Previously used a Timer directly
				// to delay the events
				_delayedSelectionChangedPublisher = new DelayedEventPublisher((sender, args) => NotifySelectionChanged(), 50);
			}

			try
			{
				var resolver = new ResourceResolver(typeof (TableView), false);
				using (var s = resolver.OpenResource("checkmark.png"))
				{
					_checkmarkBitmap = new Bitmap(s);
				}
			}
			catch (Exception) {}
        }
Beispiel #6
0
        public StudyView(ServerEventMediator eventMediator)
        {
            InitializeComponent();
            _eventMediator = eventMediator;
            _imageBoxViews = new List<ImageBoxView>();

			SizeChanged += OnSizeChanged;
            _resizePublisher = new DelayedEventPublisher<EventArgs>(ResizeEvent, 350);
        }
Beispiel #7
0
        public StudyView(ServerEventMediator eventMediator)
        {
            InitializeComponent();
            _eventMediator = eventMediator;
            _imageBoxViews = new List<ImageBoxView>();

			SizeChanged += OnSizeChanged;
            _resizePublisher = new DelayedEventPublisher<EventArgs>(ResizeEvent, 350);
        }
        public override void Initialize()
        {
            base.Initialize();

            ImageViewer.EventBroker.ImageDrawing      += OnImageDrawing;
            ImageViewer.EventBroker.DisplaySetChanged += OnDisplaySetChanged;

            _publisher = new DelayedEventPublisher((o, args) => UpdateFusion((IPresentationImage)o));
            _synchronizationContext = SynchronizationContext.Current;
        }
        public void Dispose()
        {
            if (_scrollbarEventPublisher != null)
            {
                _scrollbarEventPublisher.Dispose();
                _scrollbarEventPublisher = null;
            }

            _eventMediator.TileHasCaptureChanged -= EventBrokerTileHasCaptureChanged;
        }
        public override void Draw(DrawArgs drawArgs)
        {
            if (_delayedEventPublisher == null && SynchronizationContext.Current != null)
            {
                _delayedEventPublisher = new DelayedEventPublisher(OnDelayedProgressChanged, 1000, DelayedEventPublisherTriggerMode.Periodic);
            }

            var asyncFrame = Frame;

            using (asyncFrame.AcquireLock())
            {
                if (!asyncFrame.IsAsyncLoaded)
                {
                    if (!Visible)                     // if this is an off-screen draw, wait for data to be loaded
                    {
                        lock (_waitPixelData)
                        {
                            if (!asyncFrame.IsAsyncLoaded)
                            {
                                var completionHandler = new EventHandler((s, e) =>
                                {
                                    lock (_waitPixelData)
                                    {
                                        Monitor.Pulse(_waitPixelData);
                                    }
                                });
                                var onFrameAsyncLoaded  = new AsyncPixelDataEventHandler(completionHandler);
                                var onFrameAsyncFaulted = new AsyncPixelDataFaultEventHandler(completionHandler);

                                asyncFrame.AsyncLoaded  += onFrameAsyncLoaded;
                                asyncFrame.AsyncFaulted += onFrameAsyncFaulted;
                                asyncFrame.GetNormalizedPixelData();

                                // check the flag again, in case the event actually fired before we hooked up the handler
                                if (!asyncFrame.IsAsyncLoaded)
                                {
                                    Monitor.Wait(_waitPixelData);
                                }

                                asyncFrame.AsyncLoaded  -= onFrameAsyncLoaded;
                                asyncFrame.AsyncFaulted -= onFrameAsyncFaulted;
                            }
                        }
                    }
                    else if (!ApplicationGraphics.OfType <ProgressGraphic>().Any())
                    {
                        ProgressGraphic.Show(this, ApplicationGraphics, true, ProgressBarGraphicStyle.Continuous, false);
                    }
                }

                base.Draw(drawArgs);
            }
        }
        /// <summary>
        /// Constructor.
        /// </summary>
        public PrintTileController(PrintViewTile tile, IViewerShortcutManager shortcutManager)
        {
            Platform.CheckForNullReference(tile, "tile");
            Platform.CheckForNullReference(shortcutManager, "shortcutManager");

            _tile = tile;
            _tile.ContextMenuRequested += ProcessExplicitContextMenuRequest;

            _selectedOnThisClick = false;
            _capturedOnThisClick = false;
            _shortcutManager     = shortcutManager;
            _delayedContextMenuRequestPublisher = new DelayedEventPublisher(ProcessDelayedContextMenuRequest, 300);
        }
        /// <summary>
        /// Constructor.
        /// </summary>
        public TileController(Tile tile, IViewerShortcutManager shortcutManager)
        {
            Platform.CheckForNullReference(tile, "tile");
            Platform.CheckForNullReference(shortcutManager, "shortcutManager");

            _tile = tile;
            _tile.ContextMenuRequested += ProcessExplicitContextMenuRequest;

            _selectedOnThisClick                = false;
            _capturedOnThisClick                = false;
            _shortcutManager                    = shortcutManager;
            _contextMenuDelayInMilliseconds     = InputManagementSettings.Default.ContextMenuDelay;
            _delayedContextMenuRequestPublisher = new DelayedEventPublisher(ProcessDelayedContextMenuRequest, _contextMenuDelayInMilliseconds);
        }
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                var asyncFrame = Frame;
                asyncFrame.AsyncProgressChanged -= OnAsyncProgressChanged;

                if (_delayedEventPublisher != null)
                {
                    _delayedEventPublisher.Dispose();
                    _delayedEventPublisher = null;
                }
            }
            base.Dispose(disposing);
        }
        public void Dispose()
        {
            if (_delayedContextMenuRequestPublisher == null)
            {
                return;
            }

            ReleaseCapture(true);
            this.CaptureMouseWheelHandler = null;

            _delayedContextMenuRequestPublisher.Dispose();
            _tile.ContextMenuRequested -= ProcessExplicitContextMenuRequest;

            _delayedContextMenuRequestPublisher = null;
        }
        protected override void Dispose(bool disposing)
        {
            _synchronizationContext = null;

            if (_publisher != null)
            {
                _publisher.Dispose();
                _publisher = null;
            }

            ImageViewer.EventBroker.DisplaySetChanged -= OnDisplaySetChanged;
            ImageViewer.EventBroker.ImageDrawing      -= OnImageDrawing;

            base.Dispose(disposing);
        }
        protected virtual void Dispose(bool disposing)
        {
            if (disposing)
            {
                if (_dynamicRenderEventPublisher != null)
                {
                    _dynamicRenderEventPublisher.Cancel();
                    _dynamicRenderEventPublisher.Dispose();
                    _dynamicRenderEventPublisher = null;
                }

                if (_vtkRenderWindow != null)
                {
                    _vtkRenderWindow.Dispose();
                    _vtkRenderWindow = null;
                }

                if (_vtkRenderer != null)
                {
                    _vtkRenderer.Dispose();
                    _vtkRenderer = null;
                }

                if (_sceneGraphRoot != null)
                {
                    _sceneGraphRoot.Dispose();
                    _sceneGraphRoot = null;
                }

                if (_imageBuffer != null)
                {
                    _imageBuffer.Dispose();
                    _imageBuffer = null;
                }

                if (_overlayBuffer != null)
                {
                    _overlayBuffer.Dispose();
                    _overlayBuffer = null;
                }

                if (_finalBuffer != null)
                {
                    _finalBuffer.Dispose();
                    _finalBuffer = null;
                }
            }
        }
Beispiel #17
0
        public void Dispose(bool disposing)
        {
            if (!_disposed)
            {
                if (_resizePublisher != null)
                {
                    if (disposing)
                        _resizePublisher.Dispose();
                    _resizePublisher = null;
                }
                SizeChanged -= OnSizeChanged;

                DestroyImageBoxViews();
                _disposed = true;
            }
        }
Beispiel #18
0
        public void Dispose(bool disposing)
        {
            if (!_disposed)
            {
                if (_resizePublisher != null)
                {
                    if (disposing)
                        _resizePublisher.Dispose();
                    _resizePublisher = null;
                }
                SizeChanged -= OnSizeChanged;

                DestroyImageBoxViews();
                _disposed = true;
            }
        }
Beispiel #19
0
        public override void Start()
        {
            _delaySetFileStoreDirectory          = new DelayedEventPublisher(RealSetFileStoreDirectory);
            _activityMonitor                     = WorkItemActivityMonitor.Create();
            _activityMonitor.IsConnectedChanged += ActivityMonitorOnIsConnectedChanged;

            _configuration      = StudyStore.GetConfiguration();
            _fileStoreDirectory = _currentFileStoreDirectory = _configuration.FileStoreDirectory;

            UpdateFileStoreDriveName();
            MaximumUsedSpaceChanged();

            _currentDeletionRule = _configuration.DefaultDeletionRule.Clone();

            base.Start();
        }
Beispiel #20
0
        internal ImageViewerControl(ImageViewerComponent component)
        {
            _component         = component;
            _physicalWorkspace = _component.PhysicalWorkspace as PhysicalWorkspace;
            InitializeComponent();

            this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);

            this.BackColor = Color.Black;

            _component.Closing                        += new EventHandler(OnComponentClosing);
            _physicalWorkspace.Drawing                += new EventHandler(OnPhysicalWorkspaceDrawing);
            _physicalWorkspace.LayoutCompleted        += new EventHandler(OnLayoutCompleted);
            _physicalWorkspace.ScreenRectangleChanged += new EventHandler(OnScreenRectangleChanged);

            _delayedEventPublisher = new DelayedEventPublisher(OnRecalculateImageBoxes, 50);
        }
Beispiel #21
0
        public override void Stop()
        {
            base.Stop();

            if (_delaySetFileStoreDirectory != null)
            {
                _delaySetFileStoreDirectory.Cancel();
                _delaySetFileStoreDirectory.Dispose();
                _delaySetFileStoreDirectory = null;
            }

            if (_activityMonitor != null)
            {
                _activityMonitor.IsConnectedChanged -= ActivityMonitorOnIsConnectedChanged;
                _activityMonitor.Dispose();
            }
        }
        private void PerformDispose(bool disposing)
        {
            if (disposing)
            {
                // this is a managed wrapper so it should only be disposed on disposing
                if (_homeLocation != null)
                {
                    _homeLocation.Dispose();
                    _homeLocation = null;
                }

                if (_folderViewSelectionUpdatePublisher != null)
                {
                    _folderViewSelectionUpdatePublisher.Dispose();
                    _folderViewSelectionUpdatePublisher = null;
                }
            }
        }
        private void OnTileImageDrawn()
        {
            if (_logPerformance)
            {
                if (HasCapture)
                {
                    // Log the speed when stacking/window-leveling
                    if (_fpsPublisher == null)
                    {
                        _fpsPublisher = new DelayedEventPublisher <EventArgs>((s, ev) =>
                        {
                            PerformanceMonitor p =
                                PerformanceMonitor.
                                CurrentInstance;
                            double fps = p.AverageClientFps;
                            _eventMediator.PublishPerformance(new PerformanceData
                            {
                                ClientIp
                                    =
                                        ApplicationContext
                                        .
                                        Current
                                        .
                                        Parameters
                                        .
                                        LocalIPAddress,
                                Name
                                    =
                                        "CLIENT_STACKING_SPEED",
                                Value
                                    =
                                        fps
                            });
                            BrowserWindow.SetStatus(
                                String.Format(
                                    "Stacking Speed: {0:0} fps",
                                    fps));
                        }, 1000);
                    }

                    _fpsPublisher.Publish(this, EventArgs.Empty);
                }
            }
        }
        internal ImageViewerControl(ImageViewerComponent component)
        {
            _component         = component;
            _physicalWorkspace = (PhysicalWorkspace)_component.PhysicalWorkspace;

            SuspendLayout();
            Name = "ImageViewerControl";
            ResumeLayout(false);
            SetStyle(ControlStyles.AllPaintingInWmPaint, true);

            base.BackColor = Color.Black;

            _component.Closing                        += OnComponentClosing;
            _physicalWorkspace.Drawing                += OnPhysicalWorkspaceDrawing;
            _physicalWorkspace.LayoutCompleted        += OnLayoutCompleted;
            _physicalWorkspace.ScreenRectangleChanged += OnScreenRectangleChanged;

            _delayedEventPublisher = new DelayedEventPublisher(OnRecalculateImageBoxes, 50);
        }
Beispiel #25
0
            public void SetCaptureHandler(TileController tileController, IMouseWheelHandler captureMouseWheelHandler)
            {
                if (_captureTileController == tileController && _captureMouseWheelHandler == captureMouseWheelHandler)
                {
                    return;
                }

                if (_captureMouseWheelHandler != null)
                {
                    if (_delayedStop != null)
                    {
                        _delayedStop.Dispose();
                        _delayedStop = null;
                    }

                    EventsHelper.Fire(tileController._wheelCaptureChangingEvent, tileController, new ItemEventArgs <IMouseWheelHandler>(null));
                    _captureMouseWheelHandler.StopWheel();
                    _captureTileController._tile.ImageViewer.EventBroker.OnMouseWheelCaptureChanged(new MouseWheelCaptureChangedEventArgs(_captureTileController._tile, false));
                }

                _captureTileController    = tileController;
                _captureMouseWheelHandler = captureMouseWheelHandler;

                if (_captureMouseWheelHandler == null)
                {
                    //This is only needed when the capture mouse wheel handler is not null.
                    _captureTileController = null;
                    if (_delayedStop != null)
                    {
                        _delayedStop.Dispose();
                        _delayedStop = null;
                    }
                    return;
                }

                _delayedStop = new DelayedEventPublisher((s, e) => SetCaptureHandler(tileController, null), WheelStopDelayMilliseconds);

                EventsHelper.Fire(tileController._wheelCaptureChangingEvent, tileController, new ItemEventArgs <IMouseWheelHandler>(_captureMouseWheelHandler));
                _captureMouseWheelHandler.StartWheel();
                _captureTileController._tile.ImageViewer.EventBroker.OnMouseWheelCaptureChanged(new MouseWheelCaptureChangedEventArgs(_captureTileController._tile, true));

                _delayedStop.Publish(this, EventArgs.Empty);
            }
Beispiel #26
0
        public Win32VtkRenderingSurface(IntPtr windowId, bool offscreen)
        {
            _imageBuffer   = new BitmapBuffer(PixelFormat.Format32bppRgb);
            _overlayBuffer = new BitmapBuffer(PixelFormat.Format32bppArgb);
            _finalBuffer   = new BackBuffer();

            _vtkRenderer = new vtkRenderer();
            _vtkRenderer.SetBackground(0.0f, 0.0f, 0.0f);

            _vtkRenderWindow = new vtkWin32OpenGLRenderWindow();
            _vtkRenderWindow.OffScreenRenderingOn();
            _vtkRenderWindow.DoubleBufferOff();
            _vtkRenderWindow.EraseOn();
            _vtkRenderWindow.SwapBuffersOff();
            _vtkRenderWindow.SetDesiredUpdateRate(_dynamicFrameRate);
            _vtkRenderWindow.AddRenderer(_vtkRenderer);

            _dynamicRenderEventPublisher = !offscreen ? new DelayedEventPublisher((s, e) => Render(true, null)) : null;

            WindowID = windowId;
        }
        public LocalImageExplorerControl(LocalImageExplorerComponent component)
        {
            _component = component;

            _folderViewSelectionUpdatePublisher = new DelayedEventPublisher(OnFolderViewSelectionUpdatePublished);

            InitializeComponent();
            InitializeHistoryMenu();
            InitializeIcons();
            InitializeFocusList();

            SetViewMode(Settings.Default.FolderViewMode, false);
            SetHomeLocation(Settings.Default.HomeLocation);

            _folderView.ExceptionRaised += OnFolderControlExceptionRaised;
            _folderTree.ExceptionRaised += OnFolderControlExceptionRaised;

            ResetFocus();             // reset focus must happen after explorer controls are initially populated

            // Initialize menus here
            ToolStripBuilder.BuildMenu(_folderViewContextMenu.Items, _component.ContextMenuModel.ChildNodes);
            ToolStripBuilder.BuildMenu(_folderTreeContextMenu.Items, _component.ContextMenuModel.ChildNodes);
        }
        public ImageBoxScrollbarView(ImageBox imageBox, ServerEventMediator eventMediator)
        {
            _eventMediator = eventMediator;
            IsTabStop      = true; // allow focus
            ServerEntity   = imageBox;

            DataContext = imageBox;

            InitializeComponent();

            LayoutRoot.IsHitTestVisible = !imageBox.Tiles.Any(t => t.HasCapture);

            _eventMediator.TileHasCaptureChanged += EventBrokerTileHasCaptureChanged;

            ImageScrollBar.SetBinding(RangeBase.ValueProperty,
                                      new Binding(TopLeftPresentationImageIndexPropertyName)
            {
                Mode = BindingMode.OneTime
            });

            ImageScrollBar.Maximum    = ServerEntity.ImageCount - ServerEntity.Tiles.Count;
            ImageScrollBar.Visibility = ImageScrollBar.Maximum > 0 ? Visibility.Visible : Visibility.Collapsed;

            ServerEntity.PropertyChanged += OnPropertyChanged;

            _scrollbarEventPublisher =
                new DelayedEventPublisher <ScrollBarUpdateEventArgs>(
                    (s, ev) => _eventMediator.DispatchMessage(new UpdatePropertyMessage
            {
                Identifier   = Guid.NewGuid(),
                PropertyName =
                    TopLeftPresentationImageIndexPropertyName,
                TargetId = ServerEntity.Identifier,
                Value    = ev.ScrollbarPosition
            }), 100);
        }
Beispiel #29
0
 internal MenuItemCoordinator(MenuBase menu)
 {
     Menu = menu;
     _delayedEventPublisher = new DelayedEventPublisher<EventArgs>(SetExpandedItem, TimeSpan.FromMilliseconds(350));
 }
        public void Dispose()
        {
            if (_scrollbarEventPublisher != null)
            {
                _scrollbarEventPublisher.Dispose();
                _scrollbarEventPublisher = null;
            }

            _eventMediator.TileHasCaptureChanged -= EventBrokerTileHasCaptureChanged;
        }