예제 #1
0
        private void SetPropertiesFromDialogResult(NativeFolderBrowserDialog dialog)
        {
            dialog.GetResults(out IShellItemArray resultsArray);

            DirectoryNames.Clear();

            resultsArray.GetCount(out uint count);
            for (uint i = 0; i < count; i++)
            {
                resultsArray.GetItemAt(i, out IShellItem result);

                HResult hr = result.GetDisplayName(NativeMethods.SIGDN.SIGDN_DESKTOPABSOLUTEPARSING, out IntPtr ppszName);

                if (hr == HResult.Ok && ppszName != IntPtr.Zero)
                {
                    DirectoryNames.Add(Marshal.PtrToStringAuto(ppszName));
                }

                Marshal.FreeCoTaskMem(ppszName);
            }

            if (DirectoryNames.Count > 0)
            {
                DirectoryName = DirectoryNames[0];
            }
        }
        public void MakePage(Document doc, string dstdir, bool requireAll, List <string> pngFiles, Section tocSection)
        {
            if (MyTargetDirectory == TargetDirectory.Undefined)
            {
                throw new LPGException("Undefined Target Directory in " + SectionTitle);
            }
            var di =
                new DirectoryInfo(Path.Combine(dstdir, DirectoryNames.CalculateTargetdirectory(MyTargetDirectory)));
            var files = di.GetFiles(Pattern);

            if (files.Length == 0)
            {
                if (requireAll)
                {
                    throw new LPGException("Missing files for " + SectionTitle);
                }
                return;
            }
            var sec = MakeDescriptionArea(doc, tocSection);

            foreach (var file in files)
            {
                pngFiles.Remove(file.Name);
                AddImageToSection(sec, file);
                // img.WrapFormat
            }
        }
예제 #3
0
        /// <summary>APIの設定を用いてインスタンスを初期化します。 </summary>
        /// <param name="api">IronPython用APIの何らかの実装</param>
        /// <param name="setting">更新処理の設定</param>
        /// <param name="dictionary">キャラに対応するグローバル変数用にディクショナリ</param>
        public IronPythonUpdateProcessor(IScriptApi api, IScriptUpdateSetting setting, PythonDictionary dictionary)
        {
            _setting = setting;

            var engine = Python.CreateEngine();

            //名前参照にexeのディレクトリとキャラのディレクトリを追加
            var paths = engine.GetSearchPaths();

            paths.Add(Environment.CurrentDirectory);
            paths.Add(DirectoryNames.GetCharacterScriptDirectory(api.CharacterName));
            engine.SetSearchPaths(paths);

            //可視領域を限界まで広く取るためビルトインスコープにぶち込んでおく
            ScriptScope builtin = engine.GetBuiltinModule();

            builtin.SetVariable(IronPythonCommonVariableNames.ApiVariableName, api);
            builtin.SetVariable(IronPythonCommonVariableNames.ApiGlobalDictionaryName, dictionary);

            string path = Path.Combine(DirectoryNames.GetCharacterScriptDirectory(api.CharacterName), UpdateScriptName);

            //高スピードで読むので先にコンパイル
            try
            {
                _updateCode = engine.CreateScriptSourceFromFile(path).Compile();
                IsValid     = true;
            }
            catch (Exception)
            {
                IsValid = false;
            }
        }
        public static void MakePage([JetBrains.Annotations.NotNull] Document doc, [JetBrains.Annotations.NotNull] string dstdir,
                                    bool requireAll, FileCreationMode fileCreationMode,
                                    [CanBeNull] Section tocSection, [JetBrains.Annotations.NotNull] string csvCharacter)
        {
            string filename = null;

            if (fileCreationMode == FileCreationMode.Settlement && File.Exists(Path.Combine(dstdir, "totals.csv")))
            {
                filename = Path.Combine(dstdir, DirectoryNames.CalculateTargetdirectory(TargetDirectory.Root),
                                        "Totals.csv");
            }

            if (fileCreationMode == FileCreationMode.Household && File.Exists(Path.Combine(dstdir,
                                                                                           DirectoryNames.CalculateTargetdirectory(TargetDirectory.Reports), "TotalsPerLoadtype.csv")))
            {
                filename = Path.Combine(dstdir, DirectoryNames.CalculateTargetdirectory(TargetDirectory.Reports),
                                        "TotalsPerLoadtype.csv");
            }
            if (filename == null)
            {
                if (requireAll)
                {
                    throw new LPGException("Missing totals files.");
                }
                return;
            }

            var sec = doc.AddSection();

            var para = sec.AddParagraph();

            para.Format.Alignment   = ParagraphAlignment.Justify;
            para.Format.Font.Name   = "Times New Roman";
            para.Format.Font.Size   = 20;
            para.Format.Font.Bold   = true;
            para.Format.SpaceAfter  = "0.5cm";
            para.Format.SpaceBefore = "1cm";
            para.Format.Font.Color  = Colors.DarkGray;
            para.AddText("Totals");
            ChartPageBase.MakeTocEntry(tocSection, "Totals");
            para.AddBookmark("Totals");

            switch (fileCreationMode)
            {
            case FileCreationMode.Household:
                var totals = TotalsReader(filename, false, csvCharacter);
                SetHouseholdEntries(totals, doc, sec);
                SetPerDayTable(totals, doc, sec);
                SetMinMaxTable(totals, doc, sec);
                SetPerPersonTable(totals, doc, sec);
                SetPerPersonDayTable(totals, doc, sec);
                return;

            case FileCreationMode.Settlement:
                SetSettlementEntries(doc, sec, filename, csvCharacter);
                return;

            default: throw new LPGException("Forgotten File Creation Mode");
            }
        }
