Example #1
0
 /// <summary>ダブルクリック時の処理
 /// </summary>
 /// <param name="sender">イベントの発生したオブジェクト</param>
 /// <param name="e">発生したイベント</param>
 private void BodyTable_CellMouseDoubleClick (object sender, DataGridViewCellMouseEventArgs e) {
     if (e.RowIndex >= 0) {
         CMember member = this.Members[e.RowIndex];
         switch (e.ColumnIndex) {
             case 0:
                 // メンバーの修正
                 TimeTableManager.UI.FMemberDialog dialogM = new TimeTableManager.UI.FMemberDialog();
                 dialogM.Member = member;
                 if (dialogM.ShowDialog(this.MainForm) == DialogResult.OK) {
                     Refresh();
                 }
                 break;
             case 1:
                 // シフトの修正
                 PatternWrapper wrapper = Member2PatternWrapper[member];
                 CPattern pattern = wrapper.Pattern;
                 if (pattern != null && !pattern.BuiltIn) {
                     TimeTableManager.UI.FPatternDialog dialogP = new TimeTableManager.UI.FPatternDialog();
                     dialogP.Pattern = pattern;
                     if (dialogP.ShowDialog(this.MainForm) == DialogResult.OK) {
                         Refresh();
                     }
                 }
                 break;
             case 2:
                 // コメントの追加・修正
                 if (Dates.Count == 1 && Editable) {
                     BodyTable.CurrentCell = BodyTable[e.ColumnIndex, e.RowIndex];
                     BodyTable.BeginEdit(true);
                 }
                 break;
         }
     } else {
     }
 }
Example #2
0
 /// <summary>マウスダウン時ステータスを更新する
 /// </summary>
 /// <param name="sender">イベントの発生したオブジェクト</param>
 /// <param name="e">発生したイベント</param>
 private void BodyTable_CellMouseDown (object sender, DataGridViewCellMouseEventArgs e) {
     this.BarLabelStatus = EnumBarLabelStatus.None;
     CurrentRowIndex = e.RowIndex;
     if (this.TimeTable != null && CurrentRowIndex >= 0 && e.ColumnIndex == 2 && Editable) {
         CMember member = this.Members[CurrentRowIndex];
         PatternWrapper wrapper = Member2PatternWrapper[member];
         Rectangle CellBounds1 = BodyTable.GetCellDisplayRectangle(e.ColumnIndex, CurrentRowIndex, false);
         if (wrapper.Pattern != null && (!wrapper.Pattern.BuiltIn || wrapper.Pattern == CPattern.MULTI)) {
             Rectangle CellBounds2 = new Rectangle(new Point(0, 0), CellBounds1.Size);
             RectangleF rect = GetPattern2Rect(CellBounds2, wrapper);
             if (rect.Top < e.Y && e.Y < rect.Bottom) {
                 if (rect.X - SplitBuffer < e.X && e.X < rect.X + SplitBuffer) {
                     // 左端
                     this.BarLabelStatus = EnumBarLabelStatus.StartMoving;
                 } else if (rect.Right - SplitBuffer < e.X && e.X < rect.Right + SplitBuffer) {
                     // 右端
                     this.BarLabelStatus = EnumBarLabelStatus.EndMoving;
                 } else if (rect.X < e.X && e.X < rect.Right) {
                     // 内部
                     this.BarLabelStatus = EnumBarLabelStatus.AllMoving;
                 }
             }
         } else {
             this.BarLabelStatus = EnumBarLabelStatus.Creating;
         }
         StartPoint = e.Location;
         MovingPoint = e.Location;
     }
 }
Example #3
0
 /// <summary>マウスカーソルをどうする?
 /// </summary>
 /// <param name="sender">イベントの発生したオブジェクト</param>
 /// <param name="e">発生したイベント</param>
 private void BodyTable_CellMouseMove (object sender, DataGridViewCellMouseEventArgs e) {
     if (this.TimeTable != null && e.RowIndex >= 0 && e.ColumnIndex == 2 && Editable) {
         CMember member = this.Members[e.RowIndex];
         PatternWrapper wrapper = Member2PatternWrapper[member];
         if (wrapper.Pattern != null && (!wrapper.Pattern.BuiltIn || wrapper.Pattern == CPattern.MULTI) && BarLabelStatus == EnumBarLabelStatus.None) {
             Rectangle CellBounds1 = BodyTable.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, false);
             Rectangle CellBounds2 = new Rectangle(new Point(0, 0), CellBounds1.Size);
             RectangleF rect = GetPattern2Rect(CellBounds2, wrapper);
             if (rect.Top < e.Y && e.Y < rect.Bottom) {
                 if (rect.X - SplitBuffer < e.X && e.X < rect.X + SplitBuffer) {
                     // 左端
                     this.Cursor = Cursors.VSplit;
                 } else if (rect.Right - SplitBuffer < e.X && e.X < rect.Right + SplitBuffer) {
                     // 右端
                     this.Cursor = Cursors.VSplit;
                 } else if (rect.X < e.X && e.X < rect.Right) {
                     // 内部
                     this.Cursor = Cursors.Hand;
                 } else {
                     this.Cursor = Cursors.Default;
                 }
             }
         }
         if (BarLabelStatus != EnumBarLabelStatus.None) {
             MovingPoint = e.Location;
             BodyTable.Refresh();
         }
     }
 }
