private void Form1_Load(object sender, EventArgs e) { this.memory1Application_Partsnumput = new Memory1Application_PartsnumputImpl(); this.memory1Application_Partsnumput.Form = this; this.memory1Application_Partsnumput.Delegate_OnSave = Form1_OnSave; this.memory1Application_Partsnumput.Delegate_OnPopupExplain = Form1_OnPopupExplain; this.usercontrolCanvas1.InitializeBeforeuse(this.memory1Application_Partsnumput); this.Memory1Application_Partsnumput.Delegate_OnRequestPaintBackground = this.usercontrolCanvas1.PaintBackground; this.Memory1Application_Partsnumput.Delegate_OnRequestPaintListsprite = this.Memory1Application_Partsnumput.PaintListsprite; this.Memory1Application_Partsnumput.Delegate_OnRequestWriteCsv = this.usercontrolCanvas1.WriteCsv; this.Memory1Application_Partsnumput.Delegate_OnChanged_SomeContents = this.Form1_OnChanged_SomeContents; this.Memory1Application_Partsnumput.Delegate_OnOpened_SomeFiles = this.Form1_OnOpened_SomeFiles; // リストボックスの一番上の項目を選ぶ。(再セット) this.usercontrolCanvas1.PcddlAlScale.SelectedIndex = 0; this.usercontrolCanvas1.PcddlBgOpaque.SelectedIndex = 0; //タイトル再描画 this.RefreshTitle(); //キャンバスにフォーカスを合わせる this.usercontrolCanvas1.Focus(); //サイズを整える this.SizeFit(); //グルーピング this.Memory1Application_Partsnumput.Grouping(this.Memory1Application_Partsnumput); }
//──────────────────────────────────────── public bool Contains(Point mouse, Memory1Application_Partsnumput memoryApplication_Partsnumput) { return(this.BoundsCircleScaledOnBackground.Contains( mouse.X - (int)memoryApplication_Partsnumput.BgLocationScaled.X, mouse.Y - (int)memoryApplication_Partsnumput.BgLocationScaled.Y )); }
//──────────────────────────────────────── #endregion #region アクション //──────────────────────────────────────── public void InitializeBeforeuse(Memory1Application_Partsnumput owner_MemoryApplication) { this.owner_MemoryApplication = owner_MemoryApplication; this.Owner_MemoryApplication.Delegate_OnPngOpened = OnOpenBackgroundimage; this.Owner_MemoryApplication.Delegate_OnCsvOpened = OnCsvOpened; this.Owner_MemoryApplication.Delegate_OnErrorFilechooser = OnErrorFilechooser; }
public void ClearNumbers(bool bLoadingNow, Memory1Application_Partsnumput memoryApplication_Partsnumput) { this.layerDic.Clear(); if (!bLoadingNow) { memoryApplication_Partsnumput.IsChangedContents = true; } }
//──────────────────────────────────────── public string GetText(bool isHidden_Comment, Memory1Application_Partsnumput memoryApplication_Partsnumput) { StringBuilder s = new StringBuilder(); if (memoryApplication_Partsnumput.IsDisplayExecute) { if (this.IsDefinitionExpression) { // 名前定義 s.Append(this.Name_Symbol); s.Append("="); s.Append(this.Execute_CalculateExpression()); } else { // 番号 s.Append(this.Execute_CalculateExpression()); } } else { // そのまま表示 if (isHidden_Comment) { // コメントは隠す場合。 if (this.IsDefinitionExpression) { // 名前定義 s.Append(this.Name_Symbol); s.Append("="); s.Append(this.Valuenumber_Symbol); } else { // 番号 // 値は「b+3~4」といった形。 s.Append(this.Valuenumber_Symbol); } } else { s.Append(this.text); } } return(s.ToString()); }
//──────────────────────────────────────── public void ReloadHtml( Memory1Application_Partsnumput memoryApplication_Partsnumput) { StringBuilder s = new StringBuilder(); s.Append("<html>"); s.Append("<body style=\"font-family:MS ゴシック;font-size:10.5pt;color:gray;\">"); foreach (string sGroupName in memoryApplication_Partsnumput.Array_NameGroup) { Memory4aPartsnumbersymbolspritesImpl moGroup = memoryApplication_Partsnumput.Dictionary_MemoryPartsnumbergroupImpl[sGroupName]; // // 名前定義 s.Append(moGroup.MemoryPartsnumbersprite_Symboldefinition.Name_Symbol); s.Append("="); if (memoryApplication_Partsnumput.IsDisplayExecute) { s.Append(moGroup.MemoryPartsnumbersprite_Symboldefinition.Execute_CalculateExpression()); } else { s.Append(moGroup.MemoryPartsnumbersprite_Symboldefinition.Valuenumber_Symbol); } // コメント if ("" != moGroup.MemoryPartsnumbersprite_Symboldefinition.Comment) { s.Append("/"); // 薄い青 s.Append("<span style=\"color:#3366ff;\">「"); s.Append(moGroup.MemoryPartsnumbersprite_Symboldefinition.Comment); s.Append("」</span>"); } s.Append("<br/>"); s.Append(Environment.NewLine); // // Num要素 if (0 < moGroup.List_MemoryPartsnumbersprite_Expression.Count) { s.Append("<div style=\"margin-left:32px;\">"); int nColumn = 0; foreach (Memory4bSpritePartsnumber mNum in moGroup.List_MemoryPartsnumbersprite_Expression) { StringBuilder s2 = new StringBuilder(); if (1 <= nColumn) { // 2列目以降は、頭に全角空白を1つ追加。 s2.Append(" "); } if (memoryApplication_Partsnumput.IsDisplayExecute) { // 絶対番号 s2.Append(mNum.Execute_CalculateExpression()); } else { // 「a+0~2」形式 s2.Append(mNum.Valuenumber_Symbol); } if ("" != mNum.Comment) { // コメント s2.Append("「"); s2.Append(mNum.Comment); s2.Append("」"); } string sTxt2 = s2.ToString(); s.Append(sTxt2); nColumn++; } // 改行 s.Append("<br/>"); s.Append(Environment.NewLine); s.Append("</div>"); } } s.Append("</body>"); s.Append("</html>"); this.Html = s.ToString(); goto gt_EndMethod; // // // // gt_EndMethod: ; }
//──────────────────────────────────────── public void Parse_CalculateExpression(Memory1Application_Partsnumput memoryApplication_Partsnumput) { // 値は、「5000」「b+100」「b+0~3」といった形になっている。 string result; string sValue = this.Valuenumber_Symbol.Trim(); int nPlus = sValue.IndexOf('+'); if (-1 == nPlus) { // 「+」が無ければ。 int nValue; if (int.TryParse(sValue, out nValue)) { result = nValue.ToString(); if (!memoryApplication_Partsnumput.NameValueDic.ContainsKey(this.Name_Symbol.Trim())) { // 非既存なら。 memoryApplication_Partsnumput.NameValueDic.Add(this.Name_Symbol.Trim(), nValue); } } else { result = sValue; } } else { // 「+」が有れば。 string sLeft = sValue.Substring(0, nPlus - 0).Trim(); int nLeft; if (memoryApplication_Partsnumput.NameValueDic.ContainsKey(sLeft)) { nLeft = memoryApplication_Partsnumput.NameValueDic[sLeft]; } else { result = "エラー(" + sLeft + "=?)"; // #デバッグ { System.Console.WriteLine("↓"); foreach (KeyValuePair<string, int> kvP in memoryApplication_Partsnumput.NameValueDic) { System.Console.WriteLine(kvP.Key + "=" + kvP.Value); } System.Console.WriteLine("↑"); } goto process_end; } string sRight; if (sValue.Length <= nPlus + 1) { sRight = ""; } else { int nRightBegin = nPlus + 1; int nLast = sValue.IndexOf(':'); if (-1 == nLast || sValue.Length <= nLast + 1) { // 「:」が無いか、空コメントがある場合。 sRight = sValue.Substring(nRightBegin).Trim(); } else { sRight = sValue.Substring(nRightBegin, nLast - nRightBegin).Trim(); } } int nTilde = sRight.IndexOf('~'); if (-1 == nTilde) { // 「~」が無ければ。 int nRight; int.TryParse(sRight, out nRight); result = (nLeft + nRight).ToString(); //ystem.Console.WriteLine("Name「"+this.SName+"」 左「" + sLeft + "」(" + nLeft + ")+右「" + sRight + "」(" + nRight + ") → 「" + sResult + "」"); if (this.IsDefinitionExpression && !memoryApplication_Partsnumput.NameValueDic.ContainsKey(this.Name_Symbol)) { // 名前定義で、非既存なら。 memoryApplication_Partsnumput.NameValueDic.Add(this.Name_Symbol, nLeft + nRight); } } else { // 「~」が有れば。 string sTildeLeft = sRight.Substring(0, nTilde).Trim(); int nTildeLeft; int.TryParse(sTildeLeft, out nTildeLeft); if (sRight.Length <= nTilde + 1) { // 「~」が末尾にある場合。 result = nTildeLeft.ToString() + "~"; } else { // 「数字~数字」の場合。 int nBegin = nTilde + 1; string sTildeRight = sRight.Substring(nBegin).Trim(); int nTildeRight; int.TryParse(sTildeRight, out nTildeRight); result = (nLeft + nTildeLeft).ToString() + "~" + (nLeft + nTildeRight).ToString(); } } } goto process_end; // process_end: this.sValueExecute = result; }
//──────────────────────────────────────── public string GetText( bool isHidden_Comment, Memory1Application_Partsnumput memoryApplication_Partsnumput) { StringBuilder s = new StringBuilder(); if (memoryApplication_Partsnumput.IsDisplayExecute) { if (this.IsDefinitionExpression) { // 名前定義 s.Append(this.Name_Symbol); s.Append("="); s.Append(this.Execute_CalculateExpression()); } else { // 番号 s.Append(this.Execute_CalculateExpression()); } } else { // そのまま表示 if (isHidden_Comment) { // コメントは隠す場合。 if (this.IsDefinitionExpression) { // 名前定義 s.Append(this.Name_Symbol); s.Append("="); s.Append(this.Valuenumber_Symbol); } else { // 番号 // 値は「b+3~4」といった形。 s.Append(this.Valuenumber_Symbol); } } else { s.Append(this.text); } } return s.ToString(); }
//──────────────────────────────────────── public bool Contains(Point mouse, Memory1Application_Partsnumput memoryApplication_Partsnumput ) { return this.BoundsCircleScaledOnBackground.Contains( mouse.X - (int)memoryApplication_Partsnumput.BgLocationScaled.X, mouse.Y - (int)memoryApplication_Partsnumput.BgLocationScaled.Y ); }
//──────────────────────────────────────── /// <summary> /// グルーピング /// </summary> public void Grouping(Memory1Application_Partsnumput memoryApplication_Partsnumput) { this.list_NameGroup.Clear(); this.dictionary_MemoryPartsnumbergroupImpl.Clear(); foreach (Memory4bSpritePartsnumber memSpritePartnumVisible in this.List_VisiblePartsnumbersprite) { // 書式からグループ分け。 if (memSpritePartnumVisible.IsDefinitionExpression) { if (dictionary_MemoryPartsnumbergroupImpl.ContainsKey(memSpritePartnumVisible.Name_Symbol)) { // 「a=1000」など定義文が、既に登録されていた場合。 Memory4aPartsnumbersymbolspritesImpl memSymboldefinition = dictionary_MemoryPartsnumbergroupImpl[memSpritePartnumVisible.Name_Symbol]; memSymboldefinition.MemoryPartsnumbersprite_Symboldefinition = memSpritePartnumVisible; } else { // 「a=1000」など、未登録の定義文の場合。 Memory4aPartsnumbersymbolspritesImpl memSymboldefinition = new Memory4aPartsnumbersymbolspritesImpl(); memSymboldefinition.MemoryPartsnumbersprite_Symboldefinition = memSpritePartnumVisible; dictionary_MemoryPartsnumbergroupImpl.Add(memSpritePartnumVisible.Name_Symbol, memSymboldefinition); list_NameGroup.Add(memSpritePartnumVisible.Name_Symbol); } } else { // 「b+1」など。 Memory4aPartsnumbersymbolspritesImpl memSpriteExpression; if (dictionary_MemoryPartsnumbergroupImpl.ContainsKey(memSpritePartnumVisible.Name_Symbol)) { memSpriteExpression = dictionary_MemoryPartsnumbergroupImpl[memSpritePartnumVisible.Name_Symbol]; } else { memSpriteExpression = new Memory4aPartsnumbersymbolspritesImpl(); dictionary_MemoryPartsnumbergroupImpl.Add(memSpritePartnumVisible.Name_Symbol, memSpriteExpression); list_NameGroup.Add(memSpritePartnumVisible.Name_Symbol); } memSpriteExpression.List_MemoryPartsnumbersprite_Expression.Add(memSpritePartnumVisible); } } this.sGroupNameArray = this.List_NameGroup.ToArray(); Array.Sort(sGroupNameArray); // 数値計算 foreach (string sGroupName in this.Array_NameGroup) { Memory4aPartsnumbersymbolspritesImpl moGroup = this.Dictionary_MemoryPartsnumbergroupImpl[sGroupName]; // 名前定義 if (memoryApplication_Partsnumput.IsDisplayExecute) { moGroup.MemoryPartsnumbersprite_Symboldefinition.Parse_CalculateExpression(memoryApplication_Partsnumput); } // Num要素 foreach (Memory4bSpritePartsnumber mNum in moGroup.List_MemoryPartsnumbersprite_Expression) { if (memoryApplication_Partsnumput.IsDisplayExecute) { mNum.Parse_CalculateExpression(memoryApplication_Partsnumput); } } } }
//──────────────────────────────────────── public void SetText_SpritePartsnumber(Memory4bSpritePartsnumber mNum, string sText, Memory1Application_Partsnumput memoryApplication_Partsnumput) { if (mNum.Text != sText) { mNum.Text = sText; memoryApplication_Partsnumput.IsChangedContents = true; } }
//──────────────────────────────────────── public void RemovePartsnumberspriteAt(int selectedIndex, Memory1Application_Partsnumput memoryApplication_Partsnumput) { this.List_VisiblePartsnumbersprite.RemoveAt(selectedIndex); memoryApplication_Partsnumput.IsChangedContents = true; }
//──────────────────────────────────────── /// <summary> /// 番号を追加します。 /// </summary> /// <param name="mNum"></param> public void AddPartsnumbersprite(Memory4bSpritePartsnumber mNum, bool bLoadingNow, Memory1Application_Partsnumput memoryApplication_Partsnumput) { if (!this.DictionaryLayer.ContainsKey(mNum.Number_Layer)) { List <Memory4bSpritePartsnumber> mNumList = new List <Memory4bSpritePartsnumber>(); mNumList.Add(mNum); this.DictionaryLayer.Add(mNum.Number_Layer, mNumList); } else { this.DictionaryLayer[mNum.Number_Layer].Add(mNum); } if (!bLoadingNow) { memoryApplication_Partsnumput.IsChangedContents = true; } }
//──────────────────────────────────────── public void MovePartsnumbersprite(Memory4bSpritePartsnumber mNum, float dx, float dy, float nScale, Memory1Application_Partsnumput memoryApplication_Partsnumput) { // 背景画像上のスプライト位置 mNum.LocationOnBackgroundActual = new PointF( mNum.LocationOnBackgroundActual.X + dx / nScale, mNum.LocationOnBackgroundActual.Y + dy / nScale ); //ystem.Console.WriteLine("移動前("+old.X+","+old.Y+") 移動後("+mNum.LocationOnBackgroundActual.X+","+mNum.LocationOnBackgroundActual.Y+")"); mNum.Delegate_OnChangeSprite_Partsnumber(mNum, nScale);//, ucCanvas memoryApplication_Partsnumput.IsChangedContents = true; }
//──────────────────────────────────────── /// <summary> /// 番号を追加します。 /// </summary> /// <param name="mNum"></param> public void AddPartsnumbersprite(Memory4bSpritePartsnumber mNum, bool bLoadingNow, Memory1Application_Partsnumput memoryApplication_Partsnumput) { if (!this.DictionaryLayer.ContainsKey(mNum.Number_Layer)) { List<Memory4bSpritePartsnumber> mNumList = new List<Memory4bSpritePartsnumber>(); mNumList.Add(mNum); this.DictionaryLayer.Add(mNum.Number_Layer, mNumList); } else { this.DictionaryLayer[mNum.Number_Layer].Add(mNum); } if (!bLoadingNow) { memoryApplication_Partsnumput.IsChangedContents = true; } }
//──────────────────────────────────────── #endregion #region アクション //──────────────────────────────────────── public void ReloadHtml(Memory1Application_Partsnumput memoryApplication_Partsnumput) { StringBuilder s = new StringBuilder(); s.Append("<html>"); s.Append("<body style=\"font-family:MS ゴシック;font-size:10.5pt;color:gray;\">"); foreach (string sGroupName in memoryApplication_Partsnumput.Array_NameGroup) { Memory4aPartsnumbersymbolspritesImpl moGroup = memoryApplication_Partsnumput.Dictionary_MemoryPartsnumbergroupImpl[sGroupName]; // // 名前定義 s.Append(moGroup.MemoryPartsnumbersprite_Symboldefinition.Name_Symbol); s.Append("="); if (memoryApplication_Partsnumput.IsDisplayExecute) { s.Append(moGroup.MemoryPartsnumbersprite_Symboldefinition.Execute_CalculateExpression()); } else { s.Append(moGroup.MemoryPartsnumbersprite_Symboldefinition.Valuenumber_Symbol); } // コメント if ("" != moGroup.MemoryPartsnumbersprite_Symboldefinition.Comment) { s.Append("/"); // 薄い青 s.Append("<span style=\"color:#3366ff;\">「"); s.Append(moGroup.MemoryPartsnumbersprite_Symboldefinition.Comment); s.Append("」</span>"); } s.Append("<br/>"); s.Append(Environment.NewLine); // // Num要素 if (0 < moGroup.List_MemoryPartsnumbersprite_Expression.Count) { s.Append("<div style=\"margin-left:32px;\">"); int nColumn = 0; foreach (Memory4bSpritePartsnumber mNum in moGroup.List_MemoryPartsnumbersprite_Expression) { StringBuilder s2 = new StringBuilder(); if (1 <= nColumn) { // 2列目以降は、頭に全角空白を1つ追加。 s2.Append(" "); } if (memoryApplication_Partsnumput.IsDisplayExecute) { // 絶対番号 s2.Append(mNum.Execute_CalculateExpression()); } else { // 「a+0~2」形式 s2.Append(mNum.Valuenumber_Symbol); } if ("" != mNum.Comment) { // コメント s2.Append("「"); s2.Append(mNum.Comment); s2.Append("」"); } string sTxt2 = s2.ToString(); s.Append(sTxt2); nColumn++; } // 改行 s.Append("<br/>"); s.Append(Environment.NewLine); s.Append("</div>"); } } s.Append("</body>"); s.Append("</html>"); this.Html = s.ToString(); goto gt_EndMethod; // // // // gt_EndMethod: ; }
//──────────────────────────────────────── public void Parse_CalculateExpression(Memory1Application_Partsnumput memoryApplication_Partsnumput) { // 値は、「5000」「b+100」「b+0~3」といった形になっている。 string result; string sValue = this.Valuenumber_Symbol.Trim(); int nPlus = sValue.IndexOf('+'); if (-1 == nPlus) { // 「+」が無ければ。 int nValue; if (int.TryParse(sValue, out nValue)) { result = nValue.ToString(); if (!memoryApplication_Partsnumput.NameValueDic.ContainsKey(this.Name_Symbol.Trim())) { // 非既存なら。 memoryApplication_Partsnumput.NameValueDic.Add(this.Name_Symbol.Trim(), nValue); } } else { result = sValue; } } else { // 「+」が有れば。 string sLeft = sValue.Substring(0, nPlus - 0).Trim(); int nLeft; if (memoryApplication_Partsnumput.NameValueDic.ContainsKey(sLeft)) { nLeft = memoryApplication_Partsnumput.NameValueDic[sLeft]; } else { result = "エラー(" + sLeft + "=?)"; // #デバッグ { System.Console.WriteLine("↓"); foreach (KeyValuePair <string, int> kvP in memoryApplication_Partsnumput.NameValueDic) { System.Console.WriteLine(kvP.Key + "=" + kvP.Value); } System.Console.WriteLine("↑"); } goto process_end; } string sRight; if (sValue.Length <= nPlus + 1) { sRight = ""; } else { int nRightBegin = nPlus + 1; int nLast = sValue.IndexOf(':'); if (-1 == nLast || sValue.Length <= nLast + 1) { // 「:」が無いか、空コメントがある場合。 sRight = sValue.Substring(nRightBegin).Trim(); } else { sRight = sValue.Substring(nRightBegin, nLast - nRightBegin).Trim(); } } int nTilde = sRight.IndexOf('~'); if (-1 == nTilde) { // 「~」が無ければ。 int nRight; int.TryParse(sRight, out nRight); result = (nLeft + nRight).ToString(); //ystem.Console.WriteLine("Name「"+this.SName+"」 左「" + sLeft + "」(" + nLeft + ")+右「" + sRight + "」(" + nRight + ") → 「" + sResult + "」"); if (this.IsDefinitionExpression && !memoryApplication_Partsnumput.NameValueDic.ContainsKey(this.Name_Symbol)) { // 名前定義で、非既存なら。 memoryApplication_Partsnumput.NameValueDic.Add(this.Name_Symbol, nLeft + nRight); } } else { // 「~」が有れば。 string sTildeLeft = sRight.Substring(0, nTilde).Trim(); int nTildeLeft; int.TryParse(sTildeLeft, out nTildeLeft); if (sRight.Length <= nTilde + 1) { // 「~」が末尾にある場合。 result = nTildeLeft.ToString() + "~"; } else { // 「数字~数字」の場合。 int nBegin = nTilde + 1; string sTildeRight = sRight.Substring(nBegin).Trim(); int nTildeRight; int.TryParse(sTildeRight, out nTildeRight); result = (nLeft + nTildeLeft).ToString() + "~" + (nLeft + nTildeRight).ToString(); } } } goto process_end; // process_end: this.sValueExecute = result; }
//──────────────────────────────────────── public void InitializeBeforeuse(Memory1Application_Partsnumput owner_MemoryApplication) { this.owner_MemoryApplication = owner_MemoryApplication; this.Owner_MemoryApplication.Delegate_OnPngOpened = OnOpenBackgroundimage; this.Owner_MemoryApplication.Delegate_OnCsvOpened = OnCsvOpened; this.Owner_MemoryApplication.Delegate_OnErrorFilechooser = OnErrorFilechooser; }