예제 #5
0
 /// <summary>ファイル名にディレクトリ位置を付与し、パスとしてスクリプトを指定できる文字列を取得します。</summary>
 /// <param name="scriptName">スクリプト名("main.py"など)</param>
 /// <returns>実行ファイルから見たスクリプトへのパス</returns>
 private string GetScriptPath(string scriptName)
 {
     return(Path.Combine(
                DirectoryNames.GetCharacterScriptDirectory(this._characterName),
                scriptName
                ));
 }
예제 #6
0
 public void Dispose()
 {
     FileNames?.Dispose();
     DirectoryNames?.Dispose();
     Directories?.Dispose();
     Files?.Dispose();
 }
예제 #7
0
        public static DataTable LoadCovMatrix()
        {
            DateTime  FolderDate;
            string    DirectoyRoot = DirectoryNames.GetDirectoryName("overnightCandlestick");
            string    FullFolderName;
            DataTable CovMatrix = null;

            for (int i = 1; i < 6; i++)
            {
                FolderDate     = BusinessDays.GetBusinessDayShifted(-i);
                FullFolderName = DirectoyRoot + DirectoryNames.GetDirectoryExtension(FolderDate);

                double CovDataIntegrity = Convert.ToDouble(FromTxt2List.LoadFile(FullFolderName + "/covDataIntegrity.txt")[0]);

                if (i > 1)
                {
                    Console.WriteLine("Most recent covFile not available or lower quality! ");
                }

                if (CovDataIntegrity > 80)
                {
                    CovMatrix = IOUtilities.ExcelDataReader.LoadFile(FullFolderName + "/cov_matrix.xlsx").Tables["cov_matrix"];
                    break;
                }
            }
            return(CovMatrix);
        }
        public void MakePage([JetBrains.Annotations.NotNull] Document doc, [JetBrains.Annotations.NotNull] string dstdir, bool requireAll, [JetBrains.Annotations.NotNull] Section tocSection)
        {
            var di =
                new DirectoryInfo(
                    Path.Combine(dstdir, DirectoryNames.CalculateTargetdirectory(TargetDirectory.Reports)));
            var fi = di.GetFiles("Thoughts.*.csv");

            if (fi.Length == 0)
            {
                if (requireAll)
                {
                    throw new LPGException("Missing Throughs files");
                }
                return;
            }
            var sec = MakeDescriptionArea(doc, tocSection);

            foreach (var fileInfo in fi)
            {
                var strings = new List <string>();
                using (var sr = new StreamReader(fileInfo.FullName)) {
                    var row = 0;
                    while (!sr.EndOfStream && row < 20)
                    {
                        var s = sr.ReadLine();
                        strings.Add(s);
                        row++;
                    }
                }
                var sb = new StringBuilder();
                foreach (var s in strings)
                {
                    sb.Append(s + Environment.NewLine);
                }
                var para = sec.AddParagraph();
                para.Format.Alignment  = ParagraphAlignment.Justify;
                para.Format.Font.Name  = "Times New Roman";
                para.Format.Font.Size  = 12;
                para.Format.Font.Bold  = false;
                para.Format.SpaceAfter = "0.25cm";
                para.Format.Font.Color = Colors.Black;

                para.AddText(fileInfo.Name);

                para = sec.AddParagraph();
                para.Format.Alignment  = ParagraphAlignment.Left;
                para.Format.Font.Name  = "Times New Roman";
                para.Format.Font.Size  = 10;
                para.Format.Font.Bold  = false;
                para.Format.SpaceAfter = "0.25cm";
                para.Format.Font.Color = Colors.Black;

                para.AddText(sb.ToString());
            }
        }