Example #4
0
 /// <summary>座標の計算
 /// </summary>
 /// <param name="CellBounds"></param>
 /// <param name="wrapper"></param>
 /// <returns></returns>
 private RectangleF GetPattern2Rect (Rectangle CellBounds, PatternWrapper wrapper) {
     RectangleF BarRect = CellBounds;
     float WidthOf1Hour = CellBounds.Width / (TotalHours);              // 1時間の幅
     BarRect.Y += CellBounds.Height / 4;
     BarRect.Height = CellBounds.Height / 2;
     TimeSpan PatternStart = wrapper.StartTime - AreaStartTime;
     TimeSpan PatternEnd = wrapper.EndTime - AreaStartTime;
     float RangeStart = (float)(PatternStart.TotalHours * WidthOf1Hour) + BarRect.X;
     float RangeEnd = (float)(PatternEnd.TotalHours * WidthOf1Hour) + BarRect.X;
     if (BarRect.X < RangeStart && RangeStart < BarRect.Right) {
         // 計算したバーの左端がセルのセルの表示範囲内に収まっている場合(収まっていなければセルの左端のまま)
         BarRect.X = RangeStart;
     //} else if (BarRect.X > RangeStart) {
     //    BarRect.X = BarRect.X;
     } else if (RangeStart > BarRect.Right) {
         BarRect.X = BarRect.Right;
     }
     if (BarRect.X < RangeEnd && RangeEnd < BarRect.Right) {
         // 1.左右が逆転していないこと
         // 2.計算したバーの右端がセルのセル表示範囲内に収まっている場合幅を計算する(収まっていなければセルの右端のまま)
         BarRect.Width = RangeEnd - BarRect.X;
     } else if (BarRect.X > RangeEnd) {
         BarRect.Width = 0;
     }
     return BarRect;
 }
Example #5
0
 private static void Output(PatternWrapper wrapper, IMatchResult results)
 {
     Output((IWrapper)wrapper, (IMatchResult)results);
     Console.WriteLine("User-Agent -> {0}", results.UserAgent);
     Console.WriteLine("Rank -> {0}", results.Rank);
     Console.WriteLine("Difference -> {0}", results.Difference);
     Console.WriteLine("Method -> {0}", results.Method);
 }
Example #6
0
 /// <summary>メンバーの就業状態の作成
 /// </summary>
 /// <param name="member"></param>
 private void SetUpMember2Pattern (CMember member) {
     PatternWrapper wrapper = new PatternWrapper();
     wrapper.Pattern = CPattern.NULL;
     wrapper.StartTime = TimeSpan.MaxValue;
     wrapper.EndTime = TimeSpan.MinValue;
     if ((member == null) || (Dates.Count <= 0) || (TimeTable == null)) {
         // 存在しない
         if (member != null && Member2PatternWrapper.ContainsKey(member)) {
             Member2PatternWrapper.Remove(member);
         }
         return;
     } else {
         // 繰り返し
         int i = 0;
         foreach (DateTime date in Dates) {
             CScheduledDate sdate = TimeTable[date];
             CSchedule schedule = sdate[member];
             CPattern work = schedule.Pattern;
             if (i == 0) {
                 // 最初のシフト
                 wrapper.Pattern = work;
                 if (work != null && !work.BuiltIn) {
                     wrapper.StartTime = work.Start;
                     wrapper.EndTime = work.End;
                     i++;
                 }
                 wrapper.Notes = schedule.Notes;
                 //wrapper.Notes = schedule["notes"];
             } else if (wrapper.Pattern != work) {
                 if (schedule.Notes != "") {
                     // メモの追加
                     wrapper.Notes += "," + schedule.Notes;
                 }
                 // 複数選択されている
                 wrapper.Pattern = CPattern.MULTI;
                 if (work != null && !work.BuiltIn) {
                     if (wrapper.StartTime > work.Start) {
                         wrapper.StartTime = work.Start;
                     }
                     if (wrapper.EndTime < work.End) {
                         wrapper.EndTime = work.End;
                     }
                 }
                 i++;
             }
             
         }
         // 追加する
         if (Member2PatternWrapper.ContainsKey(member)) {
             Member2PatternWrapper[member] = wrapper;
         } else {
             Member2PatternWrapper.Add(member, wrapper);
         }
     }
 }
