Example #1
0
 public ActivityDesigner()
 {
     _errorsAdorner  = new ErrorsAdorner(this);
     Loaded         += OnRoutedEventHandler;
     AllowDrop       = true;
     PreviewKeyDown += OnPreviewKeyDown;
 }
        private void AssociatedObjectOnMouseLeave(object sender, MouseEventArgs mouseEventArgs)
        {
            if (mouseIsDown)
            {
                EndDrag();

                ViewModelCommunication.SendTo(
                    Constants.ViewModelCollections.AppointmentViewModelCollection,
                    AppointmentModifications.OriginalAppointment.Id,
                    new ShowDisabledOverlay()
                    );

                AdornerControl.CreateAdorner(AppointmentModifications.OriginalAppointment.Patient.Name,
                                             AppointmentModifications.CurrentAppointmentPixelWidth);


                DragDrop.DoDragDrop((DependencyObject)sender,
                                    AppointmentModifications.OriginalAppointment,
                                    DragDropEffects.Link);

                AdornerControl.DisposeAdorner();

                ViewModelCommunication.SendTo(
                    Constants.ViewModelCollections.AppointmentViewModelCollection,
                    AppointmentModifications.OriginalAppointment.Id,
                    new HideDisabledOverlay()
                    );
            }
        }
        public MainWindow BuildWindow()
        {
            // build modules

            var adornerControl = new AdornerControl();

            // build viewModels

            var mainViewModelBuilder = new MainViewModelBuilder(medicalPracticeRepository,
                                                                readModelRepository,
                                                                patientRepository,
                                                                therapyPlaceTypeRepository,
                                                                labelRepository,
                                                                commandService,
                                                                localSettingsRepository,
                                                                viewModelCommunication,
                                                                session,
                                                                adornerControl);

            var loginViewModelBuilder = new LoginViewModelBuilder(session,
                                                                  localSettingsRepository);

            var notificationServiceContainerViewModel = new NotificationServiceContainerViewModel(viewModelCommunication);

            var connectionStatusViewModel = new ConnectionStatusViewModel(session);

            var dialogBuilder = new AboutDialogWindowBuilder(versionNumber, errorCallback);

            var actionBarViewModel = new ActionBarViewModel(session,
                                                            connectionStatusViewModel,
                                                            viewModelCommunication,
                                                            dialogBuilder);

            var mainWindowViewModel = new MainWindowViewModel(mainViewModelBuilder,
                                                              loginViewModelBuilder,
                                                              notificationServiceContainerViewModel,
                                                              actionBarViewModel,
                                                              session,
                                                              errorCallback);

            // build mainWindow

            var mainWindow = new MainWindow
            {
                DataContext = mainWindowViewModel
            };

            // set GridContainer as ReferenceElement of AdornerControl

            adornerControl.ReferenceElement = mainWindow.MainView.OverviewPage.GridContainer;

            viewModelCommunication.RegisterViewModelMessageHandler <ShowDisabledOverlay>(mainWindowViewModel);
            viewModelCommunication.RegisterViewModelMessageHandler <HideDisabledOverlay>(mainWindowViewModel);

            return(mainWindow);
        }
 public ActivityDesigner()
 {
     //This line is bad it causes the overall designer to not get focus when clicking on it
     //Please be very careful about putting this line in.
     //FocusManager.SetIsFocusScope(this , true);
     _errorsAdorner = new ErrorsAdorner(this);
     Loaded        += OnRoutedEventHandler;
     Unloaded      += ActivityDesignerUnloaded;
     AllowDrop      = true;
 }