예제 #9
0
        private void goToRoot()
        {
            clearPaths();

            foreach (var drive in DriveInfo.GetDrives())
            {
                if (drive.IsReady == false)
                {
                    continue;
                }

                Paths.Add(drive.Name);
                DirectoryNames.Add(drive.Name);
            }
        }
        /// <summary> スクリプティングAPIの設定にもとづいて初期化を行う </summary>
        /// <param name="api">APIとなるインスタンス</param>
        /// <param name="globals">グローバル変数</param>
        private void InitializeEngine(IScriptApi api, PythonDictionary globals)
        {
            _ironPythonEngine = Python.CreateEngine();
            //名前参照にexeのディレクトリとキャラのディレクトリを追加
            var paths = _ironPythonEngine.GetSearchPaths();

            paths.Add(Environment.CurrentDirectory);
            paths.Add(DirectoryNames.GetCharacterScriptDirectory(api.CharacterName));
            _ironPythonEngine.SetSearchPaths(paths);

            //可視領域を限界まで広く取るためビルトインスコープにぶち込んでおく
            ScriptScope builtin = _ironPythonEngine.GetBuiltinModule();

            builtin.SetVariable(IronPythonCommonVariableNames.ApiVariableName, api);
            builtin.SetVariable(IronPythonCommonVariableNames.ApiGlobalDictionaryName, globals);
        }
예제 #11
0
        public DialogResult ShowDialog()
        {
            DialogResult result;

            // Windows Vista is version 6.0
            if (Environment.OSVersion.Platform == PlatformID.Win32NT &&
                Environment.OSVersion.Version >= new Version(6, 0))
            {
                using var d = new VistaFolderBrowserDialog { InitialDirectory = InitialDirectory, MultiSelect = true };

                if (d.ShowDialog() == DialogResult.OK)
                {
                    DirectoryName = d.DirectoryName;
                    DirectoryNames.Clear();
                    foreach (string dir in d.DirectoryNames)
                    {
                        DirectoryNames.Add(dir);
                    }
                    result = DialogResult.OK;
                }
                else
                {
                    result = DialogResult.Cancel;
                }
            }
            else
            {
                // Fallback for pre-Vista, probably won't ever be hit seeing as we require Windows 7 or above,
                // and even if we went back to .NET 4.6 we would still require Vista. But hey.
                using var d = new FolderBrowserDialog { SelectedPath = InitialDirectory, ShowNewFolderButton = true };

                if (d.ShowDialog() == DialogResult.OK)
                {
                    DirectoryName = d.SelectedPath;
                    DirectoryNames.Clear();
                    DirectoryNames.Add(d.SelectedPath);
                    result = DialogResult.OK;
                }
                else
                {
                    result = DialogResult.Cancel;
                }
            }

            return(result);
        }