Example #7
0
 /// <summary>
 /// Creates the device detection providers.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 protected void Application_Start(object sender, EventArgs e)
 {
     _pattern = new PatternWrapper(
         Path.Combine(
             AppDomain.CurrentDomain.BaseDirectory,
             "..\\..\\data\\51Degrees-LiteV3.2.dat"));
     _trie = new TrieWrapper(
         Path.Combine(
             AppDomain.CurrentDomain.BaseDirectory,
             "..\\..\\data\\51Degrees-LiteV3.2.trie"));
 }
Example #8
0
 static void Main(string[] args)
 {
     using (var pattern = new PatternWrapper("../../../../../data/51Degrees-LiteV3.2.dat"))
     {
         Process(pattern);
     }
     using (var trie = new TrieWrapper("../../../../../data/51Degrees-LiteV3.4.trie"))
     {
         Process(trie);
     }
 }
Example #9
0
 /// <summary>勤務シフトの修正
 /// </summary>
 /// <param name="sender">イベントの発生したオブジェクト</param>
 /// <param name="e">発生したイベント</param>
 private void TsmiEditPattern_Click (object sender, EventArgs e) {
     CMember member = this.Members[CurrentRowIndex];
     PatternWrapper wrapper = Member2PatternWrapper[member];
     CPattern pattern = wrapper.Pattern;
     if (pattern != null && !pattern.BuiltIn) {
         TimeTableManager.UI.FPatternDialog dialog = new TimeTableManager.UI.FPatternDialog();
         dialog.Pattern = pattern;
         if (dialog.ShowDialog(this.MainForm) == DialogResult.OK) {
             Refresh();
         }
     }
 }
Example #10
0
 /// <summary>
 /// Disposes of the device detection providers.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 protected void Application_End(object sender, EventArgs e)
 {
     if (_pattern != null)
     {
         _pattern.Dispose();
         _pattern = null;
     }
     if (_trie != null)
     {
         _trie.Dispose();
         _trie = null;
     }
 }
Example #11
0
 /// <summary>勤務シフトの削除
 /// </summary>
 /// <param name="sender">イベントの発生したオブジェクト</param>
 /// <param name="e">発生したイベント</param>
 private void TsmiRemovePattern_Click (object sender, EventArgs e) {
     CMember member = this.Members[CurrentRowIndex];
     PatternWrapper wrapper = Member2PatternWrapper[member];
     CPattern pattern = wrapper.Pattern;
     if (pattern != null && !pattern.BuiltIn) {
         TimeTableManager.UI.FPatternDialog dialog = new TimeTableManager.UI.FPatternDialog();
         dialog.Pattern = pattern;
         pattern.SetAvailable(false, StartDate.AddDays(-1.0));
         if (dialog.ShowDialog(this.MainForm) == DialogResult.OK) {
             this.TimeTable.Patterns.DelPattern(pattern);
             SetUpValidMembers();
             Refresh();
         } else {
             pattern.SetAvailable(true);
         }
     }
 }
Example #12
0
        static void Main(string[] args)
        {
            // Initialise the pattern provider with a list of 4 properties.
            using (var pattern = new PatternWrapper(
                       new FileInfo("..\\..\\..\\..\\..\\data\\51Degrees-LiteV3.2.dat").FullName,
                       new[] { "Id", "DeviceType", "IsMobile", "ScreenPixelsWidth", "ScreenPixelsHeight" }))
            {
                // Initialise the trie provider with a data file and a list of 4 properties.
                using (var trie = new TrieWrapper(
                           new FileInfo("..\\..\\..\\..\\..\\data\\51Degrees-LiteV3.2.trie").FullName,
                           new[] { "Id", "DeviceType", "IsMobile", "ScreenPixelsWidth", "ScreenPixelsHeight" }))
                {
                    // IMPORTANT: For a full list of properties see: https://51degrees.com/resources/property-dictionary

                    using (var reader = new FileInfo(args.Length > 0 ? args[0] : "..\\..\\..\\..\\..\\data\\20000 User Agents.csv").OpenText())
                    {
                        var start = DateTime.UtcNow;
                        Console.WriteLine("Started -> {0}", start);
                        var line = reader.ReadLine();
                        while (line != null)
                        {
                            using (var patternResults = pattern.Match(line.Trim()))
                            {
                                Output(pattern, patternResults);
                            }
                            using (var trieResults = trie.Match(line.Trim()))
                            {
                                Output(trie, trieResults);
                            }
                            line = reader.ReadLine();
                        }
                        Console.WriteLine("Elapsed Time -> {0} seconds", (DateTime.UtcNow - start).TotalSeconds);
                    }
                }
            }
            Console.ReadKey();
        }