Example #5
0
        public TherapyPlaceRowViewModel(IViewModelCommunication viewModelCommunication,
                                        IClientTherapyPlaceTypeRepository therapyPlaceTypeRepository,
                                        TherapyPlace therapyPlace,
                                        Color roomDisplayColor,
                                        TherapyPlaceRowIdentifier identifier,
                                        AdornerControl adornerControl,
                                        Time timeSlotBegin,
                                        Time timeSlotEnd,
                                        ISharedStateReadOnly <AppointmentModifications> appointmentModificationsVariable,
                                        Width initialGridWidth,
                                        Action <string> errorCallback)
        {
            this.viewModelCommunication     = viewModelCommunication;
            this.therapyPlaceTypeRepository = therapyPlaceTypeRepository;
            this.therapyPlace = therapyPlace;
            this.appointmentModificationsVariable = appointmentModificationsVariable;

            therapyPlaceTypeRepository.UpdatedTherapyPlaceTypeAvailable += OnUpdatedTherapyPlaceTypeAvailable;

            IsVisible             = true;
            RoomColor             = roomDisplayColor;
            Identifier            = identifier;
            TherapyPlaceName      = therapyPlace.Name;
            AppointmentViewModels = new ObservableCollection <IAppointmentViewModel>();

            viewModelCommunication.RegisterViewModelAtCollection <ITherapyPlaceRowViewModel, TherapyPlaceRowIdentifier>(
                Constants.ViewModelCollections.TherapyPlaceRowViewModelCollection,
                this
                );

            appointmentModificationsVariable.StateChanged += OnAppointmentModificationsChanged;
            OnAppointmentModificationsChanged(appointmentModificationsVariable.Value);

            TimeSlotBegin = timeSlotBegin;
            TimeSlotEnd   = timeSlotEnd;

            AdornerControl = adornerControl;

            GridWidth = initialGridWidth;

            therapyPlaceTypeRepository.RequestTherapyPlaceTypes(
                placeType =>
            {
                Application.Current.Dispatcher.Invoke(() =>
                {
                    PlaceTypeIcon = GetIconForTherapyPlaceType(placeType.IconType);
                });
            },
                therapyPlace.TypeId,
                errorCallback
                );
        }
        public TherapyPlaceRowViewModelBuilder(IViewModelCommunication viewModelCommunication,
                                               IClientMedicalPracticeRepository medicalPracticeRepository,
                                               IClientTherapyPlaceTypeRepository therapyPlaceTypeRepository,
                                               AdornerControl adornerControl,
                                               ISharedStateReadOnly <AppointmentModifications> appointmentModificationsVariable,
                                               ISharedStateReadOnly <Size> appointmentGridSizeVariable)
        {
            this.viewModelCommunication     = viewModelCommunication;
            this.medicalPracticeRepository  = medicalPracticeRepository;
            this.therapyPlaceTypeRepository = therapyPlaceTypeRepository;

            this.adornerControl = adornerControl;
            this.appointmentModificationsVariable = appointmentModificationsVariable;
            this.appointmentGridSizeVariable      = appointmentGridSizeVariable;
        }
 public AppointmentViewModelBuilder(IViewModelCommunication viewModelCommunication,
                                    IClientLabelRepository labelRepository,
                                    ICommandService commandService,
                                    ISharedState <ViewModels.AppointmentView.Helper.AppointmentModifications> appointmentModificationsVariable,
                                    ISharedState <Date> selectedDateVariable,
                                    AdornerControl adornerControl,
                                    IAppointmentModificationsBuilder appointmentModificationsBuilder)
 {
     this.viewModelCommunication           = viewModelCommunication;
     this.labelRepository                  = labelRepository;
     this.commandService                   = commandService;
     this.appointmentModificationsVariable = appointmentModificationsVariable;
     this.selectedDateVariable             = selectedDateVariable;
     this.adornerControl                   = adornerControl;
     this.appointmentModificationsBuilder  = appointmentModificationsBuilder;
 }
 public MainViewModelBuilder(IClientMedicalPracticeRepository medicalPracticeRepository,
                             IClientReadModelRepository readModelRepository,
                             IClientPatientRepository patientRepository,
                             IClientTherapyPlaceTypeRepository therapyPlaceTypeRepository,
                             IClientLabelRepository labelRepository,
                             ICommandService commandService,
                             ILocalSettingsRepository localSettingsRepository,
                             IViewModelCommunication viewModelCommunication,
                             ISession session,
                             AdornerControl adornerControl)
 {
     this.medicalPracticeRepository  = medicalPracticeRepository;
     this.readModelRepository        = readModelRepository;
     this.patientRepository          = patientRepository;
     this.therapyPlaceTypeRepository = therapyPlaceTypeRepository;
     this.labelRepository            = labelRepository;
     this.commandService             = commandService;
     this.localSettingsRepository    = localSettingsRepository;
     this.viewModelCommunication     = viewModelCommunication;
     this.session        = session;
     this.adornerControl = adornerControl;
 }
Example #9
0
        private void OnDragOver(object sender, DragEventArgs dragEventArgs)
        {
            if (dragEventArgs.Data.GetDataPresent(typeof(Appointment)))
            {
                if (Appointments != null && AdornerControl != null)
                {
                    if (slots == null)
                    {
                        ComputeSlots(currentDraggedAppointment.Id);
                    }

                    AdornerControl.NewMousePositionForAdorner(dragEventArgs.GetPosition(AdornerControl.ReferenceElement));

                    var mousePositionTime  = GetTimeForPosition(dragEventArgs.GetPosition(AssociatedObject).X);
                    var currentPointedSlot = GetSlot(mousePositionTime);


                    if (currentPointedSlot != null)
                    {
                        var slotLength        = new Duration(currentPointedSlot.Begin, currentPointedSlot.End);
                        var appointmentLength = new Duration(AppointmentModifications.BeginTime,
                                                             AppointmentModifications.EndTime);

                        if (slotLength >= appointmentLength)
                        {
                            AdornerControl.ShowAdornerLikeDropIsPossible();
                            dropIsPossible = true;
                            return;
                        }
                    }

                    AdornerControl.ShowAdornerLikeDropIsNotPossible();
                    dropIsPossible = false;
                }
            }
        }
