コード例 #1
0
ファイル: MainWindow.xaml.cs プロジェクト: appsou/Helios
        private void Window_Opened(object sender, EventArgs e)
        {
            if (Environment.OSVersion.Version.Major > 5 && PreferencesFile.LoadSetting("ControlCenter", "AeroWarning", true))
            {
                bool aeroEnabled;
                NativeMethods.DwmIsCompositionEnabled(out aeroEnabled);
                if (!aeroEnabled)
                {
                    AeroWarning warningDialog = new AeroWarning();
                    warningDialog.Owner = this;
                    warningDialog.ShowDialog();

                    if (warningDialog.DisplayAgainCheckbox.IsChecked == true)
                    {
                        PreferencesFile.SaveSetting("ControlCenter", "AeroWarning", false);
                    }
                }
            }


            App app = Application.Current as App;

            if (app != null && app.StartupProfile != null && File.Exists(app.StartupProfile))
            {
                LoadProfileList(app.StartupProfile);
                LoadProfile(app.StartupProfile);
                StartProfile();
            }

            VersionChecker.Check versionCheck = ConfigManager.VersionChecker.CheckAvailableVersion(false);
            if (!ConfigManager.VersionChecker.ShouldOfferNewVersion(versionCheck))
            {
                return;
            }

            // can't use the interactive dialog, because this would require writing settings
            StatusMessage = StatusValue.UpgradeAvailable;

            StatusReportItem item = new StatusReportItem
            {
                Status = $"new version {versionCheck.AvailableVersion} is available",
                Flags  = StatusReportItem.StatusFlags.ConfigurationUpToDate
            };

            if (versionCheck.DownloadUrl != null)
            {
                item.Link           = new Uri(versionCheck.DownloadUrl);
                item.Recommendation = $"Use Profile Editor to check for new version or download directly from {versionCheck.DownloadUrl}";
            }
            else
            {
                item.Link           = StatusReportItem.ProfileEditor;
                item.Recommendation = "check for new version and download it";
            }
            StatusViewer.AddItem(item);
        }
コード例 #2
0
        public CommandResult <bool> Execute(ApplicationDb db)
        {
            StatusReportItem item = db.StatusReportItems.Find(this.StatusReportItemId);

            db.StatusReportItems.Remove(item);

            db.SaveChanges();

            return(new CommandResult <bool> {
                Data = true, ResultCode = "0", ResultText = "Succesfully created status report item"
            });
        }
コード例 #3
0
ファイル: MainWindow.xaml.cs プロジェクト: appsou/Helios
        private void ReportError(string status, string recommendation, Uri link)
        {
            StatusReportItem statusReportItem = new StatusReportItem()
            {
                Severity       = StatusReportItem.SeverityCode.Error,
                Status         = status,
                Recommendation = recommendation,
                Link           = link
            };

            StatusViewer.AddItem(statusReportItem);
            statusReportItem.Log(ConfigManager.LogManager);
        }
コード例 #4
0
ファイル: MainWindow.xaml.cs プロジェクト: appsou/Helios
        private void ReportStatus(string status, Uri link = null)
        {
            if (status.Length < 1)
            {
                return;
            }

            StatusReportItem statusReportItem = new StatusReportItem()
            {
                Status = status,
                Link   = link
            };

            StatusViewer.AddItem(statusReportItem);
            statusReportItem.Log(ConfigManager.LogManager);
        }
コード例 #5
0
        private static bool WriteBack(IPatchDestinationWritable destination, PatchFile patch, string patched, string verbing,
                                      out StatusReportItem status)
        {
            if (destination.TryWritePatched(patch.TargetPath, patched))
            {
                status = new StatusReportItem
                {
                    Status = $"{destination.LongDescription} successfully wrote {patch.TargetPath} after {verbing} patch"
                };
                return(true);
            }

            status = new StatusReportItem
            {
                Status =
                    $"{destination.LongDescription} could not write {patch.TargetPath} after {verbing} patch",
                Severity       = StatusReportItem.SeverityCode.Error,
                Recommendation = "please ensure you have write permission to all the files in the target location"
            };
            return(false);
        }