Example #13
0
 public PatternTypeInfo(AutomationPattern id, PatternWrapper clientSideWrapper)
 {
     this._id = id;
     this._clientSideWrapper = clientSideWrapper;
 }
Example #14
0
 public PatternTypeInfo(AutomationPattern id, PatternWrapper clientSideWrapper)
 {
     this._id = id;
     this._clientSideWrapper = clientSideWrapper;
 }
Example #15
0
 /// <summary>バー部分の描画
 /// </summary>
 /// <param name="sender">イベントの発生したオブジェクト</param>
 /// <param name="e">発生したイベント</param>
 private void PaintBarColumn (object sender, DataGridViewCellPaintingEventArgs e) {
     if (TimeTable != null) {
         e.Paint(e.CellBounds, e.PaintParts);
         CMember member = Members[e.RowIndex];
         PatternWrapper wrapper = Member2PatternWrapper[member];
         e.Handled = true;
         float WidthOf1Hour = e.CellBounds.Width / (TotalHours);              // 1時間の幅
         float AreaStart = e.CellBounds.X + (WidthOf1Hour / 2);      // 時間領域の開始位置
         #region 1時間毎の縦線
         Pen pen = Pens.LightGray;
         TimeSpan work = TableStart;                                     // 初期値
         for (int i = 0; i < TotalHours; i++) {
             // 時刻を表示する
             float WorkX = AreaStart + (WidthOf1Hour * i);
             PointF point1 = new PointF(WorkX, e.CellBounds.Top);
             PointF point2 = new PointF(WorkX, e.CellBounds.Bottom);
             e.Graphics.DrawLine(pen, point1, point2);
             work = work.Add(TimeSpan.FromHours(1.0));
         }
         #endregion
         if (wrapper.Pattern == CPattern.NULL || wrapper.Pattern == CPattern.DAYOFF) {
             // 休みなら処理しない
             if (BarLabelStatus == EnumBarLabelStatus.Creating && CurrentRowIndex == e.RowIndex) {
                 float WorkW = (MovingPoint.X > StartPoint.X ? MovingPoint.X - StartPoint.X : StartPoint.X - MovingPoint.X);
                 float WorkX = (MovingPoint.X > StartPoint.X ? e.CellBounds.X + StartPoint.X : e.CellBounds.X + MovingPoint.X);
                 float WorkY = e.CellBounds.Y + e.CellBounds.Height / 4;
                 float WorkH = e.CellBounds.Height / 2;
                 e.Graphics.DrawRectangle(Pens.Black, WorkX, WorkY, WorkW, WorkH);
             }
         } else {
             // バーチャートの描画
             RectangleF BarRect = GetPattern2Rect(e.CellBounds, wrapper);
             Brush BarBrush = (member.IsChief ? Brushes.Red : Brushes.Blue);
             e.Graphics.FillRectangle(BarBrush, BarRect);
             // バーチャートの移動中
             if (BarLabelStatus != EnumBarLabelStatus.None && CurrentRowIndex == e.RowIndex) {
                 float WorkW = (MovingPoint.X > StartPoint.X ? MovingPoint.X - StartPoint.X : StartPoint.X - MovingPoint.X);
                 float WorkX = (MovingPoint.X > StartPoint.X ? e.CellBounds.X + StartPoint.X : e.CellBounds.X + MovingPoint.X);
                 switch (BarLabelStatus) {
                     case EnumBarLabelStatus.StartMoving:
                         WorkW = BarRect.Width + (StartPoint.X - MovingPoint.X);
                         if (WorkW >= 0) {
                             WorkX = BarRect.X + BarRect.Width - WorkW;
                         } else {
                             WorkW = -WorkW;
                             WorkX = BarRect.X + BarRect.Width;
                         }
                         break;
                     case EnumBarLabelStatus.EndMoving:
                         WorkX = BarRect.X;
                         WorkW = BarRect.Width + (MovingPoint.X - StartPoint.X);
                         if (WorkW < 0) {
                             WorkW = -WorkW;
                             WorkX = BarRect.X - WorkW;
                         }
                         break;
                     case EnumBarLabelStatus.AllMoving:
                         WorkX = BarRect.X + (MovingPoint.X - StartPoint.X);
                         WorkW = BarRect.Width;
                         break;
                 }
                 e.Graphics.DrawRectangle(Pens.LightGray, WorkX, BarRect.Top, WorkW, BarRect.Height);
                 Brush brush = (member.IsChief ? Brushes.Green : Brushes.HotPink);
                 e.Graphics.FillRectangle(brush, WorkX, BarRect.Top + (BarRect.Height / 2), WorkW, BarRect.Height / 2);
             }
         }
         e.PaintContent(e.ClipBounds);
     }
 }