예제 #12
0
        private static void SaveToFile(string key, byte[] value, DirectoryNames fileType)
        {
            string directory = $"{Application.persistentDataPath}\\Saves\\{(int)fileType}";

            if (!Directory.Exists(directory))
            {
                Directory.CreateDirectory(directory);
            }

            value = Encryptor.Encrypt(value, key);

            using (FileStream file = File.Create($"{directory}\\{key}.{SAVE_EXT}"))
            {
                file.Write(value, 0, value.Length);
                file.Close();
            }

            HashBase.AddKey(key, directory, Encryptor.GetSha256(value));
        }
        private static List <string> GetSettlementStrings([JetBrains.Annotations.NotNull] string destinationDirectory)
        {
            var filename = Path.Combine(destinationDirectory,
                                        DirectoryNames.CalculateTargetdirectory(TargetDirectory.Root), "Information.txt");
            var strings = new List <string>();

            if (!File.Exists(filename))
            {
                return(strings);
            }

            using (var sr = new StreamReader(filename)) {
                while (!sr.EndOfStream)
                {
                    strings.Add(sr.ReadLine());
                }
            }
            return(strings);
        }
예제 #14
0
        /* コマンド、プロパティの定義にはそれぞれ
         *
         *  lvcom   : ViewModelCommand
         *  lvcomn  : ViewModelCommand(CanExecute無)
         *  llcom   : ListenerCommand(パラメータ有のコマンド)
         *  llcomn  : ListenerCommand(パラメータ有のコマンド・CanExecute無)
         *  lprop   : 変更通知プロパティ(.NET4.5ではlpropn)
         *
         * を使用してください。
         *
         * Modelが十分にリッチであるならコマンドにこだわる必要はありません。
         * View側のコードビハインドを使用しないMVVMパターンの実装を行う場合でも、ViewModelにメソッドを定義し、
         * LivetCallMethodActionなどから直接メソッドを呼び出してください。
         *
         * ViewModelのコマンドを呼び出せるLivetのすべてのビヘイビア・トリガー・アクションは
         * 同様に直接ViewModelのメソッドを呼び出し可能です。
         */

        /* ViewModelからViewを操作したい場合は、View側のコードビハインド無で処理を行いたい場合は
         * Messengerプロパティからメッセージ(各種InteractionMessage)を発信する事を検討してください。
         */

        /* Modelからの変更通知などの各種イベントを受け取る場合は、PropertyChangedEventListenerや
         * CollectionChangedEventListenerを使うと便利です。各種ListenerはViewModelに定義されている
         * CompositeDisposableプロパティ(LivetCompositeDisposable型)に格納しておく事でイベント解放を容易に行えます。
         *
         * ReactiveExtensionsなどを併用する場合は、ReactiveExtensionsのCompositeDisposableを
         * ViewModelのCompositeDisposableプロパティに格納しておくのを推奨します。
         *
         * LivetのWindowテンプレートではViewのウィンドウが閉じる際にDataContextDisposeActionが動作するようになっており、
         * ViewModelのDisposeが呼ばれCompositeDisposableプロパティに格納されたすべてのIDisposable型のインスタンスが解放されます。
         *
         * ViewModelを使いまわしたい時などは、ViewからDataContextDisposeActionを取り除くか、発動のタイミングをずらす事で対応可能です。
         */

        /* UIDispatcherを操作する場合は、DispatcherHelperのメソッドを操作してください。
         * UIDispatcher自体はApp.xaml.csでインスタンスを確保してあります。
         *
         * LivetのViewModelではプロパティ変更通知(RaisePropertyChanged)やDispatcherCollectionを使ったコレクション変更通知は
         * 自動的にUIDispatcher上での通知に変換されます。変更通知に際してUIDispatcherを操作する必要はありません。
         */

        #endregion

        /// <summary>ビューモデルを初期化します。</summary>
        public MainWindowViewModel()
        {
            if (!Directory.Exists(DirectoryNames.CharacterDirectory))
            {
                AvailableCharacters = new MenuItem[] { };
            }
            else
            {
                var displayedNames = DirectoryNames.GetAvailableDisplayNames();
                //CF: ココで初期化する以外のシナリオとしてはモデルから文字列リスト付きのイベントが投げられるパターンなどがあり得る。
                //TODO: Validなキャラだけ通すように直した方がいいとおもいまーす!
                AvailableCharacters = DirectoryNames.AvailableCharacters
                                      .Select(n => new MenuItem
                {
                    Header  = displayedNames[n],
                    Command = new ActionCommand(() => OnCharacterSelected(n))
                })
                                      .ToArray();
            }

            Topmost = CommonSettingRecord.Load().Topmost;
        }