Example #10
0
        public AppointmentViewModel(Appointment appointment,
                                    ICommandService commandService,
                                    IViewModelCommunication viewModelCommunication,
                                    TherapyPlaceRowIdentifier initialLocalisation,
                                    ISharedState <AppointmentModifications> appointmentModificationsVariable,
                                    ISharedState <Date> selectedDateVariable,
                                    IAppointmentModificationsBuilder appointmentModificationsBuilder,
                                    IWindowBuilder <EditDescription> editDescriptionWindowBuilder,
                                    AdornerControl adornerControl,
                                    Action <string> errorCallback)
        {
            this.appointment         = appointment;
            this.initialLocalisation = initialLocalisation;
            this.appointmentModificationsVariable = appointmentModificationsVariable;
            this.selectedDateVariable             = selectedDateVariable;
            ViewModelCommunication = viewModelCommunication;
            AdornerControl         = adornerControl;

            viewModelCommunication.RegisterViewModelAtCollection <IAppointmentViewModel, Guid>(
                Constants.ViewModelCollections.AppointmentViewModelCollection,
                this
                );

            SwitchToEditMode = new ParameterrizedCommand <bool>(
                isInitalAdjusting =>
            {
                if (appointmentModificationsVariable.Value == null)
                {
                    CurrentAppointmentModifications = appointmentModificationsBuilder.Build(appointment,
                                                                                            initialLocalisation.PlaceAndDate.MedicalPracticeId,
                                                                                            isInitalAdjusting,
                                                                                            errorCallback);

                    CurrentAppointmentModifications.PropertyChanged += OnAppointmentModificationsPropertyChanged;
                    appointmentModificationsVariable.Value           = CurrentAppointmentModifications;
                    OperatingMode = OperatingMode.Edit;
                    appointmentModificationsVariable.StateChanged += OnCurrentModifiedAppointmentChanged;
                }
            }
                );

            DeleteAppointment = new Command(
                async() =>
            {
                var dialog = new UserDialogBox("", "Wollen Sie den Termin wirklich löschen?",
                                               MessageBoxButton.OKCancel);
                var result = await dialog.ShowMahAppsDialog();

                if (result == MessageDialogResult.Affirmative)
                {
                    if (appointmentModificationsVariable.Value.IsInitialAdjustment)
                    {
                        viewModelCommunication.SendTo(                                                                                  //
                            Constants.ViewModelCollections.AppointmentViewModelCollection,                                              // do nothing but
                            appointmentModificationsVariable.Value.OriginalAppointment.Id,                                              // deleting the temporarly
                            new Dispose()                                                                                               // created Appointment
                            );                                                                                                          //
                    }
                    else
                    {
                        commandService.TryDeleteAppointment(
                            operationSuccessful =>
                        {
                            Application.Current.Dispatcher.Invoke(() =>
                            {
                                if (!operationSuccessful)
                                {
                                    Process(new RestoreOriginalValues());
                                    viewModelCommunication.Send(new ShowNotification("löschen des Termins fehlgeschlagen; bearbeitung wurde zurückgesetzt", 5));
                                }
                            });
                        },
                            currentLocation.PlaceAndDate,
                            appointment.Patient.Id,
                            appointment.Id,
                            appointment.Description,
                            appointment.StartTime,
                            appointment.EndTime,
                            appointment.TherapyPlace.Id,
                            appointment.Label.Id,
                            ActionTag.RegularAction,
                            errorCallback
                            );
                    }

                    appointmentModificationsVariable.Value = null;
                }
            }
                );

            EditDescription = new Command(
                () =>
            {
                viewModelCommunication.Send(new ShowDisabledOverlay());

                var dialog = editDescriptionWindowBuilder.BuildWindow();
                dialog.ShowDialog();

                viewModelCommunication.Send(new HideDisabledOverlay());
            }
                );

            ConfirmChanges = new Command(() => viewModelCommunication.Send(new ConfirmChanges()));
            RejectChanges  = new Command(() => viewModelCommunication.Send(new RejectChanges()));

            BeginTime   = appointment.StartTime;
            EndTime     = appointment.EndTime;
            Description = appointment.Description;
            LabelColor  = appointment.Label.Color;

            ShowDisabledOverlay = false;

            SetNewLocation(initialLocalisation, true);
        }
Example #11
0
 private void OnDragLeave(object sender, DragEventArgs dragEventArgs)
 {
     AdornerControl.ShowAdornerLikeDropIsNotPossible();
 }