コード例 #6
0
        /// <summary>
        /// generate the monitor setup file but do not write it out yet
        /// </summary>
        /// <returns></returns>
        private IEnumerable <StatusReportItem> UpdateMonitorSetup(MonitorSetupTemplate template, bool verbose)
        {
            List <FormattableString> lines = CreateHeader(template);

            foreach (StatusReportItem item in GatherViewports(template))
            {
                yield return(item);
            }

            // emit in sorted canonical order so we can compare files later
            foreach (KeyValuePair <string, Rect> viewport in _allViewports.Viewports.OrderBy(p => p.Key))
            {
                if (TryCreateViewport(lines, viewport, out FormattableString code))
                {
                    yield return(new StatusReportItem
                    {
                        Status = $"{template.MonitorSetupFileBaseName}: {code}",
                        Flags = INFORMATIONAL
                    });
                }
                else
                {
                    yield return(new StatusReportItem
                    {
                        Status =
                            $"viewport '{viewport.Key}' was not included in monitor setup because it is not entirely contained in rendered resolution",
                        Severity = StatusReportItem.SeverityCode.Warning,
                        Recommendation = "adjust the viewport location or the monitor layout",
                        Link = StatusReportItem.ProfileEditor,
                        Flags = StatusReportItem.StatusFlags.ConfigurationUpToDate
                    });
                }
            }

            // find main and ui view extents
            Rect mainView = Rect.Empty;
            Rect uiView   = Rect.Empty;

            foreach (ShadowMonitor monitor in _parent.Monitors)
            {
                string monitorDescription =
                    $"Monitor at Windows coordinates ({monitor.Monitor.Left},{monitor.Monitor.Top}) of size {monitor.Monitor.Width}x{monitor.Monitor.Height}";
                if (!monitor.Included)
                {
                    if (verbose)
                    {
                        yield return new StatusReportItem
                               {
                                   Status = $"{monitorDescription} is not included in monitor setup",
                                   Flags  = INFORMATIONAL
                               }
                    }
                    ;
                    continue;
                }

                Rect rect = MonitorSetup.VisualToRect(monitor.Monitor);
                if (monitor.Main)
                {
                    if (_parent.MonitorLayoutMode == MonitorLayoutMode.TopLeftQuarter)
                    {
                        // special
                        Rect scaled = rect;

                        scaled.Scale(0.5d, 0.5d);
                        mainView.Union(scaled);
                    }
                    else
                    {
                        mainView.Union(rect);
                    }
                    if (verbose)
                    {
                        yield return new StatusReportItem
                               {
                                   Status = $"{monitorDescription} is used for main view",
                                   Flags  = INFORMATIONAL
                               }
                    }
                    ;
                }

                if (monitor.UserInterface)
                {
                    uiView.Union(rect);
                    if (verbose)
                    {
                        yield return new StatusReportItem
                               {
                                   Status = $"{monitorDescription} is used to display the DCS user interface",
                                   Flags  = INFORMATIONAL
                               }
                    }
                    ;
                }

                if (monitor.ViewportCount > 0)
                {
                    string plural = monitor.ViewportCount > 1 ? "s" : "";
                    if (verbose)
                    {
                        yield return new StatusReportItem
                               {
                                   Status = $"{monitorDescription} has {monitor.ViewportCount} viewport{plural} from this profile",
                                   Flags  = INFORMATIONAL
                               }
                    }
                    ;
                }
            }

            // trim to rendered area in case of partial screens
            mainView.Intersect(_parent.Rendered);
            uiView.Intersect(_parent.Rendered);

            // change to DCS coordinates (0,0 at top left of rect, physical pixels)
            ConvertToDCS(ref mainView);
            ConvertToDCS(ref uiView);

            CreateMainView(lines, mainView);
            if (verbose)
            {
                yield return new StatusReportItem
                       {
                           Status =
                               $"MAIN = {{ x = {mainView.Left}, y = {mainView.Top}, width = {mainView.Width}, height = {mainView.Height} }}",
                           Flags = INFORMATIONAL
                       }
            }
            ;

            // check for separate UI view
            StatusReportItem uiStatus = CreateUserInterfaceViewIfRequired(lines, mainView, uiView, out string uiViewName);

            if (verbose)
            {
                yield return(uiStatus);
            }

            // set up required names for viewports (well-known to DCS)
            lines.Add($"UIMainView = {uiViewName}");
            lines.Add($"GU_MAIN_VIEWPORT = Viewports.Center");

            foreach (FormattableString line in lines)
            {
                ConfigManager.LogManager.LogDebug(FormattableString.Invariant(line));
            }

            if (template.Combined)
            {
                _combinedMonitorSetup = Render(lines);
            }
            else
            {
                _monitorSetup = Render(lines);
            }
        }
コード例 #7
0
        public static void UpdateStatusItemTags(this ApplicationDb db, string[] hashTags, StatusReportItem item)
        {
            Tag tag;
            StatusReportItemTag statusReportItemTag;

            foreach (var hashTag in hashTags)
            {
                // check if hashtag is already part of tags collection of item
                tag = item.Tags.Where(t => t.Tag.Name == hashTag).Select(t => t.Tag).SingleOrDefault();
                if (tag == null) // no,
                {
                    tag = db.Tags.Where(t => t.Name == hashTag).SingleOrDefault();
                    if (tag == null)
                    {
                        // create the tag first
                        tag      = db.Tags.Create();
                        tag.Name = hashTag;
                        db.Tags.Add(tag);
                        db.SaveChanges();
                    }
                    statusReportItemTag       = db.StatusReportItemTags.Create();
                    statusReportItemTag.TagId = tag.TagId;
                    statusReportItemTag.StatusReportItemId = item.StatusReportItemId;

                    db.StatusReportItemTags.Add(statusReportItemTag);
                    db.SaveChanges();
                }
            }

            // remove tags
            foreach (var itemTag in item.Tags.ToArray())
            {
                if (!hashTags.Contains(itemTag.Tag.Name))
                {
                    db.StatusReportItemTags.Remove(itemTag);
                    db.SaveChanges();
                }
            }
        }