예제 #15
0
        private static byte[] LoadFromFile(string key, DirectoryNames fileType)
        {
            string directory = $"{Application.persistentDataPath}\\Saves\\{(int)fileType}";

            using (FileStream file = File.Open($"{directory}\\{key}.{SAVE_EXT}", FileMode.Open))
            {
                byte[] array = new byte[file.Length];

                file.Read(array, 0, array.Length);

                if (!Encryptor.CompareByteArr(Encryptor.GetSha256(array), HashBase.GetKey(key, directory)))
                {
                    file.Close();
                    DeleteAll();
                    return(new byte[0]);
                }

                array = Encryptor.Encrypt(array, key, true);

                file.Close();
                return(array);
            }
        }
예제 #16
0
        public void MakePage([JetBrains.Annotations.NotNull] Document doc, [JetBrains.Annotations.NotNull] string dstdir, bool requireAll, [JetBrains.Annotations.NotNull] Section tocSection)
        {
            var di =
                new DirectoryInfo(Path.Combine(dstdir, DirectoryNames.CalculateTargetdirectory(MyTargetDirectory)));
            var files = di.GetFiles(Pattern);

            if (files.Length == 0)
            {
                if (requireAll)
                {
                    throw new LPGException("Missing Carpet plots");
                }
                return;
            }
            var sec = MakeDescriptionArea(doc, tocSection);

            foreach (var file in files)
            {
                AddImageToSection(sec, file);
                if (file.Name.Contains("Carpetplot."))
                {
                    var legendFileName = file.Name.Replace("Carpetplot.", "CarpetplotLegend.").Replace(".7.", ".");
                    if (file.DirectoryName == null)
                    {
                        throw new LPGException("Directory Name was null");
                    }

                    var legendFile = new FileInfo(Path.Combine(file.DirectoryName, legendFileName));
                    if (legendFile.Exists)
                    {
                        AddImageToSection(sec, legendFile, "Legend for the previous carpet plot");
                    }
                }
                // img.WrapFormat
            }
        }
예제 #17
0
        public bool ChangeDir(string path)
        {
            try
            {
                var directories = Directory.GetDirectories(path);

                Path = path;

                clearPaths();

                foreach (var dir in directories)
                {
                    Paths.Add(dir.ToString());
                    var dirName = new DirectoryInfo(dir).Name;
                    DirectoryNames.Add(dirName);
                }
            }
            catch (Exception)
            {
                return(false);
            }

            return(true);
        }
