コード例 #1
0
        public App()
            : base()
        {
            Egs.BindableResources.Current.CultureChanged += delegate
            {
                ApplicationCommonSettings.HostApplicationName = Egs.EgsDeviceControlCore.Properties.Resources.CommonStrings_GestureCamera;
                //ApplicationCommonSettings.HostApplicationName = "WpfApplication2";
            };

            // You can change the application CultureInfo to some cultures.
            // The next line lets it use OS culture
            Egs.BindableResources.Current.ChangeCulture("");
            //Egs.BindableResources.Current.ChangeCulture(ApplicationCommonSettings.DefaultCultureInfoName);
            //Egs.BindableResources.Current.ChangeCulture("en");
            //Egs.BindableResources.Current.ChangeCulture("ja");
            //Egs.BindableResources.Current.ChangeCulture("zh-Hans");

            if (DuplicatedProcessStartBlocking.TryGetMutexOnTheBeginningOfApplicationConstructor() == false)
            {
                var msg = string.Format(System.Globalization.CultureInfo.InvariantCulture, Egs.EgsDeviceControlCore.Properties.Resources.CommonStrings_Application0IsAlreadyRunning, ApplicationCommonSettings.HostApplicationName);
                MessageBox.Show(msg, ApplicationCommonSettings.HostApplicationName);
                Application.Current.Shutdown();
                return;
            }


            // Sorry, EgsHostSettings and EgsDevice.GetDefaultEgsDevice(EgsDeviceSettings) are no longer available.
            // Device settings are saved on Host PC,
            // and the host application transfers the device settings to connected device when it starts running or a device is connected.
            // You can use EgsDevice object directly, without EgsHostAppBaseComponents or EgsHostOnUserControl.
            Device = EgsDevice.GetDefaultEgsDevice();
            Device.Settings.FaceDetectionMethod.Value = FaceDetectionMethods.DefaultProcessOnEgsDevice;
            Device.Settings.IsToDetectFaces.Value     = true;
            Device.Settings.IsToDetectHands.Value     = true;


            // OnePersonBothHandsViewModel can receive information from EgsDevice on EgsGestureHidReport.ReportUpdated event etc.
            // It interprets the information from EgsDevice for CursorForm and so on.
            OnePersonBothHandsViewModel = new OnePersonBothHandsViewModel();
            // A lot of classes in "Egs" namespace have "InitializeOnceAtStartup..." methods.
            // Please call the initialization before they are used as arguments of some other objects, or before some event handlers are attached.
            OnePersonBothHandsViewModel.InitializeOnceAtStartup(Device);
            // CursorForm shows Gesture Cursor.  It is available on Windows 7, 8, 8.1 (contains start screen) and 10.
            CursorViews    = new CursorForm[Device.TrackableHandsCountMaximum];
            CursorViews[0] = new CursorForm();
            CursorViews[1] = new CursorForm();
            CursorViews[0].InitializeOnceAtStartup(OnePersonBothHandsViewModel.RightHand, ImageInformationSet.CreateDefaultRightCursorImageInformationSetList());
            CursorViews[1].InitializeOnceAtStartup(OnePersonBothHandsViewModel.LeftHand, ImageInformationSet.CreateDefaultLeftCursorImageInformationSetList());
            Device.EgsGestureHidReport.ReportUpdated += EgsGestureHidReport_ReportUpdated;

            // Sorry, specification is changed.  You need to make an object of CameraViewUserControlModel.
            CameraViewUserControlModel = new CameraViewUserControlModel();
            CameraViewWindowModel      = new CameraViewWindowModel();
            CameraViewWindow           = new CameraViewWindow();

            CameraViewUserControlModel.IsToDrawImageSet = true;
            Device.Settings.IsToDrawBordersOnCameraViewImageByDevice.Value = false;

            CameraViewUserControlModel.InitializeOnceAtStartup(Device);
            CameraViewWindowModel.InitializeOnceAtStartup(Device);
            CameraViewWindow.InitializeOnceAtStartup(CameraViewWindowModel, CameraViewUserControlModel);

            CameraViewWindow.MainMenuItemsPanel.Columns = 2;
            // Minimize button needs EgsHostAppBaseComponents, because there is no way to "Un"-minimize it except for tray icon in system notification area, currently.
            // AppTrayIconAndMenuItemsComponent manages the tray icon, and change the visibility of Settings Window and Camera View.
            CameraViewWindow.MinimizeButton.Visibility = Visibility.Collapsed;
            // Settings button needs EgsHostAppBaseComponents, because only EgsHostAppBaseComponents has all information about host app,
            // and SettingsWindow can change the settings of EgsHostAppBaseComponents.
            CameraViewWindow.SettingsButton.Visibility = Visibility.Collapsed;
            // EgsHostAppBaseComponents also attachs an event handler which calls EgsHostAppBaseComponents.Dispose() and closes the application.
            CameraViewWindowModel.ExitCommand.PerformEventHandler += delegate
            {
                // In this example program, the next line means the application exit.
                CameraViewWindow.Close();
            };



            var button = new System.Windows.Controls.Button()
            {
                Content = "Show Dialog"
            };

            button.Click += delegate { MessageBox.Show("Hello!"); };
            CameraViewWindow.MainMenuItemsPanel.Children.Insert(0, button);
            CameraViewWindow.KeyDown += (sender, e) =>
            {
                switch (e.Key)
                {
                case System.Windows.Input.Key.Escape:
                    // This application does not use EgsHostAppBaseComponents, so this just closes the window.
                    CameraViewWindow.Close();
                    break;
                }
            };

            // But this event handler attach close cursors and device.
            CameraViewWindow.Closed += delegate
            {
                Device.EgsGestureHidReport.ReportUpdated -= EgsGestureHidReport_ReportUpdated;

                // When you get EgsDevice by EgsDevice.GetDefaultEgsDevice, you need to call EgsDevice.CloseDefaultEgsDevice().
                Device.Settings.IsToDetectFaces.Value = false;
                Device.Settings.IsToDetectHands.Value = false;
                EgsDevice.CloseDefaultEgsDevice();

                // And then, you need to close cursorViews.
                foreach (var cursorView in CursorViews)
                {
                    cursorView.Close();
                }
            };

            this.Exit += delegate
            {
                DuplicatedProcessStartBlocking.ReleaseMutex();
            };
        }
        public override void InitializeOnceAtStartup()
        {
            base.InitializeOnceAtStartup();

            CameraViewWindowModel.InitializeOnceAtStartup(base.Device);
            SettingsWindow.InitializeOnceAtStartup(this);
            CameraViewWindow.InitializeOnceAtStartup(CameraViewWindowModel, CameraViewUserControlModel);

            AppTrayIconAndMenuItems.InitializeOnceAtStartup(this);

            CameraViewWindowModel.SettingsCommand.PerformEventHandler += (sender, e) =>
            {
                SettingsWindow.ToggleVisibility();
            };
            CameraViewWindowModel.ExitCommand.PerformEventHandler += (sender, e) =>
            {
                if (false)
                {
                    var message = string.Format(CultureInfo.InvariantCulture, Resources.CommonStrings_WouldYouExitApplication0, ApplicationCommonSettings.HostApplicationName);
                    if (MessageBox.Show(message, Resources.CommonStrings_Confirmation, MessageBoxButton.OKCancel) != MessageBoxResult.OK)
                    {
                        return;
                    }
                }
                this.Dispose();
            };

            // do nothing
            CameraViewWindowModel.CanDragMoveChanged += delegate { };
            CameraViewWindowModel.CanResizeChanged   += delegate { OnCanResizeCameraViewWindowChanged(); };
            OnCanResizeCameraViewWindowChanged();

            Device.IsHidDeviceConnectedChanged += Device_IsHidDeviceConnectedChanged;
            // NOTE: Update is necessary here, too.
            if (ApplicationCommonSettings.IsInternalRelease)
            {
                UpdateDeviceFirmwareCommand.CanPerform = Device.IsHidDeviceConnected ? true : false;
            }

            CultureInfoAndDescription.ValueUpdated += delegate
            {
                SettingsWindow.ReloadDataContext();
                CameraViewWindow.ReloadDataContext();
            };

            if (false)
            {
                CameraViewWindow.Closed += delegate
                {
                    if (IsToDisposeThisWhenCameraViewWindowClosed)
                    {
                        CameraViewWindow = null;
                        // TODO: MUSTDO: Application does not exit, if users click "close window" on the icon of CameraView on the task bar!!
                        this.Dispose();
                    }
                };
            }

            if (ApplicationCommonSettings.IsDebugging)
            {
                SettingsWindow.Show();
            }
            IsToDisposeThisWhenCameraViewWindowClosed = true;
        }