예제 #18
0
 private static bool CheckFile(string name, DirectoryNames fileType) => File.Exists($"{Application.persistentDataPath}\\Saves\\{(int)fileType}\\{name}.{SAVE_EXT}");
        public void Run([JetBrains.Annotations.NotNull] CalculationProfiler cp, [JetBrains.Annotations.NotNull] string outputDirectory, [JetBrains.Annotations.NotNull] string source)
        {
            //var cp =  CalculationProfiler.Read(@"C:\work\CalculationBenchmarks.ActionCarpetPlotTest\");

            InitializeDuration2(cp.MainPart);
            MergeAndCompress(cp.MainPart);
            InitPartsList(cp.MainPart);
            const int fontsize = 6;// = GetFontsize(cp.MainPart);
            //const string xaxislabel = "Time Consumption in CPUSeconds";

            OxyPalette p;

            if (_parts.Count > 1)
            {
                p = OxyPalettes.HueDistinct(_parts.Count);
            }
            else
            {
                p = OxyPalettes.Hue64;
            }
            var plotModel1 = new PlotModel
            {
                LegendBorderThickness = 0,
                LegendOrientation     = LegendOrientation.Vertical,
                LegendPlacement       = LegendPlacement.Inside,
                LegendPosition        = LegendPosition.TopLeft,
                PlotAreaBorderColor   = OxyColors.White,
                LegendFontSize        = fontsize,
                LegendSymbolMargin    = 25,
                DefaultFontSize       = fontsize
            };

            var ca = new CategoryAxis
            {
                Position       = AxisPosition.Left,
                GapWidth       = 0,
                MaximumPadding = 0.03,
                MajorTickSize  = 0
            };

            plotModel1.Axes.Add(ca);

            /* var la = new LinearAxis
             * {
             *   Minimum = 0,
             *   MinimumPadding = 0,
             *   Title = ChartLocalizer.Get().GetTranslation(xaxislabel),
             *   Position = AxisPosition.Bottom,
             *   MinorTickSize = 0
             * };*/
            /*  plotModel1.Axes.Add(la);
             * var caSub = new CategoryAxis();
             * caSub.StartPosition = 0.5;
             * caSub.EndPosition = 1;
             * caSub.Position = AxisPosition.Left;
             * caSub.Key = "Sub";
             * caSub.GapWidth = 0.3;
             * caSub.MajorTickSize = 0;
             * caSub.MinorTickSize = 0;
             * plotModel1.Axes.Add(caSub);*/
            //const double runningSum = 0;
            //var row = 0;

            // var allBarSeries = new Dictionary<string, IntervalBarSeries>();
            //var ba = new BarSeries();
            //ba.YAxisKey = "Sub";
            //ba.LabelFormatString = "{0:N1} %";

            /*  foreach (var s in taggingSet.Categories)
             * {
             *    caSub.Labels.Add(ChartLocalizer.Get().GetTranslation(s));
             *    var ibs = new IntervalBarSeries();
             *    // ibs.Title =
             *    var coloridx = taggingSet.GetCategoryIndexOfCategory(s);
             *    ibs.FillColor = p.Colors[coloridx];
             *    ibs.StrokeThickness = 0;
             *    ibs.FontSize = fontsize;
             *    allBarSeries.Add(s, ibs);
             *    double categorysum = 0;
             *    foreach (var tuple in consumption)
             *    {
             *        if (taggingSet.AffordanceToCategories[tuple.Item1] == s)
             *        {
             *            categorysum += tuple.Item2;
             *        }
             *    }
             *    var percent = categorysum / sum * 100;
             *    var bai = new BarItem(percent);
             *    bai.Color = p.Colors[coloridx];
             *    ba.Items.Add(bai);
             * }*/
            //   plotModel1.Series.Add(ba);

            var itemsByLevel = new Dictionary <int, IntervalBarSeries>();

            _textOffsets.Clear();
            AddBars(cp.MainPart, 0, 0, fontsize, itemsByLevel, p, plotModel1);
            //        foreach (IntervalBarSeries series in itemsByLevel.Values) {
            //          plotModel1.Series.Add(series);
            //    }
            string dstFileName = Path.Combine(outputDirectory,
                                              DirectoryNames.CalculateTargetdirectory(TargetDirectory.Charts), "CalculationDurationFlameChart." + source + ".Png");

            PngExporter.Export(plotModel1, dstFileName, 3200, 2000, OxyColor.FromArgb(255, 255, 255, 255),
                               144);
            //Save(plotModel1, plotName, srcEntry.FullFileName + newFileNameSuffix, basisPath); // ".interval"
        }
예제 #20
0
 private void clearPaths()
 {
     Paths.Clear();
     DirectoryNames.Clear();
 }
        private string GetFullPathForTargetdirectry(TargetDirectory targetDirectory)
        {
            var newdirname = DirectoryNames.CalculateTargetdirectory(targetDirectory);

            return(Path.Combine(_baseResultpath, newdirname));
        }