System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact c0ef408e250e03ba96f441bea826310ab801b25d:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 2a 20 41 44 4f  *********. * ADO
0040: 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50 72  .NET 2.0 Data Pr
0050: 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69 74  ovider for SQLit
0060: 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0a 20 2a  e Version 3.X. *
0070: 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f 62 65   Written by Robe
0080: 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f 62 65  rt Simpson (robe
0090: 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65 73 6f  rt@blackcastleso
00a0: 66 74 2e 63 6f 6d 29 0a 20 2a 20 0a 20 2a 20 52  ft.com). * . * R
00b0: 65 6c 65 61 73 65 64 20 74 6f 20 74 68 65 20 70  eleased to the p
00c0: 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c 20 75 73  ublic domain, us
00d0: 65 20 61 74 20 79 6f 75 72 20 6f 77 6e 20 72 69  e at your own ri
00e0: 73 6b 21 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  sk!. ***********
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
0120: 6e 61 6d 65 73 70 61 63 65 20 53 51 4c 69 74 65  namespace SQLite
0130: 2e 44 65 73 69 67 6e 65 72 2e 45 64 69 74 6f 72  .Designer.Editor
0140: 73 0a 7b 0a 20 20 75 73 69 6e 67 20 53 79 73 74  s.{.  using Syst
0150: 65 6d 3b 0a 20 20 75 73 69 6e 67 20 53 79 73 74  em;.  using Syst
0160: 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f 6e 73 2e 47  em.Collections.G
0170: 65 6e 65 72 69 63 3b 0a 20 20 75 73 69 6e 67 20  eneric;.  using 
0180: 53 79 73 74 65 6d 2e 43 6f 6d 70 6f 6e 65 6e 74  System.Component
0190: 4d 6f 64 65 6c 3b 0a 20 20 75 73 69 6e 67 20 53  Model;.  using S
01a0: 79 73 74 65 6d 2e 44 61 74 61 3b 0a 20 20 75 73  ystem.Data;.  us
01b0: 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ing System.Data.
01c0: 43 6f 6d 6d 6f 6e 3b 0a 20 20 75 73 69 6e 67 20  Common;.  using 
01d0: 53 79 73 74 65 6d 2e 44 72 61 77 69 6e 67 3b 0a  System.Drawing;.
01e0: 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 54    using System.T
01f0: 65 78 74 3b 0a 20 20 75 73 69 6e 67 20 53 79 73  ext;.  using Sys
0200: 74 65 6d 2e 57 69 6e 64 6f 77 73 2e 46 6f 72 6d  tem.Windows.Form
0210: 73 3b 0a 20 20 75 73 69 6e 67 20 4d 69 63 72 6f  s;.  using Micro
0220: 73 6f 66 74 2e 56 69 73 75 61 6c 53 74 75 64 69  soft.VisualStudi
0230: 6f 2e 53 68 65 6c 6c 2e 49 6e 74 65 72 6f 70 3b  o.Shell.Interop;
0240: 0a 20 20 75 73 69 6e 67 20 4d 69 63 72 6f 73 6f  .  using Microso
0250: 66 74 2e 56 69 73 75 61 6c 53 74 75 64 69 6f 2e  ft.VisualStudio.
0260: 4f 4c 45 2e 49 6e 74 65 72 6f 70 3b 0a 20 20 75  OLE.Interop;.  u
0270: 73 69 6e 67 20 4d 69 63 72 6f 73 6f 66 74 2e 56  sing Microsoft.V
0280: 69 73 75 61 6c 53 74 75 64 69 6f 3b 0a 20 20 75  isualStudio;.  u
0290: 73 69 6e 67 20 4d 69 63 72 6f 73 6f 66 74 2e 56  sing Microsoft.V
02a0: 69 73 75 61 6c 53 74 75 64 69 6f 2e 44 61 74 61  isualStudio.Data
02b0: 3b 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d  ;.  using System
02c0: 2e 43 6f 6d 70 6f 6e 65 6e 74 4d 6f 64 65 6c 2e  .ComponentModel.
02d0: 44 65 73 69 67 6e 3b 0a 20 20 75 73 69 6e 67 20  Design;.  using 
02e0: 53 79 73 74 65 6d 2e 47 6c 6f 62 61 6c 69 7a 61  System.Globaliza
02f0: 74 69 6f 6e 3b 0a 20 20 75 73 69 6e 67 20 53 51  tion;.  using SQ
0300: 4c 69 74 65 2e 44 65 73 69 67 6e 65 72 2e 44 65  Lite.Designer.De
0310: 73 69 67 6e 3b 0a 0a 20 20 70 75 62 6c 69 63 20  sign;..  public 
0320: 70 61 72 74 69 61 6c 20 63 6c 61 73 73 20 54 61  partial class Ta
0330: 62 6c 65 44 65 73 69 67 6e 65 72 44 6f 63 20 3a  bleDesignerDoc :
0340: 20 44 65 73 69 67 6e 65 72 44 6f 63 42 61 73 65   DesignerDocBase
0350: 2c 0a 20 20 20 20 49 56 73 50 65 72 73 69 73 74  ,.    IVsPersist
0360: 44 6f 63 44 61 74 61 2c 0a 20 20 20 20 49 56 73  DocData,.    IVs
0370: 57 69 6e 64 6f 77 50 61 6e 65 2c 0a 20 20 20 20  WindowPane,.    
0380: 49 4f 6c 65 43 6f 6d 6d 61 6e 64 54 61 72 67 65  IOleCommandTarge
0390: 74 2c 0a 20 20 20 20 49 53 65 6c 65 63 74 69 6f  t,.    ISelectio
03a0: 6e 43 6f 6e 74 61 69 6e 65 72 2c 0a 20 20 20 20  nContainer,.    
03b0: 49 56 73 57 69 6e 64 6f 77 50 61 6e 65 43 6f 6d  IVsWindowPaneCom
03c0: 6d 69 74 2c 0a 20 20 20 20 49 56 73 57 69 6e 64  mit,.    IVsWind
03d0: 6f 77 46 72 61 6d 65 4e 6f 74 69 66 79 0a 20 20  owFrameNotify.  
03e0: 7b 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74  {.    private st
03f0: 61 74 69 63 20 44 69 63 74 69 6f 6e 61 72 79 3c  atic Dictionary<
0400: 69 6e 74 2c 20 73 74 72 69 6e 67 3e 20 5f 65 64  int, string> _ed
0410: 69 74 69 6e 67 54 61 62 6c 65 73 20 3d 20 6e 65  itingTables = ne
0420: 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 69 6e 74  w Dictionary<int
0430: 2c 20 73 74 72 69 6e 67 3e 28 29 3b 0a 20 20 20  , string>();.   
0440: 20 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 44   .    internal D
0450: 61 74 61 43 6f 6e 6e 65 63 74 69 6f 6e 20 5f 63  ataConnection _c
0460: 6f 6e 6e 65 63 74 69 6f 6e 3b 0a 20 20 20 20 69  onnection;.    i
0470: 6e 74 65 72 6e 61 6c 20 4d 69 63 72 6f 73 6f 66  nternal Microsof
0480: 74 2e 56 69 73 75 61 6c 53 74 75 64 69 6f 2e 44  t.VisualStudio.D
0490: 61 74 61 2e 53 65 72 76 69 63 65 50 72 6f 76 69  ata.ServiceProvi
04a0: 64 65 72 20 5f 73 65 72 76 69 63 65 50 72 6f 76  der _serviceProv
04b0: 69 64 65 72 3b 0a 20 20 20 20 69 6e 74 65 72 6e  ider;.    intern
04c0: 61 6c 20 54 61 62 6c 65 20 5f 74 61 62 6c 65 3b  al Table _table;
04d0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 62 6f  .    internal bo
04e0: 6f 6c 20 5f 64 69 72 74 79 3b 0a 20 20 20 20 69  ol _dirty;.    i
04f0: 6e 74 65 72 6e 61 6c 20 62 6f 6f 6c 20 5f 69 6e  nternal bool _in
0500: 69 74 3b 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  it;.    internal
0510: 20 44 61 74 61 56 69 65 77 48 69 65 72 61 72 63   DataViewHierarc
0520: 68 79 41 63 63 65 73 73 6f 72 20 5f 61 63 63 65  hyAccessor _acce
0530: 73 73 6f 72 3b 0a 20 20 20 20 69 6e 74 65 72 6e  ssor;.    intern
0540: 61 6c 20 69 6e 74 20 5f 69 74 65 6d 49 64 3b 0a  al int _itemId;.
0550: 20 20 20 20 73 74 61 74 69 63 20 70 72 69 76 61      static priva
0560: 74 65 20 62 6f 6f 6c 20 5f 77 61 72 6e 65 64 3b  te bool _warned;
0570: 0a 0a 20 20 20 20 70 75 62 6c 69 63 20 54 61 62  ..    public Tab
0580: 6c 65 44 65 73 69 67 6e 65 72 44 6f 63 28 69 6e  leDesignerDoc(in
0590: 74 20 69 74 65 6d 49 64 2c 20 44 61 74 61 56 69  t itemId, DataVi
05a0: 65 77 48 69 65 72 61 72 63 68 79 41 63 63 65 73  ewHierarchyAcces
05b0: 73 6f 72 20 61 63 63 65 73 73 6f 72 2c 20 73 74  sor accessor, st
05c0: 72 69 6e 67 20 74 61 62 6c 65 4e 61 6d 65 29 0a  ring tableName).
05d0: 20 20 20 20 7b 0a 20 20 20 20 20 20 5f 61 63 63      {.      _acc
05e0: 65 73 73 6f 72 20 3d 20 61 63 63 65 73 73 6f 72  essor = accessor
05f0: 3b 0a 20 20 20 20 20 20 5f 63 6f 6e 6e 65 63 74  ;.      _connect
0600: 69 6f 6e 20 3d 20 61 63 63 65 73 73 6f 72 2e 43  ion = accessor.C
0610: 6f 6e 6e 65 63 74 69 6f 6e 3b 0a 20 20 20 20 20  onnection;.     
0620: 20 5f 69 74 65 6d 49 64 20 3d 20 69 74 65 6d 49   _itemId = itemI
0630: 64 3b 0a 20 20 20 20 20 20 5f 69 6e 69 74 20 3d  d;.      _init =
0640: 20 74 72 75 65 3b 0a 0a 20 20 20 20 20 20 49 6e   true;..      In
0650: 69 74 69 61 6c 69 7a 65 43 6f 6d 70 6f 6e 65 6e  itializeComponen
0660: 74 28 29 3b 0a 0a 20 20 20 20 20 20 53 74 72 69  t();..      Stri
0670: 6e 67 42 75 69 6c 64 65 72 20 74 61 62 6c 65 73  ngBuilder tables
0680: 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69   = new StringBui
0690: 6c 64 65 72 28 29 3b 0a 0a 20 20 20 20 20 20 75  lder();..      u
06a0: 73 69 6e 67 20 28 44 61 74 61 52 65 61 64 65 72  sing (DataReader
06b0: 20 72 65 61 64 65 72 20 3d 20 5f 63 6f 6e 6e 65   reader = _conne
06c0: 63 74 69 6f 6e 2e 43 6f 6d 6d 61 6e 64 2e 45 78  ction.Command.Ex
06d0: 65 63 75 74 65 28 22 53 45 4c 45 43 54 20 2a 20  ecute("SELECT * 
06e0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
06f0: 65 72 22 2c 20 31 2c 20 6e 75 6c 6c 2c 20 33 30  er", 1, null, 30
0700: 29 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20  )).      {.     
0710: 20 20 20 77 68 69 6c 65 20 28 72 65 61 64 65 72     while (reader
0720: 2e 52 65 61 64 28 29 29 0a 20 20 20 20 20 20 20  .Read()).       
0730: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 74 61 62   {.          tab
0740: 6c 65 73 2e 41 70 70 65 6e 64 28 72 65 61 64 65  les.Append(reade
0750: 72 2e 47 65 74 49 74 65 6d 28 32 29 2e 54 6f 53  r.GetItem(2).ToS
0760: 74 72 69 6e 67 28 29 29 3b 0a 20 20 20 20 20 20  tring());.      
0770: 20 20 20 20 74 61 62 6c 65 73 2e 41 70 70 65 6e      tables.Appen
0780: 64 28 22 2c 22 29 3b 0a 20 20 20 20 20 20 20 20  d(",");.        
0790: 7d 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  }.      }..     
07a0: 20 69 6e 74 20 6e 20 3d 20 31 3b 0a 0a 20 20 20   int n = 1;..   
07b0: 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
07c0: 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74 61 62 6c  NullOrEmpty(tabl
07d0: 65 4e 61 6d 65 29 29 0a 20 20 20 20 20 20 7b 0a  eName)).      {.
07e0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 61          string a
07f0: 6c 6c 74 61 62 6c 65 73 20 3d 20 74 61 62 6c 65  lltables = table
0800: 73 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0a 0a 20  s.ToString();.. 
0810: 20 20 20 20 20 20 20 64 6f 0a 20 20 20 20 20 20         do.      
0820: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 74 61    {.          ta
0830: 62 6c 65 4e 61 6d 65 20 3d 20 53 74 72 69 6e 67  bleName = String
0840: 2e 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49  .Format(CultureI
0850: 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  nfo.InvariantCul
0860: 74 75 72 65 2c 20 22 54 61 62 6c 65 7b 30 7d 22  ture, "Table{0}"
0870: 2c 20 6e 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , n);.          
0880: 6e 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 20 77  n++;.        } w
0890: 68 69 6c 65 20 28 61 6c 6c 74 61 62 6c 65 73 2e  hile (alltables.
08a0: 49 6e 64 65 78 4f 66 28 74 61 62 6c 65 4e 61 6d  IndexOf(tableNam
08b0: 65 20 2b 20 22 2c 22 2c 20 53 74 72 69 6e 67 43  e + ",", StringC
08c0: 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61  omparison.Ordina
08d0: 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3e 20 2d  lIgnoreCase) > -
08e0: 31 20 7c 7c 20 5f 65 64 69 74 69 6e 67 54 61 62  1 || _editingTab
08f0: 6c 65 73 2e 43 6f 6e 74 61 69 6e 73 56 61 6c 75  les.ContainsValu
0900: 65 28 74 61 62 6c 65 4e 61 6d 65 29 29 3b 0a 0a  e(tableName));..
0910: 20 20 20 20 20 20 20 20 5f 65 64 69 74 69 6e 67          _editing
0920: 54 61 62 6c 65 73 2e 41 64 64 28 47 65 74 48 61  Tables.Add(GetHa
0930: 73 68 43 6f 64 65 28 29 2c 20 74 61 62 6c 65 4e  shCode(), tableN
0940: 61 6d 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ame);.      }.  
0950: 20 20 20 20 5f 74 61 62 6c 65 20 3d 20 6e 65 77      _table = new
0960: 20 54 61 62 6c 65 28 74 61 62 6c 65 4e 61 6d 65   Table(tableName
0970: 2c 20 5f 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6f  , _connection.Co
0980: 6e 6e 65 63 74 69 6f 6e 53 75 70 70 6f 72 74 2e  nnectionSupport.
0990: 50 72 6f 76 69 64 65 72 4f 62 6a 65 63 74 20 61  ProviderObject a
09a0: 73 20 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 2c 20  s DbConnection, 
09b0: 74 68 69 73 29 3b 0a 20 20 20 20 20 20 66 6f 72  this);.      for
09c0: 65 61 63 68 28 43 6f 6c 75 6d 6e 20 63 20 69 6e  each(Column c in
09d0: 20 5f 74 61 62 6c 65 2e 43 6f 6c 75 6d 6e 73 29   _table.Columns)
09e0: 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  .      {.       
09f0: 20 6e 20 3d 20 5f 64 61 74 61 47 72 69 64 2e 52   n = _dataGrid.R
0a00: 6f 77 73 2e 41 64 64 28 29 3b 0a 20 20 20 20 20  ows.Add();.     
0a10: 20 20 20 5f 64 61 74 61 47 72 69 64 2e 52 6f 77     _dataGrid.Row
0a20: 73 5b 6e 5d 2e 54 61 67 20 3d 20 63 3b 0a 20 20  s[n].Tag = c;.  
0a30: 20 20 20 20 20 20 63 2e 50 61 72 65 6e 74 20 3d        c.Parent =
0a40: 20 5f 64 61 74 61 47 72 69 64 2e 52 6f 77 73 5b   _dataGrid.Rows[
0a50: 6e 5d 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  n];.      }.    
0a60: 20 20 5f 69 6e 69 74 20 3d 20 66 61 6c 73 65 3b    _init = false;
0a70: 0a 0a 20 20 20 20 20 20 69 66 20 28 5f 64 61 74  ..      if (_dat
0a80: 61 47 72 69 64 2e 52 6f 77 73 2e 43 6f 75 6e 74  aGrid.Rows.Count
0a90: 20 3e 20 30 29 0a 20 20 20 20 20 20 7b 0a 20 20   > 0).      {.  
0aa0: 20 20 20 20 20 20 5f 64 61 74 61 47 72 69 64 2e        _dataGrid.
0ab0: 45 6e 64 45 64 69 74 28 29 3b 0a 20 20 20 20 20  EndEdit();.     
0ac0: 20 20 20 5f 73 71 6c 54 65 78 74 2e 54 65 78 74     _sqlText.Text
0ad0: 20 3d 20 5f 74 61 62 6c 65 2e 4f 72 69 67 69 6e   = _table.Origin
0ae0: 61 6c 53 71 6c 3b 0a 20 20 20 20 20 20 7d 0a 20  alSql;.      }. 
0af0: 20 20 20 7d 0a 0a 20 20 20 20 70 75 62 6c 69 63     }..    public
0b00: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
0b10: 20 43 61 6e 6f 6e 69 63 61 6c 4e 61 6d 65 0a 20   CanonicalName. 
0b20: 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74 0a 20     {.      get. 
0b30: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 72       {.        r
0b40: 65 74 75 72 6e 20 5f 74 61 62 6c 65 2e 4e 61 6d  eturn _table.Nam
0b50: 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  e;.      }.    }
0b60: 0a 0a 20 20 20 20 76 6f 69 64 20 53 65 74 50 72  ..    void SetPr
0b70: 6f 70 65 72 74 79 57 69 6e 64 6f 77 28 29 0a 20  opertyWindow(). 
0b80: 20 20 20 7b 0a 20 20 20 20 20 20 49 56 73 54 72     {.      IVsTr
0b90: 61 63 6b 53 65 6c 65 63 74 69 6f 6e 45 78 20 74  ackSelectionEx t
0ba0: 72 61 63 6b 20 3d 20 5f 73 65 72 76 69 63 65 50  rack = _serviceP
0bb0: 72 6f 76 69 64 65 72 2e 47 65 74 53 65 72 76 69  rovider.GetServi
0bc0: 63 65 28 74 79 70 65 6f 66 28 53 56 73 54 72 61  ce(typeof(SVsTra
0bd0: 63 6b 53 65 6c 65 63 74 69 6f 6e 45 78 29 29 20  ckSelectionEx)) 
0be0: 61 73 20 49 56 73 54 72 61 63 6b 53 65 6c 65 63  as IVsTrackSelec
0bf0: 74 69 6f 6e 45 78 3b 0a 20 20 20 20 20 20 69 66  tionEx;.      if
0c00: 20 28 74 72 61 63 6b 20 21 3d 20 6e 75 6c 6c 29   (track != null)
0c10: 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  .      {.       
0c20: 20 74 72 61 63 6b 2e 4f 6e 53 65 6c 65 63 74 43   track.OnSelectC
0c30: 68 61 6e 67 65 28 74 68 69 73 29 3b 0a 20 20 20  hange(this);.   
0c40: 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20     }.    }..    
0c50: 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 43 61  public string Ca
0c60: 70 74 69 6f 6e 0a 20 20 20 20 7b 0a 20 20 20 20  ption.    {.    
0c70: 20 20 67 65 74 0a 20 20 20 20 20 20 7b 0a 20 20    get.      {.  
0c80: 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74        string cat
0c90: 61 6c 6f 67 20 3d 20 22 6d 61 69 6e 22 3b 0a 20  alog = "main";. 
0ca0: 20 20 20 20 20 20 20 69 66 20 28 5f 74 61 62 6c         if (_tabl
0cb0: 65 20 21 3d 20 6e 75 6c 6c 29 20 63 61 74 61 6c  e != null) catal
0cc0: 6f 67 20 3d 20 5f 74 61 62 6c 65 2e 43 61 74 61  og = _table.Cata
0cd0: 6c 6f 67 3b 0a 0a 20 20 20 20 20 20 20 20 72 65  log;..        re
0ce0: 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d  turn String.Form
0cf0: 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49  at(CultureInfo.I
0d00: 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 2c  nvariantCulture,
0d10: 20 22 7b 30 7d 2e 7b 31 7d 20 54 61 62 6c 65 20   "{0}.{1} Table 
0d20: 28 53 51 4c 69 74 65 20 5b 7b 32 7d 5d 29 22 2c  (SQLite [{2}])",
0d30: 20 63 61 74 61 6c 6f 67 2c 20 62 61 73 65 2e 4e   catalog, base.N
0d40: 61 6d 65 2c 20 28 28 44 62 43 6f 6e 6e 65 63 74  ame, ((DbConnect
0d50: 69 6f 6e 29 5f 63 6f 6e 6e 65 63 74 69 6f 6e 2e  ion)_connection.
0d60: 43 6f 6e 6e 65 63 74 69 6f 6e 53 75 70 70 6f 72  ConnectionSuppor
0d70: 74 2e 50 72 6f 76 69 64 65 72 4f 62 6a 65 63 74  t.ProviderObject
0d80: 29 2e 44 61 74 61 53 6f 75 72 63 65 29 3b 0a 20  ).DataSource);. 
0d90: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20       }.    }..  
0da0: 20 20 70 75 62 6c 69 63 20 6e 65 77 20 73 74 72    public new str
0db0: 69 6e 67 20 4e 61 6d 65 0a 20 20 20 20 7b 0a 20  ing Name.    {. 
0dc0: 20 20 20 20 20 67 65 74 0a 20 20 20 20 20 20 7b       get.      {
0dd0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 74 61  .        if (_ta
0de0: 62 6c 65 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20  ble != null).   
0df0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 74         return _t
0e00: 61 62 6c 65 2e 4e 61 6d 65 3b 0a 20 20 20 20 20  able.Name;.     
0e10: 20 20 20 65 6c 73 65 20 72 65 74 75 72 6e 20 62     else return b
0e20: 61 73 65 2e 4e 61 6d 65 3b 0a 20 20 20 20 20 20  ase.Name;.      
0e30: 7d 0a 20 20 20 20 20 20 73 65 74 0a 20 20 20 20  }.      set.    
0e40: 20 20 7b 0a 20 20 20 20 20 20 20 20 62 61 73 65    {.        base
0e50: 2e 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 0a 0a  .Name = value;..
0e60: 20 20 20 20 20 20 20 20 69 66 20 28 5f 73 65 72          if (_ser
0e70: 76 69 63 65 50 72 6f 76 69 64 65 72 20 21 3d 20  viceProvider != 
0e80: 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 7b 0a  null).        {.
0e90: 20 20 20 20 20 20 20 20 20 20 49 56 73 57 69 6e            IVsWin
0ea0: 64 6f 77 46 72 61 6d 65 20 66 72 61 6d 65 20 3d  dowFrame frame =
0eb0: 20 5f 73 65 72 76 69 63 65 50 72 6f 76 69 64 65   _serviceProvide
0ec0: 72 2e 47 65 74 53 65 72 76 69 63 65 28 74 79 70  r.GetService(typ
0ed0: 65 6f 66 28 49 56 73 57 69 6e 64 6f 77 46 72 61  eof(IVsWindowFra
0ee0: 6d 65 29 29 20 61 73 20 49 56 73 57 69 6e 64 6f  me)) as IVsWindo
0ef0: 77 46 72 61 6d 65 3b 0a 20 20 20 20 20 20 20 20  wFrame;.        
0f00: 20 20 69 66 20 28 66 72 61 6d 65 20 21 3d 20 6e    if (frame != n
0f10: 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 20 20 7b  ull).          {
0f20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61  .            fra
0f30: 6d 65 2e 53 65 74 50 72 6f 70 65 72 74 79 28 28  me.SetProperty((
0f40: 69 6e 74 29 5f 5f 56 53 46 50 52 4f 50 49 44 2e  int)__VSFPROPID.
0f50: 56 53 46 50 52 4f 50 49 44 5f 45 64 69 74 6f 72  VSFPROPID_Editor
0f60: 43 61 70 74 69 6f 6e 2c 20 43 61 70 74 69 6f 6e  Caption, Caption
0f70: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
0f80: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
0f90: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 75 62 6c  .    }..    publ
0fa0: 69 63 20 76 6f 69 64 20 4e 6f 74 69 66 79 43 68  ic void NotifyCh
0fb0: 61 6e 67 65 73 28 29 0a 20 20 20 20 7b 0a 20 20  anges().    {.  
0fc0: 20 20 20 20 69 66 20 28 5f 73 65 72 76 69 63 65      if (_service
0fd0: 50 72 6f 76 69 64 65 72 20 3d 3d 20 6e 75 6c 6c  Provider == null
0fe0: 29 20 72 65 74 75 72 6e 3b 0a 0a 20 20 20 20 20  ) return;..     
0ff0: 20 5f 73 71 6c 54 65 78 74 2e 54 65 78 74 20 3d   _sqlText.Text =
1000: 20 5f 74 61 62 6c 65 2e 47 65 74 53 71 6c 28 29   _table.GetSql()
1010: 3b 0a 0a 20 20 20 20 20 20 2f 2f 20 47 65 74 20  ;..      // Get 
1020: 61 20 72 65 66 65 72 65 6e 63 65 20 74 6f 20 74  a reference to t
1030: 68 65 20 52 75 6e 6e 69 6e 67 20 44 6f 63 75 6d  he Running Docum
1040: 65 6e 74 20 54 61 62 6c 65 0a 20 20 20 20 20 20  ent Table.      
1050: 49 56 73 52 75 6e 6e 69 6e 67 44 6f 63 75 6d 65  IVsRunningDocume
1060: 6e 74 54 61 62 6c 65 20 72 75 6e 6e 69 6e 67 44  ntTable runningD
1070: 6f 63 54 61 62 6c 65 20 3d 20 28 49 56 73 52 75  ocTable = (IVsRu
1080: 6e 6e 69 6e 67 44 6f 63 75 6d 65 6e 74 54 61 62  nningDocumentTab
1090: 6c 65 29 5f 73 65 72 76 69 63 65 50 72 6f 76 69  le)_serviceProvi
10a0: 64 65 72 2e 47 65 74 53 65 72 76 69 63 65 28 74  der.GetService(t
10b0: 79 70 65 6f 66 28 53 56 73 52 75 6e 6e 69 6e 67  ypeof(SVsRunning
10c0: 44 6f 63 75 6d 65 6e 74 54 61 62 6c 65 29 29 3b  DocumentTable));
10d0: 0a 0a 20 20 20 20 20 20 2f 2f 20 4c 6f 63 6b 20  ..      // Lock 
10e0: 74 68 65 20 64 6f 63 75 6d 65 6e 74 0a 20 20 20  the document.   
10f0: 20 20 20 75 69 6e 74 20 64 6f 63 43 6f 6f 6b 69     uint docCooki
1100: 65 3b 0a 20 20 20 20 20 20 49 56 73 48 69 65 72  e;.      IVsHier
1110: 61 72 63 68 79 20 68 69 65 72 61 72 63 68 79 3b  archy hierarchy;
1120: 0a 20 20 20 20 20 20 75 69 6e 74 20 69 74 65 6d  .      uint item
1130: 49 44 3b 0a 20 20 20 20 20 20 49 6e 74 50 74 72  ID;.      IntPtr
1140: 20 64 6f 63 44 61 74 61 3b 0a 20 20 20 20 20 20   docData;.      
1150: 69 6e 74 20 68 72 20 3d 20 72 75 6e 6e 69 6e 67  int hr = running
1160: 44 6f 63 54 61 62 6c 65 2e 46 69 6e 64 41 6e 64  DocTable.FindAnd
1170: 4c 6f 63 6b 44 6f 63 75 6d 65 6e 74 28 0a 20 20  LockDocument(.  
1180: 20 20 20 20 20 20 20 20 28 75 69 6e 74 29 5f 56          (uint)_V
1190: 53 52 44 54 46 4c 41 47 53 2e 52 44 54 5f 52 65  SRDTFLAGS.RDT_Re
11a0: 61 64 4c 6f 63 6b 2c 0a 20 20 20 20 20 20 20 20  adLock,.        
11b0: 20 20 62 61 73 65 2e 4e 61 6d 65 2c 0a 20 20 20    base.Name,.   
11c0: 20 20 20 20 20 20 20 6f 75 74 20 68 69 65 72 61         out hiera
11d0: 72 63 68 79 2c 0a 20 20 20 20 20 20 20 20 20 20  rchy,.          
11e0: 6f 75 74 20 69 74 65 6d 49 44 2c 0a 20 20 20 20  out itemID,.    
11f0: 20 20 20 20 20 20 6f 75 74 20 64 6f 63 44 61 74        out docDat
1200: 61 2c 0a 20 20 20 20 20 20 20 20 20 20 6f 75 74  a,.          out
1210: 20 64 6f 63 43 6f 6f 6b 69 65 0a 20 20 20 20 20   docCookie.     
1220: 20 29 3b 0a 20 20 20 20 20 20 45 72 72 6f 72 48   );.      ErrorH
1230: 61 6e 64 6c 65 72 2e 54 68 72 6f 77 4f 6e 46 61  andler.ThrowOnFa
1240: 69 6c 75 72 65 28 68 72 29 3b 0a 0a 20 20 20 20  ilure(hr);..    
1250: 20 20 49 56 73 55 49 53 68 65 6c 6c 20 73 68 65    IVsUIShell she
1260: 6c 6c 20 3d 20 5f 73 65 72 76 69 63 65 50 72 6f  ll = _servicePro
1270: 76 69 64 65 72 2e 47 65 74 53 65 72 76 69 63 65  vider.GetService
1280: 28 74 79 70 65 6f 66 28 49 56 73 55 49 53 68 65  (typeof(IVsUIShe
1290: 6c 6c 29 29 20 61 73 20 49 56 73 55 49 53 68 65  ll)) as IVsUIShe
12a0: 6c 6c 3b 0a 20 20 20 20 20 20 69 66 20 28 73 68  ll;.      if (sh
12b0: 65 6c 6c 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20  ell != null).   
12c0: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 73 68 65     {.        she
12d0: 6c 6c 2e 55 70 64 61 74 65 44 6f 63 44 61 74 61  ll.UpdateDocData
12e0: 49 73 44 69 72 74 79 46 65 65 64 62 61 63 6b 28  IsDirtyFeedback(
12f0: 64 6f 63 43 6f 6f 6b 69 65 2c 20 28 5f 64 69 72  docCookie, (_dir
1300: 74 79 20 3d 3d 20 74 72 75 65 29 20 3f 20 31 20  ty == true) ? 1 
1310: 3a 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  : 0);.      }.. 
1320: 20 20 20 20 20 2f 2f 20 55 6e 6c 6f 63 6b 20 74       // Unlock t
1330: 68 65 20 64 6f 63 75 6d 65 6e 74 2e 0a 20 20 20  he document..   
1340: 20 20 20 2f 2f 20 4e 6f 74 65 20 74 68 61 74 20     // Note that 
1350: 77 65 20 68 61 76 65 20 74 6f 20 75 6e 6c 6f 63  we have to unloc
1360: 6b 20 74 68 65 20 64 6f 63 75 6d 65 6e 74 20 65  k the document e
1370: 76 65 6e 20 69 66 20 74 68 65 20 70 72 65 76 69  ven if the previ
1380: 6f 75 73 20 63 61 6c 6c 20 66 61 69 6c 65 64 2e  ous call failed.
1390: 0a 20 20 20 20 20 20 72 75 6e 6e 69 6e 67 44 6f  .      runningDo
13a0: 63 54 61 62 6c 65 2e 55 6e 6c 6f 63 6b 44 6f 63  cTable.UnlockDoc
13b0: 75 6d 65 6e 74 28 28 75 69 6e 74 29 5f 56 53 52  ument((uint)_VSR
13c0: 44 54 46 4c 41 47 53 2e 52 44 54 5f 52 65 61 64  DTFLAGS.RDT_Read
13d0: 4c 6f 63 6b 2c 20 64 6f 63 43 6f 6f 6b 69 65 29  Lock, docCookie)
13e0: 3b 0a 0a 20 20 20 20 20 20 2f 2f 20 43 68 65 63  ;..      // Chec
13f0: 6b 20 66 66 20 74 68 65 20 63 61 6c 6c 20 74 6f  k ff the call to
1400: 20 4e 6f 74 69 66 79 44 6f 63 43 68 61 6e 67 65   NotifyDocChange
1410: 64 20 66 61 69 6c 65 64 2e 0a 20 20 20 20 20 20  d failed..      
1420: 2f 2f 45 72 72 6f 72 48 61 6e 64 6c 65 72 2e 54  //ErrorHandler.T
1430: 68 72 6f 77 4f 6e 46 61 69 6c 75 72 65 28 68 72  hrowOnFailure(hr
1440: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 72  );.    }..    #r
1450: 65 67 69 6f 6e 20 49 56 73 50 65 72 73 69 73 74  egion IVsPersist
1460: 44 6f 63 44 61 74 61 20 4d 65 6d 62 65 72 73 0a  DocData Members.
1470: 0a 20 20 20 20 69 6e 74 20 49 56 73 50 65 72 73  .    int IVsPers
1480: 69 73 74 44 6f 63 44 61 74 61 2e 43 6c 6f 73 65  istDocData.Close
1490: 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72  ().    {.      r
14a0: 65 74 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74  eturn VSConstant
14b0: 73 2e 53 5f 4f 4b 3b 0a 20 20 20 20 7d 0a 0a 20  s.S_OK;.    }.. 
14c0: 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 47 65     public int Ge
14d0: 74 47 75 69 64 45 64 69 74 6f 72 54 79 70 65 28  tGuidEditorType(
14e0: 6f 75 74 20 47 75 69 64 20 70 43 6c 61 73 73 49  out Guid pClassI
14f0: 44 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72  D).    {.      r
1500: 65 74 75 72 6e 20 28 28 49 50 65 72 73 69 73 74  eturn ((IPersist
1510: 46 69 6c 65 46 6f 72 6d 61 74 29 74 68 69 73 29  FileFormat)this)
1520: 2e 47 65 74 43 6c 61 73 73 49 44 28 6f 75 74 20  .GetClassID(out 
1530: 70 43 6c 61 73 73 49 44 29 3b 0a 20 20 20 20 7d  pClassID);.    }
1540: 0a 0a 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74  ..    public int
1550: 20 49 73 44 6f 63 44 61 74 61 44 69 72 74 79 28   IsDocDataDirty(
1560: 6f 75 74 20 69 6e 74 20 70 66 44 69 72 74 79 29  out int pfDirty)
1570: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 70 66 44  .    {.      pfD
1580: 69 72 74 79 20 3d 20 5f 64 69 72 74 79 20 3d 3d  irty = _dirty ==
1590: 20 74 72 75 65 20 3f 20 31 20 3a 20 30 3b 0a 20   true ? 1 : 0;. 
15a0: 20 20 20 20 20 72 65 74 75 72 6e 20 56 53 43 6f       return VSCo
15b0: 6e 73 74 61 6e 74 73 2e 53 5f 4f 4b 3b 0a 20 20  nstants.S_OK;.  
15c0: 20 20 7d 0a 0a 20 20 20 20 70 75 62 6c 69 63 20    }..    public 
15d0: 69 6e 74 20 49 73 44 6f 63 44 61 74 61 52 65 6c  int IsDocDataRel
15e0: 6f 61 64 61 62 6c 65 28 6f 75 74 20 69 6e 74 20  oadable(out int 
15f0: 70 66 52 65 6c 6f 61 64 61 62 6c 65 29 0a 20 20  pfReloadable).  
1600: 20 20 7b 0a 20 20 20 20 20 20 70 66 52 65 6c 6f    {.      pfRelo
1610: 61 64 61 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20  adable = 0;.    
1620: 20 20 72 65 74 75 72 6e 20 56 53 43 6f 6e 73 74    return VSConst
1630: 61 6e 74 73 2e 53 5f 4f 4b 3b 0a 20 20 20 20 7d  ants.S_OK;.    }
1640: 0a 0a 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74  ..    public int
1650: 20 4c 6f 61 64 44 6f 63 44 61 74 61 28 73 74 72   LoadDocData(str
1660: 69 6e 67 20 70 73 7a 4d 6b 44 6f 63 75 6d 65 6e  ing pszMkDocumen
1670: 74 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72  t).    {.      r
1680: 65 74 75 72 6e 20 28 28 49 50 65 72 73 69 73 74  eturn ((IPersist
1690: 46 69 6c 65 46 6f 72 6d 61 74 29 74 68 69 73 29  FileFormat)this)
16a0: 2e 4c 6f 61 64 28 70 73 7a 4d 6b 44 6f 63 75 6d  .Load(pszMkDocum
16b0: 65 6e 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  ent, 0, 0);.    
16c0: 7d 0a 0a 20 20 20 20 70 75 62 6c 69 63 20 69 6e  }..    public in
16d0: 74 20 4f 6e 52 65 67 69 73 74 65 72 44 6f 63 44  t OnRegisterDocD
16e0: 61 74 61 28 75 69 6e 74 20 64 6f 63 43 6f 6f 6b  ata(uint docCook
16f0: 69 65 2c 20 49 56 73 48 69 65 72 61 72 63 68 79  ie, IVsHierarchy
1700: 20 70 48 69 65 72 4e 65 77 2c 20 75 69 6e 74 20   pHierNew, uint 
1710: 69 74 65 6d 69 64 4e 65 77 29 0a 20 20 20 20 7b  itemidNew).    {
1720: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 56 53  .      return VS
1730: 43 6f 6e 73 74 61 6e 74 73 2e 53 5f 4f 4b 3b 0a  Constants.S_OK;.
1740: 20 20 20 20 7d 0a 0a 20 20 20 20 70 75 62 6c 69      }..    publi
1750: 63 20 69 6e 74 20 52 65 6c 6f 61 64 44 6f 63 44  c int ReloadDocD
1760: 61 74 61 28 75 69 6e 74 20 67 72 66 46 6c 61 67  ata(uint grfFlag
1770: 73 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72  s).    {.      r
1780: 65 74 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74  eturn VSConstant
1790: 73 2e 45 5f 4e 4f 54 49 4d 50 4c 3b 0a 20 20 20  s.E_NOTIMPL;.   
17a0: 20 7d 0a 0a 20 20 20 20 70 75 62 6c 69 63 20 69   }..    public i
17b0: 6e 74 20 52 65 6e 61 6d 65 44 6f 63 44 61 74 61  nt RenameDocData
17c0: 28 75 69 6e 74 20 67 72 66 41 74 74 72 69 62 73  (uint grfAttribs
17d0: 2c 20 49 56 73 48 69 65 72 61 72 63 68 79 20 70  , IVsHierarchy p
17e0: 48 69 65 72 4e 65 77 2c 20 75 69 6e 74 20 69 74  HierNew, uint it
17f0: 65 6d 69 64 4e 65 77 2c 20 73 74 72 69 6e 67 20  emidNew, string 
1800: 70 73 7a 4d 6b 44 6f 63 75 6d 65 6e 74 4e 65 77  pszMkDocumentNew
1810: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65  ).    {.      re
1820: 74 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74 73  turn VSConstants
1830: 2e 45 5f 4e 4f 54 49 4d 50 4c 3b 0a 20 20 20 20  .E_NOTIMPL;.    
1840: 7d 0a 0a 20 20 20 20 70 72 69 76 61 74 65 20 73  }..    private s
1850: 74 72 69 6e 67 20 47 65 74 43 68 61 6e 67 65 53  tring GetChangeS
1860: 63 72 69 70 74 28 29 0a 20 20 20 20 7b 0a 20 20  cript().    {.  
1870: 20 20 20 20 5f 64 61 74 61 47 72 69 64 2e 45 6e      _dataGrid.En
1880: 64 45 64 69 74 28 29 3b 0a 20 20 20 20 20 20 5f  dEdit();.      _
1890: 69 6e 69 74 20 3d 20 74 72 75 65 3b 0a 20 20 20  init = true;.   
18a0: 20 20 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20     for (int n = 
18b0: 30 3b 20 6e 20 3c 20 5f 74 61 62 6c 65 2e 43 6f  0; n < _table.Co
18c0: 6c 75 6d 6e 73 2e 43 6f 75 6e 74 3b 20 6e 2b 2b  lumns.Count; n++
18d0: 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20  ).      {.      
18e0: 20 20 43 6f 6c 75 6d 6e 20 63 20 3d 20 5f 74 61    Column c = _ta
18f0: 62 6c 65 2e 43 6f 6c 75 6d 6e 73 5b 6e 5d 3b 0a  ble.Columns[n];.
1900: 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
1910: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
1920: 28 63 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 29 20 3d  (c.ColumnName) =
1930: 3d 20 74 72 75 65 29 0a 20 20 20 20 20 20 20 20  = true).        
1940: 7b 0a 20 20 20 20 20 20 20 20 20 20 74 72 79 0a  {.          try.
1950: 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20            {.    
1960: 20 20 20 20 20 20 20 20 5f 64 61 74 61 47 72 69          _dataGri
1970: 64 2e 52 6f 77 73 2e 52 65 6d 6f 76 65 28 63 2e  d.Rows.Remove(c.
1980: 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 20 20 20  Parent);.       
1990: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 63     }.          c
19a0: 61 74 63 68 0a 20 20 20 20 20 20 20 20 20 20 7b  atch.          {
19b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 2e 50  .            c.P
19c0: 61 72 65 6e 74 2e 54 61 67 20 3d 20 6e 75 6c 6c  arent.Tag = null
19d0: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
19e0: 20 20 20 20 20 20 20 20 5f 74 61 62 6c 65 2e 43          _table.C
19f0: 6f 6c 75 6d 6e 73 2e 52 65 6d 6f 76 65 28 63 29  olumns.Remove(c)
1a00: 3b 0a 20 20 20 20 20 20 20 20 20 20 6e 2d 2d 3b  ;.          n--;
1a10: 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69  .          conti
1a20: 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  nue;.        }. 
1a30: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 66 6f       }..      fo
1a40: 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20  r (int n = 0; n 
1a50: 3c 20 5f 64 61 74 61 47 72 69 64 2e 52 6f 77 73  < _dataGrid.Rows
1a60: 2e 43 6f 75 6e 74 3b 20 6e 2b 2b 29 0a 20 20 20  .Count; n++).   
1a70: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20     {.        if 
1a80: 28 28 5f 64 61 74 61 47 72 69 64 2e 52 6f 77 73  ((_dataGrid.Rows
1a90: 5b 6e 5d 2e 54 61 67 20 69 73 20 43 6f 6c 75 6d  [n].Tag is Colum
1aa0: 6e 29 20 3d 3d 20 66 61 6c 73 65 29 0a 20 20 20  n) == false).   
1ab0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
1ac0: 20 74 72 79 0a 20 20 20 20 20 20 20 20 20 20 7b   try.          {
1ad0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 64 61  .            _da
1ae0: 74 61 47 72 69 64 2e 52 6f 77 73 2e 52 65 6d 6f  taGrid.Rows.Remo
1af0: 76 65 41 74 28 6e 29 3b 0a 20 20 20 20 20 20 20  veAt(n);.       
1b00: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 63     }.          c
1b10: 61 74 63 68 0a 20 20 20 20 20 20 20 20 20 20 7b  atch.          {
1b20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1b30: 28 6e 20 3d 3d 20 5f 64 61 74 61 47 72 69 64 2e  (n == _dataGrid.
1b40: 52 6f 77 73 2e 43 6f 75 6e 74 20 2d 20 31 29 20  Rows.Count - 1) 
1b50: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20  break;.         
1b60: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 6e 2d 2d   }.          n--
1b70: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1b80: 20 20 7d 0a 20 20 20 20 20 20 5f 69 6e 69 74 20    }.      _init 
1b90: 3d 20 66 61 6c 73 65 3b 0a 0a 20 20 20 20 20 20  = false;..      
1ba0: 72 65 74 75 72 6e 20 5f 74 61 62 6c 65 2e 47 65  return _table.Ge
1bb0: 74 53 71 6c 28 29 3b 0a 20 20 20 20 7d 0a 0a 20  tSql();.    }.. 
1bc0: 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 53 61     public int Sa
1bd0: 76 65 44 6f 63 44 61 74 61 28 56 53 53 41 56 45  veDocData(VSSAVE
1be0: 46 4c 41 47 53 20 64 77 53 61 76 65 2c 20 6f 75  FLAGS dwSave, ou
1bf0: 74 20 73 74 72 69 6e 67 20 70 62 73 74 72 4d 6b  t string pbstrMk
1c00: 44 6f 63 75 6d 65 6e 74 4e 65 77 2c 20 6f 75 74  DocumentNew, out
1c10: 20 69 6e 74 20 70 66 53 61 76 65 43 61 6e 63 65   int pfSaveCance
1c20: 6c 65 64 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  led).    {.     
1c30: 20 70 62 73 74 72 4d 6b 44 6f 63 75 6d 65 6e 74   pbstrMkDocument
1c40: 4e 65 77 20 3d 20 5f 74 61 62 6c 65 2e 4e 61 6d  New = _table.Nam
1c50: 65 3b 0a 20 20 20 20 20 20 70 66 53 61 76 65 43  e;.      pfSaveC
1c60: 61 6e 63 65 6c 65 64 20 3d 20 30 3b 0a 0a 20 20  anceled = 0;..  
1c70: 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
1c80: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 5f 74 61  sNullOrEmpty(_ta
1c90: 62 6c 65 2e 4f 72 69 67 69 6e 61 6c 53 71 6c 29  ble.OriginalSql)
1ca0: 20 3d 3d 20 74 72 75 65 29 0a 20 20 20 20 20 20   == true).      
1cb0: 7b 0a 20 20 20 20 20 20 20 20 75 73 69 6e 67 20  {.        using 
1cc0: 28 54 61 62 6c 65 4e 61 6d 65 44 69 61 6c 6f 67  (TableNameDialog
1cd0: 20 64 6c 67 20 3d 20 6e 65 77 20 54 61 62 6c 65   dlg = new Table
1ce0: 4e 61 6d 65 44 69 61 6c 6f 67 28 22 54 61 62 6c  NameDialog("Tabl
1cf0: 65 22 2c 20 5f 74 61 62 6c 65 2e 4e 61 6d 65 29  e", _table.Name)
1d00: 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20  ).        {.    
1d10: 20 20 20 20 20 20 69 66 20 28 64 6c 67 2e 53 68        if (dlg.Sh
1d20: 6f 77 44 69 61 6c 6f 67 28 74 68 69 73 29 20 3d  owDialog(this) =
1d30: 3d 20 44 69 61 6c 6f 67 52 65 73 75 6c 74 2e 43  = DialogResult.C
1d40: 61 6e 63 65 6c 29 0a 20 20 20 20 20 20 20 20 20  ancel).         
1d50: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70   {.            p
1d60: 66 53 61 76 65 43 61 6e 63 65 6c 65 64 20 3d 20  fSaveCanceled = 
1d70: 31 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  1;.            r
1d80: 65 74 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74  eturn VSConstant
1d90: 73 2e 53 5f 4f 4b 3b 0a 20 20 20 20 20 20 20 20  s.S_OK;.        
1da0: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 5f 74    }.          _t
1db0: 61 62 6c 65 2e 4e 61 6d 65 20 3d 20 64 6c 67 2e  able.Name = dlg.
1dc0: 54 61 62 6c 65 4e 61 6d 65 3b 0a 20 20 20 20 20  TableName;.     
1dd0: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 20 20     }.      }..  
1de0: 20 20 20 20 73 74 72 69 6e 67 20 73 71 6c 20 3d      string sql =
1df0: 20 47 65 74 43 68 61 6e 67 65 53 63 72 69 70 74   GetChangeScript
1e00: 28 29 3b 0a 0a 20 20 20 20 20 20 75 73 69 6e 67  ();..      using
1e10: 20 28 44 62 54 72 61 6e 73 61 63 74 69 6f 6e 20   (DbTransaction 
1e20: 74 72 61 6e 73 20 3d 20 5f 74 61 62 6c 65 2e 47  trans = _table.G
1e30: 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 29 2e 42  etConnection().B
1e40: 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28  eginTransaction(
1e50: 29 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20  )).      {.     
1e60: 20 20 20 74 72 79 0a 20 20 20 20 20 20 20 20 7b     try.        {
1e70: 0a 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67  .          using
1e80: 20 28 44 62 43 6f 6d 6d 61 6e 64 20 63 6d 64 20   (DbCommand cmd 
1e90: 3d 20 5f 74 61 62 6c 65 2e 47 65 74 43 6f 6e 6e  = _table.GetConn
1ea0: 65 63 74 69 6f 6e 28 29 2e 43 72 65 61 74 65 43  ection().CreateC
1eb0: 6f 6d 6d 61 6e 64 28 29 29 0a 20 20 20 20 20 20  ommand()).      
1ec0: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
1ed0: 20 20 63 6d 64 2e 43 6f 6d 6d 61 6e 64 54 65 78    cmd.CommandTex
1ee0: 74 20 3d 20 73 71 6c 3b 0a 20 20 20 20 20 20 20  t = sql;.       
1ef0: 20 20 20 20 20 63 6d 64 2e 45 78 65 63 75 74 65       cmd.Execute
1f00: 4e 6f 6e 51 75 65 72 79 28 29 3b 0a 20 20 20 20  NonQuery();.    
1f10: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1f20: 20 20 74 72 61 6e 73 2e 43 6f 6d 6d 69 74 28 29    trans.Commit()
1f30: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1f40: 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70      catch (Excep
1f50: 74 69 6f 6e 29 0a 20 20 20 20 20 20 20 20 7b 0a  tion).        {.
1f60: 20 20 20 20 20 20 20 20 20 20 74 72 61 6e 73 2e            trans.
1f70: 52 6f 6c 6c 62 61 63 6b 28 29 3b 0a 20 20 20 20  Rollback();.    
1f80: 20 20 20 20 20 20 74 68 72 6f 77 3b 0a 20 20 20        throw;.   
1f90: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a       }.      }..
1fa0: 20 20 20 20 20 20 5f 64 69 72 74 79 20 3d 20 66        _dirty = f
1fb0: 61 6c 73 65 3b 0a 20 20 20 20 20 20 5f 74 61 62  alse;.      _tab
1fc0: 6c 65 2e 43 6f 6d 6d 69 74 74 65 64 28 29 3b 0a  le.Committed();.
1fd0: 20 20 20 20 20 20 4e 6f 74 69 66 79 43 68 61 6e        NotifyChan
1fe0: 67 65 73 28 29 3b 0a 20 20 20 20 20 20 5f 73 71  ges();.      _sq
1ff0: 6c 54 65 78 74 2e 54 65 78 74 20 3d 20 5f 74 61  lText.Text = _ta
2000: 62 6c 65 2e 4f 72 69 67 69 6e 61 6c 53 71 6c 3b  ble.OriginalSql;
2010: 0a 0a 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f  ..      SQLiteCo
2020: 6d 6d 61 6e 64 48 61 6e 64 6c 65 72 2e 52 65 66  mmandHandler.Ref
2030: 72 65 73 68 28 5f 61 63 63 65 73 73 6f 72 2c 20  resh(_accessor, 
2040: 5f 69 74 65 6d 49 64 29 3b 0a 0a 20 20 20 20 20  _itemId);..     
2050: 20 5f 64 61 74 61 47 72 69 64 5f 53 65 6c 65 63   _dataGrid_Selec
2060: 74 69 6f 6e 43 68 61 6e 67 65 64 28 74 68 69 73  tionChanged(this
2070: 2c 20 45 76 65 6e 74 41 72 67 73 2e 45 6d 70 74  , EventArgs.Empt
2080: 79 29 3b 0a 0a 20 20 20 20 20 20 52 65 66 72 65  y);..      Refre
2090: 73 68 54 6f 6f 6c 62 61 72 73 28 29 3b 0a 0a 20  shToolbars();.. 
20a0: 20 20 20 20 20 72 65 74 75 72 6e 20 56 53 43 6f       return VSCo
20b0: 6e 73 74 61 6e 74 73 2e 53 5f 4f 4b 3b 0a 20 20  nstants.S_OK;.  
20c0: 20 20 7d 0a 0a 20 20 20 20 70 75 62 6c 69 63 20    }..    public 
20d0: 69 6e 74 20 53 65 74 55 6e 74 69 74 6c 65 64 44  int SetUntitledD
20e0: 6f 63 50 61 74 68 28 73 74 72 69 6e 67 20 70 73  ocPath(string ps
20f0: 7a 44 6f 63 44 61 74 61 50 61 74 68 29 0a 20 20  zDocDataPath).  
2100: 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e    {.      return
2110: 20 28 28 49 50 65 72 73 69 73 74 46 69 6c 65 46   ((IPersistFileF
2120: 6f 72 6d 61 74 29 74 68 69 73 29 2e 49 6e 69 74  ormat)this).Init
2130: 4e 65 77 28 30 29 3b 0a 20 20 20 20 7d 0a 0a 20  New(0);.    }.. 
2140: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0a 0a 20     #endregion.. 
2150: 20 20 20 23 72 65 67 69 6f 6e 20 49 56 73 57 69     #region IVsWi
2160: 6e 64 6f 77 50 61 6e 65 20 4d 65 6d 62 65 72 73  ndowPane Members
2170: 0a 0a 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74  ..    public int
2180: 20 43 6c 6f 73 65 50 61 6e 65 28 29 0a 20 20 20   ClosePane().   
2190: 20 7b 0a 20 20 20 20 20 20 74 68 69 73 2e 44 69   {.      this.Di
21a0: 73 70 6f 73 65 28 74 72 75 65 29 3b 0a 20 20 20  spose(true);.   
21b0: 20 20 20 72 65 74 75 72 6e 20 56 53 43 6f 6e 73     return VSCons
21c0: 74 61 6e 74 73 2e 53 5f 4f 4b 3b 0a 20 20 20 20  tants.S_OK;.    
21d0: 7d 0a 0a 20 20 20 20 70 75 62 6c 69 63 20 69 6e  }..    public in
21e0: 74 20 43 72 65 61 74 65 50 61 6e 65 57 69 6e 64  t CreatePaneWind
21f0: 6f 77 28 49 6e 74 50 74 72 20 68 77 6e 64 50 61  ow(IntPtr hwndPa
2200: 72 65 6e 74 2c 20 69 6e 74 20 78 2c 20 69 6e 74  rent, int x, int
2210: 20 79 2c 20 69 6e 74 20 63 78 2c 20 69 6e 74 20   y, int cx, int 
2220: 63 79 2c 20 6f 75 74 20 49 6e 74 50 74 72 20 68  cy, out IntPtr h
2230: 77 6e 64 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  wnd).    {.     
2240: 20 57 69 6e 33 32 4d 65 74 68 6f 64 73 2e 53 65   Win32Methods.Se
2250: 74 50 61 72 65 6e 74 28 48 61 6e 64 6c 65 2c 20  tParent(Handle, 
2260: 68 77 6e 64 50 61 72 65 6e 74 29 3b 0a 20 20 20  hwndParent);.   
2270: 20 20 20 68 77 6e 64 20 3d 20 48 61 6e 64 6c 65     hwnd = Handle
2280: 3b 0a 0a 20 20 20 20 20 20 53 69 7a 65 20 3d 20  ;..      Size = 
2290: 6e 65 77 20 53 79 73 74 65 6d 2e 44 72 61 77 69  new System.Drawi
22a0: 6e 67 2e 53 69 7a 65 28 63 78 20 2d 20 78 2c 20  ng.Size(cx - x, 
22b0: 63 79 20 2d 20 79 29 3b 0a 20 20 20 20 20 20 72  cy - y);.      r
22c0: 65 74 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74  eturn VSConstant
22d0: 73 2e 53 5f 4f 4b 3b 0a 20 20 20 20 7d 0a 0a 20  s.S_OK;.    }.. 
22e0: 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 47 65     public int Ge
22f0: 74 44 65 66 61 75 6c 74 53 69 7a 65 28 4d 69 63  tDefaultSize(Mic
2300: 72 6f 73 6f 66 74 2e 56 69 73 75 61 6c 53 74 75  rosoft.VisualStu
2310: 64 69 6f 2e 4f 4c 45 2e 49 6e 74 65 72 6f 70 2e  dio.OLE.Interop.
2320: 53 49 5a 45 5b 5d 20 73 69 7a 65 29 0a 20 20 20  SIZE[] size).   
2330: 20 7b 0a 20 20 20 20 20 20 69 66 20 28 73 69 7a   {.      if (siz
2340: 65 2e 4c 65 6e 67 74 68 20 3e 3d 20 31 29 0a 20  e.Length >= 1). 
2350: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 73       {.        s
2360: 69 7a 65 5b 30 5d 2e 63 78 20 3d 20 53 69 7a 65  ize[0].cx = Size
2370: 2e 57 69 64 74 68 3b 0a 20 20 20 20 20 20 20 20  .Width;.        
2380: 73 69 7a 65 5b 30 5d 2e 63 79 20 3d 20 53 69 7a  size[0].cy = Siz
2390: 65 2e 48 65 69 67 68 74 3b 0a 20 20 20 20 20 20  e.Height;.      
23a0: 7d 0a 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  }..      return 
23b0: 56 53 43 6f 6e 73 74 61 6e 74 73 2e 53 5f 4f 4b  VSConstants.S_OK
23c0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 75 62  ;.    }..    pub
23d0: 6c 69 63 20 69 6e 74 20 4c 6f 61 64 56 69 65 77  lic int LoadView
23e0: 53 74 61 74 65 28 4d 69 63 72 6f 73 6f 66 74 2e  State(Microsoft.
23f0: 56 69 73 75 61 6c 53 74 75 64 69 6f 2e 4f 4c 45  VisualStudio.OLE
2400: 2e 49 6e 74 65 72 6f 70 2e 49 53 74 72 65 61 6d  .Interop.IStream
2410: 20 70 53 74 72 65 61 6d 29 0a 20 20 20 20 7b 0a   pStream).    {.
2420: 20 20 20 20 20 20 72 65 74 75 72 6e 20 56 53 43        return VSC
2430: 6f 6e 73 74 61 6e 74 73 2e 53 5f 4f 4b 3b 0a 20  onstants.S_OK;. 
2440: 20 20 20 7d 0a 0a 20 20 20 20 70 75 62 6c 69 63     }..    public
2450: 20 69 6e 74 20 53 61 76 65 56 69 65 77 53 74 61   int SaveViewSta
2460: 74 65 28 4d 69 63 72 6f 73 6f 66 74 2e 56 69 73  te(Microsoft.Vis
2470: 75 61 6c 53 74 75 64 69 6f 2e 4f 4c 45 2e 49 6e  ualStudio.OLE.In
2480: 74 65 72 6f 70 2e 49 53 74 72 65 61 6d 20 70 53  terop.IStream pS
2490: 74 72 65 61 6d 29 0a 20 20 20 20 7b 0a 20 20 20  tream).    {.   
24a0: 20 20 20 72 65 74 75 72 6e 20 56 53 43 6f 6e 73     return VSCons
24b0: 74 61 6e 74 73 2e 53 5f 4f 4b 3b 0a 20 20 20 20  tants.S_OK;.    
24c0: 7d 0a 0a 20 20 20 20 70 75 62 6c 69 63 20 76 6f  }..    public vo
24d0: 69 64 20 52 65 66 72 65 73 68 54 6f 6f 6c 62 61  id RefreshToolba
24e0: 72 73 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  rs().    {.     
24f0: 20 69 66 20 28 5f 73 65 72 76 69 63 65 50 72 6f   if (_servicePro
2500: 76 69 64 65 72 20 3d 3d 20 6e 75 6c 6c 29 20 72  vider == null) r
2510: 65 74 75 72 6e 3b 0a 0a 20 20 20 20 20 20 49 56  eturn;..      IV
2520: 73 55 49 53 68 65 6c 6c 20 73 68 65 6c 6c 20 3d  sUIShell shell =
2530: 20 5f 73 65 72 76 69 63 65 50 72 6f 76 69 64 65   _serviceProvide
2540: 72 2e 47 65 74 53 65 72 76 69 63 65 28 74 79 70  r.GetService(typ
2550: 65 6f 66 28 49 56 73 55 49 53 68 65 6c 6c 29 29  eof(IVsUIShell))
2560: 20 61 73 20 49 56 73 55 49 53 68 65 6c 6c 3b 0a   as IVsUIShell;.
2570: 0a 20 20 20 20 20 20 69 66 20 28 73 68 65 6c 6c  .      if (shell
2580: 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20   != null).      
2590: 7b 0a 20 20 20 20 20 20 20 20 73 68 65 6c 6c 2e  {.        shell.
25a0: 55 70 64 61 74 65 43 6f 6d 6d 61 6e 64 55 49 28  UpdateCommandUI(
25b0: 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  1);.      }.    
25c0: 7d 0a 0a 20 20 20 20 70 75 62 6c 69 63 20 69 6e  }..    public in
25d0: 74 20 53 65 74 53 69 74 65 28 4d 69 63 72 6f 73  t SetSite(Micros
25e0: 6f 66 74 2e 56 69 73 75 61 6c 53 74 75 64 69 6f  oft.VisualStudio
25f0: 2e 4f 4c 45 2e 49 6e 74 65 72 6f 70 2e 49 53 65  .OLE.Interop.ISe
2600: 72 76 69 63 65 50 72 6f 76 69 64 65 72 20 70 73  rviceProvider ps
2610: 70 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 5f  p).    {.      _
2620: 73 65 72 76 69 63 65 50 72 6f 76 69 64 65 72 20  serviceProvider 
2630: 3d 20 6e 65 77 20 53 65 72 76 69 63 65 50 72 6f  = new ServicePro
2640: 76 69 64 65 72 28 70 73 70 29 3b 0a 20 20 20 20  vider(psp);.    
2650: 20 20 72 65 74 75 72 6e 20 56 53 43 6f 6e 73 74    return VSConst
2660: 61 6e 74 73 2e 53 5f 4f 4b 3b 0a 20 20 20 20 7d  ants.S_OK;.    }
2670: 0a 0a 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74  ..    public int
2680: 20 54 72 61 6e 73 6c 61 74 65 41 63 63 65 6c 65   TranslateAccele
2690: 72 61 74 6f 72 28 4d 69 63 72 6f 73 6f 66 74 2e  rator(Microsoft.
26a0: 56 69 73 75 61 6c 53 74 75 64 69 6f 2e 4f 4c 45  VisualStudio.OLE
26b0: 2e 49 6e 74 65 72 6f 70 2e 4d 53 47 5b 5d 20 6c  .Interop.MSG[] l
26c0: 70 6d 73 67 29 0a 20 20 20 20 7b 0a 20 20 20 20  pmsg).    {.    
26d0: 20 20 72 65 74 75 72 6e 20 56 53 43 6f 6e 73 74    return VSConst
26e0: 61 6e 74 73 2e 53 5f 46 41 4c 53 45 3b 0a 20 20  ants.S_FALSE;.  
26f0: 20 20 7d 0a 0a 20 20 20 20 23 65 6e 64 72 65 67    }..    #endreg
2700: 69 6f 6e 0a 0a 20 20 20 20 70 75 62 6c 69 63 20  ion..    public 
2710: 76 6f 69 64 20 4d 61 6b 65 44 69 72 74 79 28 29  void MakeDirty()
2720: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 5f 64 69  .    {.      _di
2730: 72 74 79 20 3d 20 74 72 75 65 3b 0a 20 20 20 20  rty = true;.    
2740: 20 20 4e 6f 74 69 66 79 43 68 61 6e 67 65 73 28    NotifyChanges(
2750: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72  );.    }..    pr
2760: 69 76 61 74 65 20 62 6f 6f 6c 20 49 73 50 6b 53  ivate bool IsPkS
2770: 65 6c 65 63 74 65 64 28 29 0a 20 20 20 20 7b 0a  elected().    {.
2780: 20 20 20 20 20 20 62 6f 6f 6c 20 6e 65 77 56 61        bool newVa
2790: 6c 20 3d 20 66 61 6c 73 65 3b 0a 20 20 20 20 20  l = false;.     
27a0: 20 66 6f 72 65 61 63 68 20 28 43 6f 6c 75 6d 6e   foreach (Column
27b0: 20 63 20 69 6e 20 5f 70 72 6f 70 65 72 74 79 47   c in _propertyG
27c0: 72 69 64 2e 53 65 6c 65 63 74 65 64 4f 62 6a 65  rid.SelectedObje
27d0: 63 74 73 29 0a 20 20 20 20 20 20 7b 0a 20 20 20  cts).      {.   
27e0: 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 49 6e       foreach (In
27f0: 64 65 78 43 6f 6c 75 6d 6e 20 69 63 20 69 6e 20  dexColumn ic in 
2800: 5f 74 61 62 6c 65 2e 50 72 69 6d 61 72 79 4b 65  _table.PrimaryKe
2810: 79 2e 43 6f 6c 75 6d 6e 73 29 0a 20 20 20 20 20  y.Columns).     
2820: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 69     {.          i
2830: 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72  f (String.Compar
2840: 65 28 63 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20  e(c.ColumnName, 
2850: 69 63 2e 43 6f 6c 75 6d 6e 2c 20 53 74 72 69 6e  ic.Column, Strin
2860: 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
2870: 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d  nalIgnoreCase) =
2880: 3d 20 30 29 0a 20 20 20 20 20 20 20 20 20 20 7b  = 0).          {
2890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77  .            new
28a0: 56 61 6c 20 3d 20 74 72 75 65 3b 0a 20 20 20 20  Val = true;.    
28b0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
28c0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
28d0: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
28e0: 20 20 20 72 65 74 75 72 6e 20 6e 65 77 56 61 6c     return newVal
28f0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 72 65  ;.    }..    #re
2900: 67 69 6f 6e 20 49 4f 6c 65 43 6f 6d 6d 61 6e 64  gion IOleCommand
2910: 54 61 72 67 65 74 20 4d 65 6d 62 65 72 73 0a 0a  Target Members..
2920: 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 45      public int E
2930: 78 65 63 28 72 65 66 20 47 75 69 64 20 70 67 75  xec(ref Guid pgu
2940: 69 64 43 6d 64 47 72 6f 75 70 2c 20 75 69 6e 74  idCmdGroup, uint
2950: 20 6e 43 6d 64 49 44 2c 20 75 69 6e 74 20 6e 43   nCmdID, uint nC
2960: 6d 64 65 78 65 63 6f 70 74 2c 20 49 6e 74 50 74  mdexecopt, IntPt
2970: 72 20 70 76 61 49 6e 2c 20 49 6e 74 50 74 72 20  r pvaIn, IntPtr 
2980: 70 76 61 4f 75 74 29 0a 20 20 20 20 7b 0a 20 20  pvaOut).    {.  
2990: 20 20 20 20 69 66 20 28 70 67 75 69 64 43 6d 64      if (pguidCmd
29a0: 47 72 6f 75 70 20 3d 3d 20 56 53 43 6f 6e 73 74  Group == VSConst
29b0: 61 6e 74 73 2e 47 55 49 44 5f 56 53 53 74 61 6e  ants.GUID_VSStan
29c0: 64 61 72 64 43 6f 6d 6d 61 6e 64 53 65 74 39 37  dardCommandSet97
29d0: 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20  ).      {.      
29e0: 20 20 73 77 69 74 63 68 20 28 28 56 53 43 6f 6e    switch ((VSCon
29f0: 73 74 61 6e 74 73 2e 56 53 53 74 64 39 37 43 6d  stants.VSStd97Cm
2a00: 64 49 44 29 6e 43 6d 64 49 44 29 0a 20 20 20 20  dID)nCmdID).    
2a10: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
2a20: 63 61 73 65 20 56 53 43 6f 6e 73 74 61 6e 74 73  case VSConstants
2a30: 2e 56 53 53 74 64 39 37 43 6d 64 49 44 2e 47 65  .VSStd97CmdID.Ge
2a40: 6e 65 72 61 74 65 43 68 61 6e 67 65 53 63 72 69  nerateChangeScri
2a50: 70 74 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20  pt:.            
2a60: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
2a70: 75 73 69 6e 67 20 28 43 68 61 6e 67 65 53 63 72  using (ChangeScr
2a80: 69 70 74 44 69 61 6c 6f 67 20 64 6c 67 20 3d 20  iptDialog dlg = 
2a90: 6e 65 77 20 43 68 61 6e 67 65 53 63 72 69 70 74  new ChangeScript
2aa0: 44 69 61 6c 6f 67 28 5f 74 61 62 6c 65 2e 4e 61  Dialog(_table.Na
2ab0: 6d 65 2c 20 28 5f 64 69 72 74 79 20 3d 3d 20 74  me, (_dirty == t
2ac0: 72 75 65 29 20 3f 20 47 65 74 43 68 61 6e 67 65  rue) ? GetChange
2ad0: 53 63 72 69 70 74 28 29 20 3a 20 53 74 72 69 6e  Script() : Strin
2ae0: 67 2e 45 6d 70 74 79 2c 20 5f 74 61 62 6c 65 2e  g.Empty, _table.
2af0: 4f 72 69 67 69 6e 61 6c 53 71 6c 29 29 0a 20 20  OriginalSql)).  
2b00: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20              {.  
2b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6c                dl
2b20: 67 2e 53 68 6f 77 44 69 61 6c 6f 67 28 74 68 69  g.ShowDialog(thi
2b30: 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  s);.            
2b40: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
2b50: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  }.            re
2b60: 74 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74 73  turn VSConstants
2b70: 2e 53 5f 4f 4b 3b 0a 20 20 20 20 20 20 20 20 20  .S_OK;.         
2b80: 20 63 61 73 65 20 56 53 43 6f 6e 73 74 61 6e 74   case VSConstant
2b90: 73 2e 56 53 53 74 64 39 37 43 6d 64 49 44 2e 50  s.VSStd97CmdID.P
2ba0: 72 69 6d 61 72 79 4b 65 79 3a 0a 20 20 20 20 20  rimaryKey:.     
2bb0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 65 77 56         bool newV
2bc0: 61 6c 20 3d 20 49 73 50 6b 53 65 6c 65 63 74 65  al = IsPkSelecte
2bd0: 64 28 29 3b 0a 0a 20 20 20 20 20 20 20 20 20 20  d();..          
2be0: 20 20 69 66 20 28 6e 65 77 56 61 6c 20 3d 3d 20    if (newVal == 
2bf0: 66 61 6c 73 65 29 0a 20 20 20 20 20 20 20 20 20  false).         
2c00: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
2c10: 20 20 20 5f 74 61 62 6c 65 2e 50 72 69 6d 61 72     _table.Primar
2c20: 79 4b 65 79 2e 43 6f 6c 75 6d 6e 73 2e 43 6c 65  yKey.Columns.Cle
2c30: 61 72 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ar();.          
2c40: 20 20 20 20 66 6f 72 65 61 63 68 20 28 43 6f 6c      foreach (Col
2c50: 75 6d 6e 20 63 20 69 6e 20 5f 70 72 6f 70 65 72  umn c in _proper
2c60: 74 79 47 72 69 64 2e 53 65 6c 65 63 74 65 64 4f  tyGrid.SelectedO
2c70: 62 6a 65 63 74 73 29 0a 20 20 20 20 20 20 20 20  bjects).        
2c80: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
2c90: 20 20 20 20 20 20 20 20 49 6e 64 65 78 43 6f 6c          IndexCol
2ca0: 75 6d 6e 20 6e 65 77 63 6f 6c 20 3d 20 6e 65 77  umn newcol = new
2cb0: 20 49 6e 64 65 78 43 6f 6c 75 6d 6e 28 5f 74 61   IndexColumn(_ta
2cc0: 62 6c 65 2e 50 72 69 6d 61 72 79 4b 65 79 2c 20  ble.PrimaryKey, 
2cd0: 6e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20 20  null);.         
2ce0: 20 20 20 20 20 20 20 6e 65 77 63 6f 6c 2e 43 6f         newcol.Co
2cf0: 6c 75 6d 6e 20 3d 20 63 2e 43 6f 6c 75 6d 6e 4e  lumn = c.ColumnN
2d00: 61 6d 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20  ame;.           
2d10: 20 20 20 20 20 5f 74 61 62 6c 65 2e 50 72 69 6d       _table.Prim
2d20: 61 72 79 4b 65 79 2e 43 6f 6c 75 6d 6e 73 2e 41  aryKey.Columns.A
2d30: 64 64 28 6e 65 77 63 6f 6c 29 3b 0a 20 20 20 20  dd(newcol);.    
2d40: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
2d50: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2d60: 20 20 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20        else.     
2d70: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
2d80: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
2d90: 43 6f 6c 75 6d 6e 20 63 20 69 6e 20 5f 70 72 6f  Column c in _pro
2da0: 70 65 72 74 79 47 72 69 64 2e 53 65 6c 65 63 74  pertyGrid.Select
2db0: 65 64 4f 62 6a 65 63 74 73 29 0a 20 20 20 20 20  edObjects).     
2dc0: 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20           {.     
2dd0: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
2de0: 63 68 20 28 49 6e 64 65 78 43 6f 6c 75 6d 6e 20  ch (IndexColumn 
2df0: 69 63 20 69 6e 20 5f 74 61 62 6c 65 2e 50 72 69  ic in _table.Pri
2e00: 6d 61 72 79 4b 65 79 2e 43 6f 6c 75 6d 6e 73 29  maryKey.Columns)
2e10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e20: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
2e30: 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
2e40: 43 6f 6d 70 61 72 65 28 63 2e 43 6f 6c 75 6d 6e  Compare(c.Column
2e50: 4e 61 6d 65 2c 20 69 63 2e 43 6f 6c 75 6d 6e 2c  Name, ic.Column,
2e60: 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
2e70: 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43  n.OrdinalIgnoreC
2e80: 61 73 65 29 20 3d 3d 20 30 29 0a 20 20 20 20 20  ase) == 0).     
2e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20               {. 
2ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eb0: 20 20 20 5f 74 61 62 6c 65 2e 50 72 69 6d 61 72     _table.Primar
2ec0: 79 4b 65 79 2e 43 6f 6c 75 6d 6e 73 2e 52 65 6d  yKey.Columns.Rem
2ed0: 6f 76 65 28 69 63 29 3b 0a 20 20 20 20 20 20 20  ove(ic);.       
2ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
2ef0: 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ak;.            
2f00: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
2f10: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2f20: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2f30: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20        }..       
2f40: 20 20 20 20 20 5f 64 61 74 61 47 72 69 64 5f 53       _dataGrid_S
2f50: 65 6c 65 63 74 69 6f 6e 43 68 61 6e 67 65 64 28  electionChanged(
2f60: 74 68 69 73 2c 20 45 76 65 6e 74 41 72 67 73 2e  this, EventArgs.
2f70: 45 6d 70 74 79 29 3b 0a 20 20 20 20 20 20 20 20  Empty);.        
2f80: 20 20 20 20 5f 64 61 74 61 47 72 69 64 2e 49 6e      _dataGrid.In
2f90: 76 61 6c 69 64 61 74 65 28 29 3b 0a 20 20 20 20  validate();.    
2fa0: 20 20 20 20 20 20 20 20 4d 61 6b 65 44 69 72 74          MakeDirt
2fb0: 79 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  y();.           
2fc0: 20 72 65 74 75 72 6e 20 56 53 43 6f 6e 73 74 61   return VSConsta
2fd0: 6e 74 73 2e 53 5f 4f 4b 3b 0a 0a 20 20 20 20 20  nts.S_OK;..     
2fe0: 20 20 20 20 20 63 61 73 65 20 56 53 43 6f 6e 73       case VSCons
2ff0: 74 61 6e 74 73 2e 56 53 53 74 64 39 37 43 6d 64  tants.VSStd97Cmd
3000: 49 44 2e 43 75 74 3a 0a 20 20 20 20 20 20 20 20  ID.Cut:.        
3010: 20 20 20 20 5f 63 6c 69 70 52 6f 77 73 20 3d 20      _clipRows = 
3020: 53 65 6c 65 63 74 65 64 52 6f 77 73 3b 0a 20 20  SelectedRows;.  
3030: 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
3040: 68 20 28 44 61 74 61 47 72 69 64 56 69 65 77 52  h (DataGridViewR
3050: 6f 77 20 72 6f 77 20 69 6e 20 5f 63 6c 69 70 52  ow row in _clipR
3060: 6f 77 73 29 0a 20 20 20 20 20 20 20 20 20 20 20  ows).           
3070: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
3080: 20 5f 64 61 74 61 47 72 69 64 2e 52 6f 77 73 2e   _dataGrid.Rows.
3090: 52 65 6d 6f 76 65 28 72 6f 77 29 3b 0a 20 20 20  Remove(row);.   
30a0: 20 20 20 20 20 20 20 20 20 20 20 5f 74 61 62 6c             _tabl
30b0: 65 2e 43 6f 6c 75 6d 6e 73 2e 52 65 6d 6f 76 65  e.Columns.Remove
30c0: 28 72 6f 77 2e 54 61 67 20 61 73 20 43 6f 6c 75  (row.Tag as Colu
30d0: 6d 6e 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  mn);.           
30e0: 20 20 20 4d 61 6b 65 44 69 72 74 79 28 29 3b 0a     MakeDirty();.
30f0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
3100: 20 20 20 20 20 20 20 20 20 20 43 6c 69 70 62 6f            Clipbo
3110: 61 72 64 2e 53 65 74 44 61 74 61 28 22 53 51 4c  ard.SetData("SQL
3120: 69 74 65 54 61 62 6c 65 44 65 73 69 67 6e 65 72  iteTableDesigner
3130: 22 2c 20 43 61 70 74 69 6f 6e 29 3b 0a 20 20 20  ", Caption);.   
3140: 20 20 20 20 20 20 20 20 20 52 65 66 72 65 73 68           Refresh
3150: 54 6f 6f 6c 62 61 72 73 28 29 3b 0a 20 20 20 20  Toolbars();.    
3160: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 56          return V
3170: 53 43 6f 6e 73 74 61 6e 74 73 2e 53 5f 4f 4b 3b  SConstants.S_OK;
3180: 0a 0a 20 20 20 20 20 20 20 20 20 20 63 61 73 65  ..          case
3190: 20 56 53 43 6f 6e 73 74 61 6e 74 73 2e 56 53 53   VSConstants.VSS
31a0: 74 64 39 37 43 6d 64 49 44 2e 43 6f 70 79 3a 0a  td97CmdID.Copy:.
31b0: 20 20 20 20 20 20 20 20 20 20 20 20 5f 63 6c 69              _cli
31c0: 70 52 6f 77 73 20 3d 20 53 65 6c 65 63 74 65 64  pRows = Selected
31d0: 52 6f 77 73 3b 0a 20 20 20 20 20 20 20 20 20 20  Rows;.          
31e0: 20 20 43 6c 69 70 62 6f 61 72 64 2e 53 65 74 44    Clipboard.SetD
31f0: 61 74 61 28 22 53 51 4c 69 74 65 54 61 62 6c 65  ata("SQLiteTable
3200: 44 65 73 69 67 6e 65 72 22 2c 20 43 61 70 74 69  Designer", Capti
3210: 6f 6e 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  on);.           
3220: 20 52 65 66 72 65 73 68 54 6f 6f 6c 62 61 72 73   RefreshToolbars
3230: 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ();.            
3240: 72 65 74 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e  return VSConstan
3250: 74 73 2e 53 5f 4f 4b 3b 0a 0a 20 20 20 20 20 20  ts.S_OK;..      
3260: 20 20 20 20 63 61 73 65 20 56 53 43 6f 6e 73 74      case VSConst
3270: 61 6e 74 73 2e 56 53 53 74 64 39 37 43 6d 64 49  ants.VSStd97CmdI
3280: 44 2e 50 61 73 74 65 3a 0a 20 20 20 20 20 20 20  D.Paste:.       
3290: 20 20 20 20 20 44 61 74 61 47 72 69 64 56 69 65       DataGridVie
32a0: 77 52 6f 77 5b 5d 20 61 72 72 20 3d 20 47 65 74  wRow[] arr = Get
32b0: 43 6c 69 70 62 6f 61 72 64 52 6f 77 73 28 29 3b  ClipboardRows();
32c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
32d0: 20 72 6f 77 49 6e 64 65 78 20 3d 20 5f 64 61 74   rowIndex = _dat
32e0: 61 47 72 69 64 2e 43 75 72 72 65 6e 74 52 6f 77  aGrid.CurrentRow
32f0: 2e 49 6e 64 65 78 3b 0a 20 20 20 20 20 20 20 20  .Index;.        
3300: 20 20 20 20 5f 64 61 74 61 47 72 69 64 2e 45 6e      _dataGrid.En
3310: 64 45 64 69 74 28 29 3b 0a 0a 20 20 20 20 20 20  dEdit();..      
3320: 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 6e        for (int n
3330: 20 3d 20 61 72 72 2e 4c 65 6e 67 74 68 20 2d 20   = arr.Length - 
3340: 31 3b 20 6e 20 3e 20 2d 31 3b 20 6e 2d 2d 29 0a  1; n > -1; n--).
3350: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20              {.  
3360: 20 20 20 20 20 20 20 20 20 20 20 20 44 61 74 61              Data
3370: 47 72 69 64 56 69 65 77 52 6f 77 20 72 6f 77 20  GridViewRow row 
3380: 3d 20 61 72 72 5b 6e 5d 3b 0a 20 20 20 20 20 20  = arr[n];.      
3390: 20 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20 63          Column c
33a0: 20 3d 20 72 6f 77 2e 54 61 67 20 61 73 20 43 6f   = row.Tag as Co
33b0: 6c 75 6d 6e 3b 0a 20 20 20 20 20 20 20 20 20 20  lumn;.          
33c0: 20 20 20 20 62 6f 6f 6c 20 68 61 73 43 6f 6c 20      bool hasCol 
33d0: 3d 20 66 61 6c 73 65 3b 0a 20 20 20 20 20 20 20  = false;.       
33e0: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
33f0: 43 6f 6c 75 6d 6e 20 6f 63 20 69 6e 20 5f 74 61  Column oc in _ta
3400: 62 6c 65 2e 43 6f 6c 75 6d 6e 73 29 0a 20 20 20  ble.Columns).   
3410: 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20             {.   
3420: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
3430: 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28  (String.Compare(
3440: 63 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 6f 63  c.ColumnName, oc
3450: 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 53 74 72  .ColumnName, Str
3460: 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
3470: 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29  dinalIgnoreCase)
3480: 20 3d 3d 20 30 29 0a 20 20 20 20 20 20 20 20 20   == 0).         
3490: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
34a0: 20 20 20 20 20 20 20 20 20 20 20 68 61 73 43 6f             hasCo
34b0: 6c 20 3d 20 74 72 75 65 3b 0a 20 20 20 20 20 20  l = true;.      
34c0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
34d0: 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  k;.             
34e0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
34f0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
3500: 20 20 20 5f 64 61 74 61 47 72 69 64 2e 52 6f 77     _dataGrid.Row
3510: 73 2e 49 6e 73 65 72 74 28 72 6f 77 49 6e 64 65  s.Insert(rowInde
3520: 78 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20  x, 1);.         
3530: 20 20 20 20 20 44 61 74 61 47 72 69 64 56 69 65       DataGridVie
3540: 77 52 6f 77 20 6e 65 77 72 6f 77 20 3d 20 5f 64  wRow newrow = _d
3550: 61 74 61 47 72 69 64 2e 52 6f 77 73 5b 72 6f 77  ataGrid.Rows[row
3560: 49 6e 64 65 78 5d 3b 0a 0a 20 20 20 20 20 20 20  Index];..       
3570: 20 20 20 20 20 20 20 69 66 20 28 68 61 73 43 6f         if (hasCo
3580: 6c 20 3d 3d 20 74 72 75 65 29 0a 20 20 20 20 20  l == true).     
3590: 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20           {.     
35a0: 20 20 20 20 20 20 20 20 20 20 20 43 6f 6c 75 6d             Colum
35b0: 6e 20 6f 63 20 3d 20 63 3b 0a 20 20 20 20 20 20  n oc = c;.      
35c0: 20 20 20 20 20 20 20 20 20 20 63 20 3d 20 6e 65            c = ne
35d0: 77 20 43 6f 6c 75 6d 6e 28 5f 74 61 62 6c 65 2c  w Column(_table,
35e0: 20 6e 65 77 72 6f 77 29 3b 0a 20 20 20 20 20 20   newrow);.      
35f0: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e 75            int nu
3600: 6d 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20  m = 1;.         
3610: 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 53 74         while (St
3620: 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
3630: 74 79 28 63 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 29  ty(c.ColumnName)
3640: 20 3d 3d 20 74 72 75 65 29 0a 20 20 20 20 20 20   == true).      
3650: 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20            {.    
3660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
3670: 6f 6c 20 66 6f 75 6e 64 20 3d 20 66 61 6c 73 65  ol found = false
3680: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
3690: 20 20 20 20 73 74 72 69 6e 67 20 70 72 6f 70 6f      string propo
36a0: 73 65 64 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  sed = String.For
36b0: 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e  mat(CultureInfo.
36c0: 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
36d0: 2c 20 22 7b 30 7d 7b 31 7d 22 2c 20 6f 63 2e 43  , "{0}{1}", oc.C
36e0: 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 6e 75 6d 29 3b  olumnName, num);
36f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3700: 20 20 20 66 6f 72 65 61 63 68 20 28 43 6f 6c 75     foreach (Colu
3710: 6d 6e 20 63 63 20 69 6e 20 5f 74 61 62 6c 65 2e  mn cc in _table.
3720: 43 6f 6c 75 6d 6e 73 29 0a 20 20 20 20 20 20 20  Columns).       
3730: 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20             {.   
3740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3750: 20 69 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70   if (String.Comp
3760: 61 72 65 28 63 63 2e 43 6f 6c 75 6d 6e 4e 61 6d  are(cc.ColumnNam
3770: 65 2c 20 70 72 6f 70 6f 73 65 64 2c 20 53 74 72  e, proposed, Str
3780: 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
3790: 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29  dinalIgnoreCase)
37a0: 20 3d 3d 20 30 29 0a 20 20 20 20 20 20 20 20 20   == 0).         
37b0: 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20             {.   
37c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37d0: 20 20 20 66 6f 75 6e 64 20 3d 20 74 72 75 65 3b     found = true;
37e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37f0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
3800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3810: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
3820: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
3830: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 6f            if (fo
3840: 75 6e 64 20 3d 3d 20 74 72 75 65 29 0a 20 20 20  und == true).   
3850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
3860: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3870: 20 20 20 20 20 6e 75 6d 2b 2b 3b 0a 20 20 20 20       num++;.    
3880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
3890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38a0: 20 20 65 6c 73 65 0a 20 20 20 20 20 20 20 20 20    else.         
38b0: 20 20 20 20 20 20 20 20 20 20 20 63 2e 43 6f 6c             c.Col
38c0: 75 6d 6e 4e 61 6d 65 20 3d 20 70 72 6f 70 6f 73  umnName = propos
38d0: 65 64 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ed;.            
38e0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
38f0: 20 20 20 20 20 20 63 2e 41 6c 6c 6f 77 4e 75 6c        c.AllowNul
3900: 6c 73 20 3d 20 6f 63 2e 41 6c 6c 6f 77 4e 75 6c  ls = oc.AllowNul
3910: 6c 73 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ls;.            
3920: 20 20 20 20 63 2e 43 6f 6c 6c 61 74 65 20 3d 20      c.Collate = 
3930: 6f 63 2e 43 6f 6c 6c 61 74 65 3b 0a 20 20 20 20  oc.Collate;.    
3940: 20 20 20 20 20 20 20 20 20 20 20 20 63 2e 44 61              c.Da
3950: 74 61 54 79 70 65 20 3d 20 6f 63 2e 44 61 74 61  taType = oc.Data
3960: 54 79 70 65 3b 0a 20 20 20 20 20 20 20 20 20 20  Type;.          
3970: 20 20 20 20 20 20 63 2e 44 65 66 61 75 6c 74 56        c.DefaultV
3980: 61 6c 75 65 20 3d 20 6f 63 2e 44 65 66 61 75 6c  alue = oc.Defaul
3990: 74 56 61 6c 75 65 3b 0a 20 20 20 20 20 20 20 20  tValue;.        
39a0: 20 20 20 20 20 20 20 20 63 2e 55 6e 69 71 75 65          c.Unique
39b0: 2e 45 6e 61 62 6c 65 64 20 3d 20 6f 63 2e 55 6e  .Enabled = oc.Un
39c0: 69 71 75 65 2e 45 6e 61 62 6c 65 64 3b 0a 20 20  ique.Enabled;.  
39d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 2e                c.
39e0: 55 6e 69 71 75 65 2e 43 6f 6e 66 6c 69 63 74 20  Unique.Conflict 
39f0: 3d 20 6f 63 2e 55 6e 69 71 75 65 2e 43 6f 6e 66  = oc.Unique.Conf
3a00: 6c 69 63 74 3b 0a 20 20 20 20 20 20 20 20 20 20  lict;.          
3a10: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 20      }..         
3a20: 20 20 20 20 20 63 2e 50 61 72 65 6e 74 20 3d 20       c.Parent = 
3a30: 6e 65 77 72 6f 77 3b 0a 20 20 20 20 20 20 20 20  newrow;.        
3a40: 20 20 20 20 20 20 6e 65 77 72 6f 77 2e 54 61 67        newrow.Tag
3a50: 20 3d 20 63 3b 0a 20 20 20 20 20 20 20 20 20 20   = c;.          
3a60: 20 20 20 20 6e 65 77 72 6f 77 2e 53 65 74 56 61      newrow.SetVa
3a70: 6c 75 65 73 28 63 2e 43 6f 6c 75 6d 6e 4e 61 6d  lues(c.ColumnNam
3a80: 65 2c 20 63 2e 44 61 74 61 54 79 70 65 2c 20 63  e, c.DataType, c
3a90: 2e 41 6c 6c 6f 77 4e 75 6c 6c 73 29 3b 0a 20 20  .AllowNulls);.  
3aa0: 20 20 20 20 20 20 20 20 20 20 20 20 5f 74 61 62              _tab
3ab0: 6c 65 2e 43 6f 6c 75 6d 6e 73 2e 49 6e 73 65 72  le.Columns.Inser
3ac0: 74 28 72 6f 77 49 6e 64 65 78 2c 20 63 29 3b 0a  t(rowIndex, c);.
3ad0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
3ae0: 20 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 20            .     
3af0: 20 20 20 20 20 20 20 4d 61 6b 65 44 69 72 74 79         MakeDirty
3b00: 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ();.            
3b10: 5f 64 61 74 61 47 72 69 64 2e 49 6e 76 61 6c 69  _dataGrid.Invali
3b20: 64 61 74 65 28 29 3b 0a 0a 20 20 20 20 20 20 20  date();..       
3b30: 20 20 20 20 20 72 65 74 75 72 6e 20 56 53 43 6f       return VSCo
3b40: 6e 73 74 61 6e 74 73 2e 53 5f 4f 4b 3b 0a 20 20  nstants.S_OK;.  
3b50: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
3b60: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 70        else if (p
3b70: 67 75 69 64 43 6d 64 47 72 6f 75 70 20 3d 3d 20  guidCmdGroup == 
3b80: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 48 61 6e  SQLiteCommandHan
3b90: 64 6c 65 72 2e 67 75 69 64 44 61 76 69 6e 63 69  dler.guidDavinci
3ba0: 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20  ).      {.      
3bb0: 20 20 73 77 69 74 63 68 20 28 28 56 53 43 6f 6e    switch ((VSCon
3bc0: 73 74 61 6e 74 73 2e 56 53 53 74 64 39 37 43 6d  stants.VSStd97Cm
3bd0: 64 49 44 29 6e 43 6d 64 49 44 29 0a 20 20 20 20  dID)nCmdID).    
3be0: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
3bf0: 63 61 73 65 20 56 53 43 6f 6e 73 74 61 6e 74 73  case VSConstants
3c00: 2e 56 53 53 74 64 39 37 43 6d 64 49 44 2e 4d 61  .VSStd97CmdID.Ma
3c10: 6e 61 67 65 49 6e 64 65 78 65 73 3a 0a 20 20 20  nageIndexes:.   
3c20: 20 20 20 20 20 20 20 20 20 45 64 69 74 6f 72 48           EditorH
3c30: 6f 6c 64 65 72 20 68 6f 6c 64 65 72 20 3d 20 6e  older holder = n
3c40: 65 77 20 45 64 69 74 6f 72 48 6f 6c 64 65 72 28  ew EditorHolder(
3c50: 5f 74 61 62 6c 65 29 3b 0a 20 20 20 20 20 20 20  _table);.       
3c60: 20 20 20 20 20 5f 70 67 2e 53 65 6c 65 63 74 65       _pg.Selecte
3c70: 64 4f 62 6a 65 63 74 20 3d 20 68 6f 6c 64 65 72  dObject = holder
3c80: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 70  ;.            _p
3c90: 67 2e 53 65 6c 65 63 74 65 64 47 72 69 64 49 74  g.SelectedGridIt
3ca0: 65 6d 20 3d 20 5f 70 67 2e 53 65 6c 65 63 74 65  em = _pg.Selecte
3cb0: 64 47 72 69 64 49 74 65 6d 2e 50 61 72 65 6e 74  dGridItem.Parent
3cc0: 2e 47 72 69 64 49 74 65 6d 73 5b 30 5d 3b 0a 20  .GridItems[0];. 
3cd0: 20 20 20 20 20 20 20 20 20 20 20 49 6e 64 65 78             Index
3ce0: 45 64 69 74 6f 72 20 65 64 20 3d 20 6e 65 77 20  Editor ed = new 
3cf0: 49 6e 64 65 78 45 64 69 74 6f 72 28 5f 74 61 62  IndexEditor(_tab
3d00: 6c 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  le);.           
3d10: 20 65 64 2e 45 64 69 74 56 61 6c 75 65 28 28 49   ed.EditValue((I
3d20: 54 79 70 65 44 65 73 63 72 69 70 74 6f 72 43 6f  TypeDescriptorCo
3d30: 6e 74 65 78 74 29 5f 70 67 2e 53 65 6c 65 63 74  ntext)_pg.Select
3d40: 65 64 47 72 69 64 49 74 65 6d 2c 20 28 53 79 73  edGridItem, (Sys
3d50: 74 65 6d 2e 49 53 65 72 76 69 63 65 50 72 6f 76  tem.IServiceProv
3d60: 69 64 65 72 29 5f 70 67 2e 53 65 6c 65 63 74 65  ider)_pg.Selecte
3d70: 64 47 72 69 64 49 74 65 6d 2c 20 5f 70 67 2e 53  dGridItem, _pg.S
3d80: 65 6c 65 63 74 65 64 47 72 69 64 49 74 65 6d 2e  electedGridItem.
3d90: 56 61 6c 75 65 29 3b 0a 0a 20 20 20 20 20 20 20  Value);..       
3da0: 20 20 20 20 20 5f 64 61 74 61 47 72 69 64 5f 53       _dataGrid_S
3db0: 65 6c 65 63 74 69 6f 6e 43 68 61 6e 67 65 64 28  electionChanged(
3dc0: 74 68 69 73 2c 20 45 76 65 6e 74 41 72 67 73 2e  this, EventArgs.
3dd0: 45 6d 70 74 79 29 3b 0a 20 20 20 20 20 20 20 20  Empty);.        
3de0: 20 20 20 20 5f 64 61 74 61 47 72 69 64 2e 49 6e      _dataGrid.In
3df0: 76 61 6c 69 64 61 74 65 28 29 3b 0a 0a 20 20 20  validate();..   
3e00: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
3e10: 56 53 43 6f 6e 73 74 61 6e 74 73 2e 53 5f 4f 4b  VSConstants.S_OK
3e20: 3b 0a 20 20 20 20 20 20 20 20 20 20 63 61 73 65  ;.          case
3e30: 20 56 53 43 6f 6e 73 74 61 6e 74 73 2e 56 53 53   VSConstants.VSS
3e40: 74 64 39 37 43 6d 64 49 44 2e 4d 61 6e 61 67 65  td97CmdID.Manage
3e50: 52 65 6c 61 74 69 6f 6e 73 68 69 70 73 3a 0a 20  Relationships:. 
3e60: 20 20 20 20 20 20 20 20 20 20 20 68 6f 6c 64 65             holde
3e70: 72 20 3d 20 6e 65 77 20 45 64 69 74 6f 72 48 6f  r = new EditorHo
3e80: 6c 64 65 72 28 5f 74 61 62 6c 65 29 3b 0a 20 20  lder(_table);.  
3e90: 20 20 20 20 20 20 20 20 20 20 5f 70 67 2e 53 65            _pg.Se
3ea0: 6c 65 63 74 65 64 4f 62 6a 65 63 74 20 3d 20 68  lectedObject = h
3eb0: 6f 6c 64 65 72 3b 0a 20 20 20 20 20 20 20 20 20  older;.         
3ec0: 20 20 20 5f 70 67 2e 53 65 6c 65 63 74 65 64 47     _pg.SelectedG
3ed0: 72 69 64 49 74 65 6d 20 3d 20 5f 70 67 2e 53 65  ridItem = _pg.Se
3ee0: 6c 65 63 74 65 64 47 72 69 64 49 74 65 6d 2e 50  lectedGridItem.P
3ef0: 61 72 65 6e 74 2e 47 72 69 64 49 74 65 6d 73 5b  arent.GridItems[
3f00: 31 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  1];.            
3f10: 46 6f 72 65 69 67 6e 4b 65 79 45 64 69 74 6f 72  ForeignKeyEditor
3f20: 20 66 65 64 20 3d 20 6e 65 77 20 46 6f 72 65 69   fed = new Forei
3f30: 67 6e 4b 65 79 45 64 69 74 6f 72 28 5f 74 61 62  gnKeyEditor(_tab
3f40: 6c 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  le);.           
3f50: 20 66 65 64 2e 45 64 69 74 56 61 6c 75 65 28 28   fed.EditValue((
3f60: 49 54 79 70 65 44 65 73 63 72 69 70 74 6f 72 43  ITypeDescriptorC
3f70: 6f 6e 74 65 78 74 29 5f 70 67 2e 53 65 6c 65 63  ontext)_pg.Selec
3f80: 74 65 64 47 72 69 64 49 74 65 6d 2c 20 28 53 79  tedGridItem, (Sy
3f90: 73 74 65 6d 2e 49 53 65 72 76 69 63 65 50 72 6f  stem.IServicePro
3fa0: 76 69 64 65 72 29 5f 70 67 2e 53 65 6c 65 63 74  vider)_pg.Select
3fb0: 65 64 47 72 69 64 49 74 65 6d 2c 20 5f 70 67 2e  edGridItem, _pg.
3fc0: 53 65 6c 65 63 74 65 64 47 72 69 64 49 74 65 6d  SelectedGridItem
3fd0: 2e 56 61 6c 75 65 29 3b 0a 20 20 20 20 20 20 20  .Value);.       
3fe0: 20 20 20 20 20 72 65 74 75 72 6e 20 56 53 43 6f       return VSCo
3ff0: 6e 73 74 61 6e 74 73 2e 53 5f 4f 4b 3b 0a 20 20  nstants.S_OK;.  
4000: 20 20 20 20 20 20 20 20 0a 20 20 20 20 20 20 20          .       
4010: 20 20 20 63 61 73 65 20 56 53 43 6f 6e 73 74 61     case VSConsta
4020: 6e 74 73 2e 56 53 53 74 64 39 37 43 6d 64 49 44  nts.VSStd97CmdID
4030: 2e 4d 61 6e 61 67 65 43 6f 6e 73 74 72 61 69 6e  .ManageConstrain
4040: 74 73 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20  ts:.            
4050: 68 6f 6c 64 65 72 20 3d 20 6e 65 77 20 45 64 69  holder = new Edi
4060: 74 6f 72 48 6f 6c 64 65 72 28 5f 74 61 62 6c 65  torHolder(_table
4070: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  );.            _
4080: 70 67 2e 53 65 6c 65 63 74 65 64 4f 62 6a 65 63  pg.SelectedObjec
4090: 74 20 3d 20 68 6f 6c 64 65 72 3b 0a 20 20 20 20  t = holder;.    
40a0: 20 20 20 20 20 20 20 20 5f 70 67 2e 53 65 6c 65          _pg.Sele
40b0: 63 74 65 64 47 72 69 64 49 74 65 6d 20 3d 20 5f  ctedGridItem = _
40c0: 70 67 2e 53 65 6c 65 63 74 65 64 47 72 69 64 49  pg.SelectedGridI
40d0: 74 65 6d 2e 50 61 72 65 6e 74 2e 47 72 69 64 49  tem.Parent.GridI
40e0: 74 65 6d 73 5b 32 5d 3b 0a 20 20 20 20 20 20 20  tems[2];.       
40f0: 20 20 20 20 20 43 68 65 63 6b 45 64 69 74 6f 72       CheckEditor
4100: 20 63 65 64 20 3d 20 6e 65 77 20 43 68 65 63 6b   ced = new Check
4110: 45 64 69 74 6f 72 28 5f 74 61 62 6c 65 29 3b 0a  Editor(_table);.
4120: 20 20 20 20 20 20 20 20 20 20 20 20 63 65 64 2e              ced.
4130: 45 64 69 74 56 61 6c 75 65 28 28 49 54 79 70 65  EditValue((IType
4140: 44 65 73 63 72 69 70 74 6f 72 43 6f 6e 74 65 78  DescriptorContex
4150: 74 29 5f 70 67 2e 53 65 6c 65 63 74 65 64 47 72  t)_pg.SelectedGr
4160: 69 64 49 74 65 6d 2c 20 28 53 79 73 74 65 6d 2e  idItem, (System.
4170: 49 53 65 72 76 69 63 65 50 72 6f 76 69 64 65 72  IServiceProvider
4180: 29 5f 70 67 2e 53 65 6c 65 63 74 65 64 47 72 69  )_pg.SelectedGri
4190: 64 49 74 65 6d 2c 20 5f 70 67 2e 53 65 6c 65 63  dItem, _pg.Selec
41a0: 74 65 64 47 72 69 64 49 74 65 6d 2e 56 61 6c 75  tedGridItem.Valu
41b0: 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  e);.            
41c0: 72 65 74 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e  return VSConstan
41d0: 74 73 2e 53 5f 4f 4b 3b 0a 0a 20 20 20 20 20 20  ts.S_OK;..      
41e0: 20 20 20 20 63 61 73 65 20 56 53 43 6f 6e 73 74      case VSConst
41f0: 61 6e 74 73 2e 56 53 53 74 64 39 37 43 6d 64 49  ants.VSStd97CmdI
4200: 44 2e 41 6c 69 67 6e 52 69 67 68 74 3a 20 2f 2f  D.AlignRight: //
4210: 20 49 6e 73 65 72 74 20 43 6f 6c 75 6d 6e 0a 20   Insert Column. 
4220: 20 20 20 20 20 20 20 20 20 20 20 5f 64 61 74 61             _data
4230: 47 72 69 64 2e 45 6e 64 45 64 69 74 28 29 3b 0a  Grid.EndEdit();.
4240: 20 20 20 20 20 20 20 20 20 20 20 20 5f 64 61 74              _dat
4250: 61 47 72 69 64 2e 52 6f 77 73 2e 49 6e 73 65 72  aGrid.Rows.Inser
4260: 74 28 5f 64 61 74 61 47 72 69 64 2e 53 65 6c 65  t(_dataGrid.Sele
4270: 63 74 65 64 52 6f 77 73 5b 30 5d 2e 49 6e 64 65  ctedRows[0].Inde
4280: 78 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20  x, 1);.         
4290: 20 20 20 72 65 74 75 72 6e 20 56 53 43 6f 6e 73     return VSCons
42a0: 74 61 6e 74 73 2e 53 5f 4f 4b 3b 0a 20 20 20 20  tants.S_OK;.    
42b0: 20 20 20 20 20 20 63 61 73 65 20 56 53 43 6f 6e        case VSCon
42c0: 73 74 61 6e 74 73 2e 56 53 53 74 64 39 37 43 6d  stants.VSStd97Cm
42d0: 64 49 44 2e 41 6c 69 67 6e 54 6f 47 72 69 64 3a  dID.AlignToGrid:
42e0: 20 2f 2f 20 44 65 6c 65 74 65 20 43 6f 6c 75 6d   // Delete Colum
42f0: 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 64  n.            _d
4300: 61 74 61 47 72 69 64 2e 45 6e 64 45 64 69 74 28  ataGrid.EndEdit(
4310: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  );.            i
4320: 6e 74 20 64 65 6c 65 74 65 64 20 3d 20 30 3b 0a  nt deleted = 0;.
4330: 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c              whil
4340: 65 20 28 5f 64 61 74 61 47 72 69 64 2e 53 65 6c  e (_dataGrid.Sel
4350: 65 63 74 65 64 52 6f 77 73 2e 43 6f 75 6e 74 20  ectedRows.Count 
4360: 3e 20 30 29 0a 20 20 20 20 20 20 20 20 20 20 20  > 0).           
4370: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
4380: 20 74 72 79 0a 20 20 20 20 20 20 20 20 20 20 20   try.           
4390: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
43a0: 20 20 20 20 20 44 61 74 61 47 72 69 64 56 69 65       DataGridVie
43b0: 77 52 6f 77 20 72 6f 77 20 3d 20 5f 64 61 74 61  wRow row = _data
43c0: 47 72 69 64 2e 53 65 6c 65 63 74 65 64 52 6f 77  Grid.SelectedRow
43d0: 73 5b 30 5d 3b 0a 20 20 20 20 20 20 20 20 20 20  s[0];.          
43e0: 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20 63 20 3d        Column c =
43f0: 20 72 6f 77 2e 54 61 67 20 61 73 20 43 6f 6c 75   row.Tag as Colu
4400: 6d 6e 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  mn;.            
4410: 20 20 20 20 72 6f 77 2e 53 65 6c 65 63 74 65 64      row.Selected
4420: 20 3d 20 66 61 6c 73 65 3b 0a 20 20 20 20 20 20   = false;.      
4430: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 20            if (c 
4440: 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20  != null).       
4450: 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20           {.     
4460: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 74 61               _ta
4470: 62 6c 65 2e 43 6f 6c 75 6d 6e 73 2e 52 65 6d 6f  ble.Columns.Remo
4480: 76 65 28 63 29 3b 0a 20 20 20 20 20 20 20 20 20  ve(c);.         
4490: 20 20 20 20 20 20 20 20 20 64 65 6c 65 74 65 64           deleted
44a0: 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ++;.            
44b0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
44c0: 20 20 20 20 20 20 5f 64 61 74 61 47 72 69 64 2e        _dataGrid.
44d0: 52 6f 77 73 2e 52 65 6d 6f 76 65 28 72 6f 77 29  Rows.Remove(row)
44e0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
44f0: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
4500: 63 61 74 63 68 0a 20 20 20 20 20 20 20 20 20 20  catch.          
4510: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
4520: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
4530: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
4540: 69 66 20 28 64 65 6c 65 74 65 64 20 3e 20 30 29  if (deleted > 0)
4550: 20 4d 61 6b 65 44 69 72 74 79 28 29 3b 0a 20 20   MakeDirty();.  
4560: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
4570: 20 56 53 43 6f 6e 73 74 61 6e 74 73 2e 53 5f 4f   VSConstants.S_O
4580: 4b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  K;.        }.   
4590: 20 20 20 7d 0a 20 20 20 20 20 20 65 6c 73 65 20     }.      else 
45a0: 69 66 20 28 70 67 75 69 64 43 6d 64 47 72 6f 75  if (pguidCmdGrou
45b0: 70 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6d 6d 61  p == SQLiteComma
45c0: 6e 64 48 61 6e 64 6c 65 72 2e 67 75 69 64 53 51  ndHandler.guidSQ
45d0: 4c 69 74 65 43 6d 64 53 65 74 29 0a 20 20 20 20  LiteCmdSet).    
45e0: 20 20 7b 0a 20 20 20 20 20 20 20 20 73 77 69 74    {.        swit
45f0: 63 68 20 28 28 63 6d 64 69 64 29 6e 43 6d 64 49  ch ((cmdid)nCmdI
4600: 44 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20  D).        {.   
4610: 20 20 20 20 20 20 20 63 61 73 65 20 63 6d 64 69         case cmdi
4620: 64 2e 54 72 69 67 67 65 72 73 3a 0a 20 20 20 20  d.Triggers:.    
4630: 20 20 20 20 20 20 20 20 45 64 69 74 6f 72 48 6f          EditorHo
4640: 6c 64 65 72 20 68 6f 6c 64 65 72 20 3d 20 6e 65  lder holder = ne
4650: 77 20 45 64 69 74 6f 72 48 6f 6c 64 65 72 28 5f  w EditorHolder(_
4660: 74 61 62 6c 65 29 3b 0a 20 20 20 20 20 20 20 20  table);.        
4670: 20 20 20 20 5f 70 67 2e 53 65 6c 65 63 74 65 64      _pg.Selected
4680: 4f 62 6a 65 63 74 20 3d 20 68 6f 6c 64 65 72 3b  Object = holder;
4690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 70 67  .            _pg
46a0: 2e 53 65 6c 65 63 74 65 64 47 72 69 64 49 74 65  .SelectedGridIte
46b0: 6d 20 3d 20 5f 70 67 2e 53 65 6c 65 63 74 65 64  m = _pg.Selected
46c0: 47 72 69 64 49 74 65 6d 2e 50 61 72 65 6e 74 2e  GridItem.Parent.
46d0: 47 72 69 64 49 74 65 6d 73 5b 33 5d 3b 0a 20 20  GridItems[3];.  
46e0: 20 20 20 20 20 20 20 20 20 20 54 72 69 67 67 65            Trigge
46f0: 72 45 64 69 74 6f 72 20 74 65 64 20 3d 20 6e 65  rEditor ted = ne
4700: 77 20 54 72 69 67 67 65 72 45 64 69 74 6f 72 28  w TriggerEditor(
4710: 5f 74 61 62 6c 65 29 3b 0a 20 20 20 20 20 20 20  _table);.       
4720: 20 20 20 20 20 74 65 64 2e 45 64 69 74 56 61 6c       ted.EditVal
4730: 75 65 28 28 49 54 79 70 65 44 65 73 63 72 69 70  ue((ITypeDescrip
4740: 74 6f 72 43 6f 6e 74 65 78 74 29 5f 70 67 2e 53  torContext)_pg.S
4750: 65 6c 65 63 74 65 64 47 72 69 64 49 74 65 6d 2c  electedGridItem,
4760: 20 28 53 79 73 74 65 6d 2e 49 53 65 72 76 69 63   (System.IServic
4770: 65 50 72 6f 76 69 64 65 72 29 5f 70 67 2e 53 65  eProvider)_pg.Se
4780: 6c 65 63 74 65 64 47 72 69 64 49 74 65 6d 2c 20  lectedGridItem, 
4790: 5f 70 67 2e 53 65 6c 65 63 74 65 64 47 72 69 64  _pg.SelectedGrid
47a0: 49 74 65 6d 2e 56 61 6c 75 65 29 3b 0a 20 20 20  Item.Value);.   
47b0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
47c0: 56 53 43 6f 6e 73 74 61 6e 74 73 2e 53 5f 4f 4b  VSConstants.S_OK
47d0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
47e0: 20 20 7d 0a 0a 20 20 20 20 20 20 72 65 74 75 72    }..      retur
47f0: 6e 20 28 69 6e 74 29 28 4d 69 63 72 6f 73 6f 66  n (int)(Microsof
4800: 74 2e 56 69 73 75 61 6c 53 74 75 64 69 6f 2e 4f  t.VisualStudio.O
4810: 4c 45 2e 49 6e 74 65 72 6f 70 2e 43 6f 6e 73 74  LE.Interop.Const
4820: 61 6e 74 73 2e 4f 4c 45 43 4d 44 45 52 52 5f 45  ants.OLECMDERR_E
4830: 5f 4e 4f 54 53 55 50 50 4f 52 54 45 44 29 3b 0a  _NOTSUPPORTED);.
4840: 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 69 76 61      }..    priva
4850: 74 65 20 44 61 74 61 47 72 69 64 56 69 65 77 52  te DataGridViewR
4860: 6f 77 5b 5d 20 5f 63 6c 69 70 52 6f 77 73 3b 0a  ow[] _clipRows;.
4870: 0a 20 20 20 20 70 72 69 76 61 74 65 20 44 61 74  .    private Dat
4880: 61 47 72 69 64 56 69 65 77 52 6f 77 5b 5d 20 47  aGridViewRow[] G
4890: 65 74 43 6c 69 70 62 6f 61 72 64 52 6f 77 73 28  etClipboardRows(
48a0: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 69 66  ).    {.      if
48b0: 20 28 43 6c 69 70 62 6f 61 72 64 2e 43 6f 6e 74   (Clipboard.Cont
48c0: 61 69 6e 73 44 61 74 61 28 22 53 51 4c 69 74 65  ainsData("SQLite
48d0: 54 61 62 6c 65 44 65 73 69 67 6e 65 72 22 29 20  TableDesigner") 
48e0: 26 26 20 43 6c 69 70 62 6f 61 72 64 2e 47 65 74  && Clipboard.Get
48f0: 44 61 74 61 28 22 53 51 4c 69 74 65 54 61 62 6c  Data("SQLiteTabl
4900: 65 44 65 73 69 67 6e 65 72 22 29 2e 54 6f 53 74  eDesigner").ToSt
4910: 72 69 6e 67 28 29 20 3d 3d 20 43 61 70 74 69 6f  ring() == Captio
4920: 6e 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20  n).      {.     
4930: 20 20 20 44 61 74 61 47 72 69 64 56 69 65 77 52     DataGridViewR
4940: 6f 77 5b 5d 20 61 72 72 20 3d 20 5f 63 6c 69 70  ow[] arr = _clip
4950: 52 6f 77 73 3b 0a 20 20 20 20 20 20 20 20 69 66  Rows;.        if
4960: 20 28 61 72 72 20 21 3d 20 6e 75 6c 6c 29 0a 20   (arr != null). 
4970: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
4980: 20 20 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20     for (int n = 
4990: 30 3b 20 6e 20 3c 20 61 72 72 2e 4c 65 6e 67 74  0; n < arr.Lengt
49a0: 68 3b 20 6e 2b 2b 29 0a 20 20 20 20 20 20 20 20  h; n++).        
49b0: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
49c0: 43 6f 6c 75 6d 6e 20 63 20 3d 20 61 72 72 5b 6e  Column c = arr[n
49d0: 5d 2e 54 61 67 20 61 73 20 43 6f 6c 75 6d 6e 3b  ].Tag as Column;
49e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
49f0: 28 63 20 21 3d 20 6e 75 6c 6c 20 26 26 20 63 2e  (c != null && c.
4a00: 54 61 62 6c 65 20 3d 3d 20 5f 74 61 62 6c 65 29  Table == _table)
4a10: 20 72 65 74 75 72 6e 20 61 72 72 3b 0a 20 20 20   return arr;.   
4a20: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
4a30: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
4a40: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0a 20 20   return null;.  
4a50: 20 20 7d 0a 0a 20 20 20 20 70 75 62 6c 69 63 20    }..    public 
4a60: 69 6e 74 20 51 75 65 72 79 53 74 61 74 75 73 28  int QueryStatus(
4a70: 72 65 66 20 47 75 69 64 20 70 67 75 69 64 43 6d  ref Guid pguidCm
4a80: 64 47 72 6f 75 70 2c 20 75 69 6e 74 20 63 43 6d  dGroup, uint cCm
4a90: 64 73 2c 20 4f 4c 45 43 4d 44 5b 5d 20 70 72 67  ds, OLECMD[] prg
4aa0: 43 6d 64 73 2c 20 49 6e 74 50 74 72 20 70 43 6d  Cmds, IntPtr pCm
4ab0: 64 54 65 78 74 29 0a 20 20 20 20 7b 0a 20 20 20  dText).    {.   
4ac0: 20 20 20 69 66 20 28 70 67 75 69 64 43 6d 64 47     if (pguidCmdG
4ad0: 72 6f 75 70 20 3d 3d 20 56 53 43 6f 6e 73 74 61  roup == VSConsta
4ae0: 6e 74 73 2e 47 55 49 44 5f 56 53 53 74 61 6e 64  nts.GUID_VSStand
4af0: 61 72 64 43 6f 6d 6d 61 6e 64 53 65 74 39 37 29  ardCommandSet97)
4b00: 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  .      {.       
4b10: 20 73 77 69 74 63 68 20 28 28 56 53 43 6f 6e 73   switch ((VSCons
4b20: 74 61 6e 74 73 2e 56 53 53 74 64 39 37 43 6d 64  tants.VSStd97Cmd
4b30: 49 44 29 70 72 67 43 6d 64 73 5b 30 5d 2e 63 6d  ID)prgCmds[0].cm
4b40: 64 49 44 29 0a 20 20 20 20 20 20 20 20 7b 0a 20  dID).        {. 
4b50: 20 20 20 20 20 20 20 20 20 63 61 73 65 20 56 53           case VS
4b60: 43 6f 6e 73 74 61 6e 74 73 2e 56 53 53 74 64 39  Constants.VSStd9
4b70: 37 43 6d 64 49 44 2e 50 72 69 6d 61 72 79 4b 65  7CmdID.PrimaryKe
4b80: 79 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  y:.            p
4b90: 72 67 43 6d 64 73 5b 30 5d 2e 63 6d 64 66 20 3d  rgCmds[0].cmdf =
4ba0: 20 28 75 69 6e 74 29 28 4f 4c 45 43 4d 44 46 2e   (uint)(OLECMDF.
4bb0: 4f 4c 45 43 4d 44 46 5f 53 55 50 50 4f 52 54 45  OLECMDF_SUPPORTE
4bc0: 44 20 7c 20 4f 4c 45 43 4d 44 46 2e 4f 4c 45 43  D | OLECMDF.OLEC
4bd0: 4d 44 46 5f 45 4e 41 42 4c 45 44 29 3b 0a 20 20  MDF_ENABLED);.  
4be0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 49 73            if (Is
4bf0: 50 6b 53 65 6c 65 63 74 65 64 28 29 20 3d 3d 20  PkSelected() == 
4c00: 74 72 75 65 29 0a 20 20 20 20 20 20 20 20 20 20  true).          
4c10: 20 20 20 20 70 72 67 43 6d 64 73 5b 30 5d 2e 63      prgCmds[0].c
4c20: 6d 64 66 20 7c 3d 20 28 75 69 6e 74 29 28 4f 4c  mdf |= (uint)(OL
4c30: 45 43 4d 44 46 2e 4f 4c 45 43 4d 44 46 5f 4c 41  ECMDF.OLECMDF_LA
4c40: 54 43 48 45 44 29 3b 0a 0a 20 20 20 20 20 20 20  TCHED);..       
4c50: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
4c60: 20 20 20 20 20 20 63 61 73 65 20 56 53 43 6f 6e        case VSCon
4c70: 73 74 61 6e 74 73 2e 56 53 53 74 64 39 37 43 6d  stants.VSStd97Cm
4c80: 64 49 44 2e 47 65 6e 65 72 61 74 65 43 68 61 6e  dID.GenerateChan
4c90: 67 65 53 63 72 69 70 74 3a 0a 20 20 20 20 20 20  geScript:.      
4ca0: 20 20 20 20 20 20 69 66 20 28 5f 64 69 72 74 79        if (_dirty
4cb0: 20 3d 3d 20 74 72 75 65 20 7c 7c 20 53 74 72 69   == true || Stri
4cc0: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
4cd0: 28 5f 74 61 62 6c 65 2e 4f 72 69 67 69 6e 61 6c  (_table.Original
4ce0: 53 71 6c 29 20 3d 3d 20 66 61 6c 73 65 29 0a 20  Sql) == false). 
4cf0: 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20             {.   
4d00: 20 20 20 20 20 20 20 20 20 20 20 70 72 67 43 6d             prgCm
4d10: 64 73 5b 30 5d 2e 63 6d 64 66 20 3d 20 28 75 69  ds[0].cmdf = (ui
4d20: 6e 74 29 28 4f 4c 45 43 4d 44 46 2e 4f 4c 45 43  nt)(OLECMDF.OLEC
4d30: 4d 44 46 5f 53 55 50 50 4f 52 54 45 44 20 7c 20  MDF_SUPPORTED | 
4d40: 4f 4c 45 43 4d 44 46 2e 4f 4c 45 43 4d 44 46 5f  OLECMDF.OLECMDF_
4d50: 45 4e 41 42 4c 45 44 29 3b 0a 20 20 20 20 20 20  ENABLED);.      
4d60: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
4d70: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
4d80: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4d90: 28 69 6e 74 29 28 4d 69 63 72 6f 73 6f 66 74 2e  (int)(Microsoft.
4da0: 56 69 73 75 61 6c 53 74 75 64 69 6f 2e 4f 4c 45  VisualStudio.OLE
4db0: 2e 49 6e 74 65 72 6f 70 2e 43 6f 6e 73 74 61 6e  .Interop.Constan
4dc0: 74 73 2e 4f 4c 45 43 4d 44 45 52 52 5f 45 5f 4e  ts.OLECMDERR_E_N
4dd0: 4f 54 53 55 50 50 4f 52 54 45 44 29 3b 0a 20 20  OTSUPPORTED);.  
4de0: 20 20 20 20 20 20 20 20 63 61 73 65 20 56 53 43          case VSC
4df0: 6f 6e 73 74 61 6e 74 73 2e 56 53 53 74 64 39 37  onstants.VSStd97
4e00: 43 6d 64 49 44 2e 43 75 74 3a 0a 20 20 20 20 20  CmdID.Cut:.     
4e10: 20 20 20 20 20 20 20 69 66 20 28 53 65 6c 65 63         if (Selec
4e20: 74 65 64 52 6f 77 73 2e 4c 65 6e 67 74 68 20 3e  tedRows.Length >
4e30: 20 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 20   0).            
4e40: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
4e50: 70 72 67 43 6d 64 73 5b 30 5d 2e 63 6d 64 66 20  prgCmds[0].cmdf 
4e60: 3d 20 28 75 69 6e 74 29 28 4f 4c 45 43 4d 44 46  = (uint)(OLECMDF
4e70: 2e 4f 4c 45 43 4d 44 46 5f 53 55 50 50 4f 52 54  .OLECMDF_SUPPORT
4e80: 45 44 20 7c 20 4f 4c 45 43 4d 44 46 2e 4f 4c 45  ED | OLECMDF.OLE
4e90: 43 4d 44 46 5f 45 4e 41 42 4c 45 44 29 3b 0a 20  CMDF_ENABLED);. 
4ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
4eb0: 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ak;.            
4ec0: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  }.            re
4ed0: 74 75 72 6e 20 28 69 6e 74 29 28 4d 69 63 72 6f  turn (int)(Micro
4ee0: 73 6f 66 74 2e 56 69 73 75 61 6c 53 74 75 64 69  soft.VisualStudi
4ef0: 6f 2e 4f 4c 45 2e 49 6e 74 65 72 6f 70 2e 43 6f  o.OLE.Interop.Co
4f00: 6e 73 74 61 6e 74 73 2e 4f 4c 45 43 4d 44 45 52  nstants.OLECMDER
4f10: 52 5f 45 5f 4e 4f 54 53 55 50 50 4f 52 54 45 44  R_E_NOTSUPPORTED
4f20: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 63 61 73  );.          cas
4f30: 65 20 56 53 43 6f 6e 73 74 61 6e 74 73 2e 56 53  e VSConstants.VS
4f40: 53 74 64 39 37 43 6d 64 49 44 2e 43 6f 70 79 3a  Std97CmdID.Copy:
4f50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
4f60: 28 53 65 6c 65 63 74 65 64 52 6f 77 73 2e 4c 65  (SelectedRows.Le
4f70: 6e 67 74 68 20 3e 20 30 29 0a 20 20 20 20 20 20  ngth > 0).      
4f80: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
4f90: 20 20 20 20 20 20 70 72 67 43 6d 64 73 5b 30 5d        prgCmds[0]
4fa0: 2e 63 6d 64 66 20 3d 20 28 75 69 6e 74 29 28 4f  .cmdf = (uint)(O
4fb0: 4c 45 43 4d 44 46 2e 4f 4c 45 43 4d 44 46 5f 53  LECMDF.OLECMDF_S
4fc0: 55 50 50 4f 52 54 45 44 20 7c 20 4f 4c 45 43 4d  UPPORTED | OLECM
4fd0: 44 46 2e 4f 4c 45 43 4d 44 46 5f 45 4e 41 42 4c  DF.OLECMDF_ENABL
4fe0: 45 44 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  ED);.           
4ff0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
5000: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
5010: 20 20 20 20 72 65 74 75 72 6e 20 28 69 6e 74 29      return (int)
5020: 28 4d 69 63 72 6f 73 6f 66 74 2e 56 69 73 75 61  (Microsoft.Visua
5030: 6c 53 74 75 64 69 6f 2e 4f 4c 45 2e 49 6e 74 65  lStudio.OLE.Inte
5040: 72 6f 70 2e 43 6f 6e 73 74 61 6e 74 73 2e 4f 4c  rop.Constants.OL
5050: 45 43 4d 44 45 52 52 5f 45 5f 4e 4f 54 53 55 50  ECMDERR_E_NOTSUP
5060: 50 4f 52 54 45 44 29 3b 0a 20 20 20 20 20 20 20  PORTED);.       
5070: 20 20 20 63 61 73 65 20 56 53 43 6f 6e 73 74 61     case VSConsta
5080: 6e 74 73 2e 56 53 53 74 64 39 37 43 6d 64 49 44  nts.VSStd97CmdID
5090: 2e 50 61 73 74 65 3a 0a 20 20 20 20 20 20 20 20  .Paste:.        
50a0: 20 20 20 20 44 61 74 61 47 72 69 64 56 69 65 77      DataGridView
50b0: 52 6f 77 5b 5d 20 72 6f 77 73 20 3d 20 47 65 74  Row[] rows = Get
50c0: 43 6c 69 70 62 6f 61 72 64 52 6f 77 73 28 29 3b  ClipboardRows();
50d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
50e0: 28 72 6f 77 73 20 21 3d 20 6e 75 6c 6c 29 0a 20  (rows != null). 
50f0: 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20             {.   
5100: 20 20 20 20 20 20 20 20 20 20 20 70 72 67 43 6d             prgCm
5110: 64 73 5b 30 5d 2e 63 6d 64 66 20 3d 20 28 75 69  ds[0].cmdf = (ui
5120: 6e 74 29 28 4f 4c 45 43 4d 44 46 2e 4f 4c 45 43  nt)(OLECMDF.OLEC
5130: 4d 44 46 5f 53 55 50 50 4f 52 54 45 44 20 7c 20  MDF_SUPPORTED | 
5140: 4f 4c 45 43 4d 44 46 2e 4f 4c 45 43 4d 44 46 5f  OLECMDF.OLECMDF_
5150: 45 4e 41 42 4c 45 44 29 3b 0a 20 20 20 20 20 20  ENABLED);.      
5160: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
5170: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
5180: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
5190: 28 69 6e 74 29 28 4d 69 63 72 6f 73 6f 66 74 2e  (int)(Microsoft.
51a0: 56 69 73 75 61 6c 53 74 75 64 69 6f 2e 4f 4c 45  VisualStudio.OLE
51b0: 2e 49 6e 74 65 72 6f 70 2e 43 6f 6e 73 74 61 6e  .Interop.Constan
51c0: 74 73 2e 4f 4c 45 43 4d 44 45 52 52 5f 45 5f 4e  ts.OLECMDERR_E_N
51d0: 4f 54 53 55 50 50 4f 52 54 45 44 29 3b 0a 20 20  OTSUPPORTED);.  
51e0: 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a          default:
51f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
5200: 75 72 6e 20 28 69 6e 74 29 28 4d 69 63 72 6f 73  urn (int)(Micros
5210: 6f 66 74 2e 56 69 73 75 61 6c 53 74 75 64 69 6f  oft.VisualStudio
5220: 2e 4f 4c 45 2e 49 6e 74 65 72 6f 70 2e 43 6f 6e  .OLE.Interop.Con
5230: 73 74 61 6e 74 73 2e 4f 4c 45 43 4d 44 45 52 52  stants.OLECMDERR
5240: 5f 45 5f 4e 4f 54 53 55 50 50 4f 52 54 45 44 29  _E_NOTSUPPORTED)
5250: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
5260: 20 20 20 20 72 65 74 75 72 6e 20 56 53 43 6f 6e      return VSCon
5270: 73 74 61 6e 74 73 2e 53 5f 4f 4b 3b 0a 20 20 20  stants.S_OK;.   
5280: 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66 20 28     }..      if (
5290: 70 67 75 69 64 43 6d 64 47 72 6f 75 70 20 3d 3d  pguidCmdGroup ==
52a0: 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 48 61   SQLiteCommandHa
52b0: 6e 64 6c 65 72 2e 67 75 69 64 53 51 4c 69 74 65  ndler.guidSQLite
52c0: 43 6d 64 53 65 74 29 0a 20 20 20 20 20 20 7b 0a  CmdSet).      {.
52d0: 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20 28          switch (
52e0: 70 72 67 43 6d 64 73 5b 30 5d 2e 63 6d 64 49 44  prgCmds[0].cmdID
52f0: 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20  ).        {.    
5300: 20 20 20 20 20 20 63 61 73 65 20 28 75 69 6e 74        case (uint
5310: 29 63 6d 64 69 64 2e 54 72 69 67 67 65 72 73 3a  )cmdid.Triggers:
5320: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 67  .            prg
5330: 43 6d 64 73 5b 30 5d 2e 63 6d 64 66 20 3d 20 28  Cmds[0].cmdf = (
5340: 75 69 6e 74 29 28 4f 4c 45 43 4d 44 46 2e 4f 4c  uint)(OLECMDF.OL
5350: 45 43 4d 44 46 5f 53 55 50 50 4f 52 54 45 44 20  ECMDF_SUPPORTED 
5360: 7c 20 4f 4c 45 43 4d 44 46 2e 4f 4c 45 43 4d 44  | OLECMDF.OLECMD
5370: 46 5f 45 4e 41 42 4c 45 44 29 3b 0a 20 20 20 20  F_ENABLED);.    
5380: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 56          return V
5390: 53 43 6f 6e 73 74 61 6e 74 73 2e 53 5f 4f 4b 3b  SConstants.S_OK;
53a0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
53b0: 20 7d 0a 0a 20 20 20 20 20 20 69 66 20 28 70 67   }..      if (pg
53c0: 75 69 64 43 6d 64 47 72 6f 75 70 20 3d 3d 20 53  uidCmdGroup == S
53d0: 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 48 61 6e 64  QLiteCommandHand
53e0: 6c 65 72 2e 67 75 69 64 44 61 76 69 6e 63 69 29  ler.guidDavinci)
53f0: 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  .      {.       
5400: 20 73 77 69 74 63 68 20 28 70 72 67 43 6d 64 73   switch (prgCmds
5410: 5b 30 5d 2e 63 6d 64 49 44 29 0a 20 20 20 20 20  [0].cmdID).     
5420: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 63     {.          c
5430: 61 73 65 20 28 75 69 6e 74 29 56 53 43 6f 6e 73  ase (uint)VSCons
5440: 74 61 6e 74 73 2e 56 53 53 74 64 39 37 43 6d 64  tants.VSStd97Cmd
5450: 49 44 2e 4d 61 6e 61 67 65 52 65 6c 61 74 69 6f  ID.ManageRelatio
5460: 6e 73 68 69 70 73 3a 0a 20 20 20 20 20 20 20 20  nships:.        
5470: 20 20 63 61 73 65 20 28 75 69 6e 74 29 56 53 43    case (uint)VSC
5480: 6f 6e 73 74 61 6e 74 73 2e 56 53 53 74 64 39 37  onstants.VSStd97
5490: 43 6d 64 49 44 2e 4d 61 6e 61 67 65 49 6e 64 65  CmdID.ManageInde
54a0: 78 65 73 3a 0a 20 20 20 20 20 20 20 20 20 20 63  xes:.          c
54b0: 61 73 65 20 28 75 69 6e 74 29 56 53 43 6f 6e 73  ase (uint)VSCons
54c0: 74 61 6e 74 73 2e 56 53 53 74 64 39 37 43 6d 64  tants.VSStd97Cmd
54d0: 49 44 2e 4d 61 6e 61 67 65 43 6f 6e 73 74 72 61  ID.ManageConstra
54e0: 69 6e 74 73 3a 0a 20 20 20 20 20 20 20 20 20 20  ints:.          
54f0: 2f 2f 63 61 73 65 20 31 30 3a 20 2f 2f 20 54 61  //case 10: // Ta
5500: 62 6c 65 20 56 69 65 77 20 2d 3e 20 43 75 73 74  ble View -> Cust
5510: 6f 6d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 63  om.          //c
5520: 61 73 65 20 31 34 3a 20 2f 2f 20 54 61 62 6c 65  ase 14: // Table
5530: 20 56 69 65 77 20 2d 3e 20 4d 6f 64 69 66 79 20   View -> Modify 
5540: 43 75 73 74 6f 6d 0a 20 20 20 20 20 20 20 20 20  Custom.         
5550: 20 2f 2f 63 61 73 65 20 33 33 3a 20 2f 2f 20 44   //case 33: // D
5560: 61 74 61 62 61 73 65 20 44 69 61 67 72 61 6d 20  atabase Diagram 
5570: 2d 3e 20 41 64 64 20 54 61 62 6c 65 0a 20 20 20  -> Add Table.   
5580: 20 20 20 20 20 20 20 2f 2f 63 61 73 65 20 31 3a         //case 1:
5590: 20 2f 2f 20 44 61 74 61 62 61 73 65 20 44 69 61   // Database Dia
55a0: 67 72 61 6d 20 2d 3e 20 41 64 64 20 52 65 6c 61  gram -> Add Rela
55b0: 74 65 64 20 54 61 62 6c 65 73 0a 20 20 20 20 20  ted Tables.     
55c0: 20 20 20 20 20 2f 2f 63 61 73 65 20 31 32 3a 20       //case 12: 
55d0: 2f 2f 20 44 61 74 61 62 61 73 65 20 44 69 61 67  // Database Diag
55e0: 72 61 6d 20 2d 3e 20 44 65 6c 65 74 65 20 46 72  ram -> Delete Fr
55f0: 6f 6d 20 44 61 74 61 62 61 73 65 0a 20 20 20 20  om Database.    
5600: 20 20 20 20 20 20 2f 2f 63 61 73 65 20 35 31 3a        //case 51:
5610: 20 2f 2f 20 44 61 74 61 62 61 73 65 20 44 69 61   // Database Dia
5620: 67 72 61 6d 20 2d 3e 20 52 65 6d 6f 76 65 20 46  gram -> Remove F
5630: 72 6f 6d 20 44 69 61 67 72 61 6d 0a 20 20 20 20  rom Diagram.    
5640: 20 20 20 20 20 20 2f 2f 63 61 73 65 20 31 33 3a        //case 13:
5650: 20 2f 2f 20 44 61 74 61 62 61 73 65 20 44 69 61   // Database Dia
5660: 67 72 61 6d 20 2d 3e 20 41 75 74 6f 73 69 7a 65  gram -> Autosize
5670: 20 53 65 6c 65 63 74 65 64 20 54 61 62 6c 65 73   Selected Tables
5680: 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 63 61 73  .          //cas
5690: 65 20 33 3a 20 2f 2f 20 44 61 74 61 62 61 73 65  e 3: // Database
56a0: 20 44 69 61 67 72 61 6d 20 2d 3e 20 41 72 72 61   Diagram -> Arra
56b0: 6e 67 65 20 53 65 6c 65 63 74 69 6f 6e 0a 20 20  nge Selection.  
56c0: 20 20 20 20 20 20 20 20 2f 2f 63 61 73 65 20 32          //case 2
56d0: 3a 20 2f 2f 20 44 61 74 61 62 61 73 65 20 44 69  : // Database Di
56e0: 61 67 72 61 6d 20 2d 3e 20 41 72 72 61 6e 67 65  agram -> Arrange
56f0: 20 54 61 62 6c 65 73 0a 20 20 20 20 20 20 20 20   Tables.        
5700: 20 20 2f 2f 63 61 73 65 20 31 36 3a 20 2f 2f 20    //case 16: // 
5710: 44 61 74 61 62 61 73 65 20 44 69 61 67 72 61 6d  Database Diagram
5720: 20 2d 3e 20 5a 6f 6f 6d 20 2d 3e 20 32 30 30 25   -> Zoom -> 200%
5730: 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 63 61 73  .          //cas
5740: 65 20 31 37 3a 20 2f 2f 20 44 61 74 61 62 61 73  e 17: // Databas
5750: 65 20 44 69 61 67 72 61 6d 20 2d 3e 20 5a 6f 6f  e Diagram -> Zoo
5760: 6d 20 2d 3e 20 31 35 30 25 0a 20 20 20 20 20 20  m -> 150%.      
5770: 20 20 20 20 2f 2f 63 61 73 65 20 31 38 3a 20 2f      //case 18: /
5780: 2f 20 44 61 74 61 62 61 73 65 20 44 69 61 67 72  / Database Diagr
5790: 61 6d 20 2d 3e 20 5a 6f 6f 6d 20 2d 3e 20 31 30  am -> Zoom -> 10
57a0: 30 25 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 63  0%.          //c
57b0: 61 73 65 20 31 39 3a 20 2f 2f 20 44 61 74 61 62  ase 19: // Datab
57c0: 61 73 65 20 44 69 61 67 72 61 6d 20 2d 3e 20 5a  ase Diagram -> Z
57d0: 6f 6f 6d 20 2d 3e 20 37 35 25 0a 20 20 20 20 20  oom -> 75%.     
57e0: 20 20 20 20 20 2f 2f 63 61 73 65 20 32 30 3a 20       //case 20: 
57f0: 2f 2f 20 44 61 74 61 62 61 73 65 20 44 69 61 67  // Database Diag
5800: 72 61 6d 20 2d 3e 20 5a 6f 6f 6d 20 2d 3e 20 35  ram -> Zoom -> 5
5810: 30 25 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 63  0%.          //c
5820: 61 73 65 20 32 31 3a 20 2f 2f 20 44 61 74 61 62  ase 21: // Datab
5830: 61 73 65 20 44 69 61 67 72 61 6d 20 2d 3e 20 5a  ase Diagram -> Z
5840: 6f 6f 6d 20 2d 3e 20 32 35 25 0a 20 20 20 20 20  oom -> 25%.     
5850: 20 20 20 20 20 2f 2f 63 61 73 65 20 32 32 3a 20       //case 22: 
5860: 2f 2f 20 44 61 74 61 62 61 73 65 20 44 69 61 67  // Database Diag
5870: 72 61 6d 20 2d 3e 20 5a 6f 6f 6d 20 2d 3e 20 31  ram -> Zoom -> 1
5880: 30 25 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 63  0%.          //c
5890: 61 73 65 20 32 34 3a 20 2f 2f 20 44 61 74 61 62  ase 24: // Datab
58a0: 61 73 65 20 44 69 61 67 72 61 6d 20 2d 3e 20 5a  ase Diagram -> Z
58b0: 6f 6f 6d 20 2d 3e 20 54 6f 20 46 69 74 0a 20 20  oom -> To Fit.  
58c0: 20 20 20 20 20 20 20 20 2f 2f 63 61 73 65 20 36          //case 6
58d0: 3a 20 2f 2f 20 44 61 74 61 62 61 73 65 20 44 69  : // Database Di
58e0: 61 67 72 61 6d 20 2d 3e 20 4e 65 77 20 54 65 78  agram -> New Tex
58f0: 74 20 41 6e 6e 6f 74 61 74 69 6f 6e 0a 20 20 20  t Annotation.   
5900: 20 20 20 20 20 20 20 2f 2f 63 61 73 65 20 31 35         //case 15
5910: 3a 20 2f 2f 20 44 61 74 61 62 61 73 65 20 44 69  : // Database Di
5920: 61 67 72 61 6d 20 2d 3e 20 53 65 74 20 54 65 78  agram -> Set Tex
5930: 74 20 41 6e 6e 6f 74 61 74 69 6f 6e 20 46 6f 6e  t Annotation Fon
5940: 74 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 63 61  t.          //ca
5950: 73 65 20 37 3a 20 2f 2f 20 44 61 74 61 62 61 73  se 7: // Databas
5960: 65 20 44 69 61 67 72 61 6d 20 2d 3e 20 53 68 6f  e Diagram -> Sho
5970: 77 20 52 65 6c 61 74 69 6f 6e 73 68 69 70 20 4c  w Relationship L
5980: 61 62 65 6c 73 0a 20 20 20 20 20 20 20 20 20 20  abels.          
5990: 2f 2f 63 61 73 65 20 38 3a 20 2f 2f 20 44 61 74  //case 8: // Dat
59a0: 61 62 61 73 65 20 44 69 61 67 72 61 6d 20 2d 3e  abase Diagram ->
59b0: 20 56 69 65 77 20 50 61 67 65 20 42 72 65 61 6b   View Page Break
59c0: 73 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 63 61  s.          //ca
59d0: 73 65 20 39 3a 20 2f 2f 20 44 61 74 61 62 61 73  se 9: // Databas
59e0: 65 20 44 69 61 67 72 61 6d 20 2d 3e 20 52 65 63  e Diagram -> Rec
59f0: 61 6c 63 75 6c 61 74 65 20 50 61 67 65 20 42 72  alculate Page Br
5a00: 65 61 6b 73 0a 20 20 20 20 20 20 20 20 20 20 2f  eaks.          /
5a10: 2f 63 61 73 65 20 34 33 3a 20 2f 2f 20 44 61 74  /case 43: // Dat
5a20: 61 62 61 73 65 20 44 69 61 67 72 61 6d 20 2d 3e  abase Diagram ->
5a30: 20 43 6f 70 79 20 44 69 61 67 72 61 6d 20 74 6f   Copy Diagram to
5a40: 20 43 6c 69 70 62 6f 61 72 64 0a 20 20 20 20 20   Clipboard.     
5a50: 20 20 20 20 20 2f 2f 63 61 73 65 20 34 31 3a 20       //case 41: 
5a60: 2f 2f 20 51 75 65 72 79 20 44 65 73 69 67 6e 65  // Query Designe
5a70: 72 20 2d 3e 20 54 61 62 6c 65 20 44 69 73 70 6c  r -> Table Displ
5a80: 61 79 20 2d 3e 20 43 6f 6c 75 6d 6e 20 4e 61 6d  ay -> Column Nam
5a90: 65 73 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 63  es.          //c
5aa0: 61 73 65 20 34 32 3a 20 2f 2f 20 51 75 65 72 79  ase 42: // Query
5ab0: 20 44 65 73 69 67 6e 65 72 20 2d 3e 20 54 61 62   Designer -> Tab
5ac0: 6c 65 20 44 69 73 70 6c 61 79 20 2d 3e 20 4e 61  le Display -> Na
5ad0: 6d 65 20 4f 6e 6c 79 0a 20 20 20 20 20 20 20 20  me Only.        
5ae0: 20 20 2f 2f 63 61 73 65 20 33 39 3a 20 2f 2f 20    //case 39: // 
5af0: 51 75 65 72 79 20 44 65 73 69 67 6e 65 72 20 2d  Query Designer -
5b00: 3e 20 41 64 64 20 54 61 62 6c 65 0a 20 20 20 20  > Add Table.    
5b10: 20 20 20 20 20 20 63 61 73 65 20 34 3a 20 2f 2f        case 4: //
5b20: 20 49 6e 73 65 72 74 20 43 6f 6c 75 6d 6e 0a 20   Insert Column. 
5b30: 20 20 20 20 20 20 20 20 20 63 61 73 65 20 35 3a           case 5:
5b40: 20 2f 2f 20 44 65 6c 65 74 65 20 43 6f 6c 75 6d   // Delete Colum
5b50: 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  n.            pr
5b60: 67 43 6d 64 73 5b 30 5d 2e 63 6d 64 66 20 3d 20  gCmds[0].cmdf = 
5b70: 28 75 69 6e 74 29 28 4f 4c 45 43 4d 44 46 2e 4f  (uint)(OLECMDF.O
5b80: 4c 45 43 4d 44 46 5f 53 55 50 50 4f 52 54 45 44  LECMDF_SUPPORTED
5b90: 20 7c 20 4f 4c 45 43 4d 44 46 2e 4f 4c 45 43 4d   | OLECMDF.OLECM
5ba0: 44 46 5f 45 4e 41 42 4c 45 44 29 3b 0a 20 20 20  DF_ENABLED);.   
5bb0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
5bc0: 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c            defaul
5bd0: 74 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  t:.            r
5be0: 65 74 75 72 6e 20 28 69 6e 74 29 28 4d 69 63 72  eturn (int)(Micr
5bf0: 6f 73 6f 66 74 2e 56 69 73 75 61 6c 53 74 75 64  osoft.VisualStud
5c00: 69 6f 2e 4f 4c 45 2e 49 6e 74 65 72 6f 70 2e 43  io.OLE.Interop.C
5c10: 6f 6e 73 74 61 6e 74 73 2e 4f 4c 45 43 4d 44 45  onstants.OLECMDE
5c20: 52 52 5f 45 5f 4e 4f 54 53 55 50 50 4f 52 54 45  RR_E_NOTSUPPORTE
5c30: 44 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  D);.        }.  
5c40: 20 20 20 20 20 20 72 65 74 75 72 6e 20 56 53 43        return VSC
5c50: 6f 6e 73 74 61 6e 74 73 2e 53 5f 4f 4b 3b 0a 20  onstants.S_OK;. 
5c60: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 72 65       }..      re
5c70: 74 75 72 6e 20 28 69 6e 74 29 28 4d 69 63 72 6f  turn (int)(Micro
5c80: 73 6f 66 74 2e 56 69 73 75 61 6c 53 74 75 64 69  soft.VisualStudi
5c90: 6f 2e 4f 4c 45 2e 49 6e 74 65 72 6f 70 2e 43 6f  o.OLE.Interop.Co
5ca0: 6e 73 74 61 6e 74 73 2e 4f 4c 45 43 4d 44 45 52  nstants.OLECMDER
5cb0: 52 5f 45 5f 4e 4f 54 53 55 50 50 4f 52 54 45 44  R_E_NOTSUPPORTED
5cc0: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 65  );.    }..    #e
5cd0: 6e 64 72 65 67 69 6f 6e 0a 0a 20 20 20 20 23 72  ndregion..    #r
5ce0: 65 67 69 6f 6e 20 49 53 65 6c 65 63 74 69 6f 6e  egion ISelection
5cf0: 43 6f 6e 74 61 69 6e 65 72 20 4d 65 6d 62 65 72  Container Member
5d00: 73 0a 0a 20 20 20 20 69 6e 74 20 49 53 65 6c 65  s..    int ISele
5d10: 63 74 69 6f 6e 43 6f 6e 74 61 69 6e 65 72 2e 43  ctionContainer.C
5d20: 6f 75 6e 74 4f 62 6a 65 63 74 73 28 75 69 6e 74  ountObjects(uint
5d30: 20 64 77 46 6c 61 67 73 2c 20 6f 75 74 20 75 69   dwFlags, out ui
5d40: 6e 74 20 70 63 29 0a 20 20 20 20 7b 0a 20 20 20  nt pc).    {.   
5d50: 20 20 20 70 63 20 3d 20 31 3b 0a 20 20 20 20 20     pc = 1;.     
5d60: 20 72 65 74 75 72 6e 20 56 53 43 6f 6e 73 74 61   return VSConsta
5d70: 6e 74 73 2e 53 5f 4f 4b 3b 0a 20 20 20 20 7d 0a  nts.S_OK;.    }.
5d80: 0a 20 20 20 20 69 6e 74 20 49 53 65 6c 65 63 74  .    int ISelect
5d90: 69 6f 6e 43 6f 6e 74 61 69 6e 65 72 2e 47 65 74  ionContainer.Get
5da0: 4f 62 6a 65 63 74 73 28 75 69 6e 74 20 64 77 46  Objects(uint dwF
5db0: 6c 61 67 73 2c 20 75 69 6e 74 20 63 4f 62 6a 65  lags, uint cObje
5dc0: 63 74 73 2c 20 6f 62 6a 65 63 74 5b 5d 20 61 70  cts, object[] ap
5dd0: 55 6e 6b 4f 62 6a 65 63 74 73 29 0a 20 20 20 20  UnkObjects).    
5de0: 7b 0a 20 20 20 20 20 20 61 70 55 6e 6b 4f 62 6a  {.      apUnkObj
5df0: 65 63 74 73 5b 30 5d 20 3d 20 5f 74 61 62 6c 65  ects[0] = _table
5e00: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 56  ;.      return V
5e10: 53 43 6f 6e 73 74 61 6e 74 73 2e 53 5f 4f 4b 3b  SConstants.S_OK;
5e20: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20  .    }..    int 
5e30: 49 53 65 6c 65 63 74 69 6f 6e 43 6f 6e 74 61 69  ISelectionContai
5e40: 6e 65 72 2e 53 65 6c 65 63 74 4f 62 6a 65 63 74  ner.SelectObject
5e50: 73 28 75 69 6e 74 20 63 53 65 6c 65 63 74 2c 20  s(uint cSelect, 
5e60: 6f 62 6a 65 63 74 5b 5d 20 61 70 55 6e 6b 53 65  object[] apUnkSe
5e70: 6c 65 63 74 2c 20 75 69 6e 74 20 64 77 46 6c 61  lect, uint dwFla
5e80: 67 73 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  gs).    {.      
5e90: 72 65 74 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e  return VSConstan
5ea0: 74 73 2e 53 5f 4f 4b 3b 0a 20 20 20 20 7d 0a 0a  ts.S_OK;.    }..
5eb0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0a 0a      #endregion..
5ec0: 20 20 20 20 23 72 65 67 69 6f 6e 20 49 56 73 57      #region IVsW
5ed0: 69 6e 64 6f 77 50 61 6e 65 43 6f 6d 6d 69 74 20  indowPaneCommit 
5ee0: 4d 65 6d 62 65 72 73 0a 0a 20 20 20 20 69 6e 74  Members..    int
5ef0: 20 49 56 73 57 69 6e 64 6f 77 50 61 6e 65 43 6f   IVsWindowPaneCo
5f00: 6d 6d 69 74 2e 43 6f 6d 6d 69 74 50 65 6e 64 69  mmit.CommitPendi
5f10: 6e 67 45 64 69 74 28 6f 75 74 20 69 6e 74 20 70  ngEdit(out int p
5f20: 66 43 6f 6d 6d 69 74 46 61 69 6c 65 64 29 0a 20  fCommitFailed). 
5f30: 20 20 20 7b 0a 20 20 20 20 20 20 70 66 43 6f 6d     {.      pfCom
5f40: 6d 69 74 46 61 69 6c 65 64 20 3d 20 30 3b 0a 20  mitFailed = 0;. 
5f50: 20 20 20 20 20 72 65 74 75 72 6e 20 56 53 43 6f       return VSCo
5f60: 6e 73 74 61 6e 74 73 2e 53 5f 4f 4b 3b 0a 20 20  nstants.S_OK;.  
5f70: 20 20 7d 0a 0a 20 20 20 20 23 65 6e 64 72 65 67    }..    #endreg
5f80: 69 6f 6e 0a 0a 20 20 20 20 23 72 65 67 69 6f 6e  ion..    #region
5f90: 20 49 56 73 57 69 6e 64 6f 77 46 72 61 6d 65 4e   IVsWindowFrameN
5fa0: 6f 74 69 66 79 20 4d 65 6d 62 65 72 73 0a 0a 20  otify Members.. 
5fb0: 20 20 20 69 6e 74 20 49 56 73 57 69 6e 64 6f 77     int IVsWindow
5fc0: 46 72 61 6d 65 4e 6f 74 69 66 79 2e 4f 6e 44 6f  FrameNotify.OnDo
5fd0: 63 6b 61 62 6c 65 43 68 61 6e 67 65 28 69 6e 74  ckableChange(int
5fe0: 20 66 44 6f 63 6b 61 62 6c 65 29 0a 20 20 20 20   fDockable).    
5ff0: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 56  {.      return V
6000: 53 43 6f 6e 73 74 61 6e 74 73 2e 53 5f 4f 4b 3b  SConstants.S_OK;
6010: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20  .    }..    int 
6020: 49 56 73 57 69 6e 64 6f 77 46 72 61 6d 65 4e 6f  IVsWindowFrameNo
6030: 74 69 66 79 2e 4f 6e 4d 6f 76 65 28 29 0a 20 20  tify.OnMove().  
6040: 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e    {.      return
6050: 20 56 53 43 6f 6e 73 74 61 6e 74 73 2e 53 5f 4f   VSConstants.S_O
6060: 4b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e  K;.    }..    in
6070: 74 20 49 56 73 57 69 6e 64 6f 77 46 72 61 6d 65  t IVsWindowFrame
6080: 4e 6f 74 69 66 79 2e 4f 6e 53 68 6f 77 28 69 6e  Notify.OnShow(in
6090: 74 20 66 53 68 6f 77 29 0a 20 20 20 20 7b 0a 20  t fShow).    {. 
60a0: 20 20 20 20 20 73 77 69 74 63 68 20 28 28 5f 5f       switch ((__
60b0: 46 52 41 4d 45 53 48 4f 57 29 66 53 68 6f 77 29  FRAMESHOW)fShow)
60c0: 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  .      {.       
60d0: 20 63 61 73 65 20 5f 5f 46 52 41 4d 45 53 48 4f   case __FRAMESHO
60e0: 57 2e 46 52 41 4d 45 53 48 4f 57 5f 57 69 6e 53  W.FRAMESHOW_WinS
60f0: 68 6f 77 6e 3a 0a 20 20 20 20 20 20 20 20 63 61  hown:.        ca
6100: 73 65 20 5f 5f 46 52 41 4d 45 53 48 4f 57 2e 46  se __FRAMESHOW.F
6110: 52 41 4d 45 53 48 4f 57 5f 57 69 6e 52 65 73 74  RAMESHOW_WinRest
6120: 6f 72 65 64 3a 0a 20 20 20 20 20 20 20 20 20 20  ored:.          
6130: 53 65 74 50 72 6f 70 65 72 74 79 57 69 6e 64 6f  SetPropertyWindo
6140: 77 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  w();.          i
6150: 66 20 28 5f 77 61 72 6e 65 64 20 3d 3d 20 66 61  f (_warned == fa
6160: 6c 73 65 29 0a 20 20 20 20 20 20 20 20 20 20 7b  lse).          {
6170: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 77 61  .            _wa
6180: 72 6e 65 64 20 3d 20 74 72 75 65 3b 0a 20 20 20  rned = true;.   
6190: 20 20 20 20 20 20 20 20 20 4d 65 73 73 61 67 65           Message
61a0: 42 6f 78 2e 53 68 6f 77 28 74 68 69 73 2c 20 22  Box.Show(this, "
61b0: 54 68 65 20 74 61 62 6c 65 20 64 65 73 69 67 6e  The table design
61c0: 65 72 20 69 73 20 73 74 69 6c 6c 20 69 6e 20 64  er is still in d
61d0: 65 76 65 6c 6f 70 6d 65 6e 74 2e 20 20 50 6c 65  evelopment.  Ple
61e0: 61 73 65 20 72 65 70 6f 72 74 20 62 75 67 73 20  ase report bugs 
61f0: 74 6f 20 74 68 65 20 73 71 6c 69 74 65 2d 75 73  to the sqlite-us
6200: 65 72 73 20 6d 61 69 6c 69 6e 67 20 6c 69 73 74  ers mailing list
6210: 20 61 74 20 73 71 6c 69 74 65 2d 75 73 65 72 73   at sqlite-users
6220: 40 6d 61 69 6c 69 6e 67 6c 69 73 74 73 2e 73 71  @mailinglists.sq
6230: 6c 69 74 65 2e 6f 72 67 22 2c 20 22 46 65 61 74  lite.org", "Feat
6240: 75 72 65 20 55 6e 64 65 72 20 52 65 76 69 65 77  ure Under Review
6250: 22 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74  ", MessageBoxBut
6260: 74 6f 6e 73 2e 4f 4b 29 3b 0a 20 20 20 20 20 20  tons.OK);.      
6270: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
6280: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
6290: 20 20 20 20 20 72 65 74 75 72 6e 20 56 53 43 6f       return VSCo
62a0: 6e 73 74 61 6e 74 73 2e 53 5f 4f 4b 3b 0a 20 20  nstants.S_OK;.  
62b0: 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20 49 56 73    }..    int IVs
62c0: 57 69 6e 64 6f 77 46 72 61 6d 65 4e 6f 74 69 66  WindowFrameNotif
62d0: 79 2e 4f 6e 53 69 7a 65 28 29 0a 20 20 20 20 7b  y.OnSize().    {
62e0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 56 53  .      return VS
62f0: 43 6f 6e 73 74 61 6e 74 73 2e 53 5f 4f 4b 3b 0a  Constants.S_OK;.
6300: 20 20 20 20 7d 0a 0a 20 20 20 20 23 65 6e 64 72      }..    #endr
6310: 65 67 69 6f 6e 0a 0a 20 20 20 20 70 72 69 76 61  egion..    priva
6320: 74 65 20 76 6f 69 64 20 5f 64 61 74 61 47 72 69  te void _dataGri
6330: 64 5f 43 65 6c 6c 45 6e 74 65 72 28 6f 62 6a 65  d_CellEnter(obje
6340: 63 74 20 73 65 6e 64 65 72 2c 20 44 61 74 61 47  ct sender, DataG
6350: 72 69 64 56 69 65 77 43 65 6c 6c 45 76 65 6e 74  ridViewCellEvent
6360: 41 72 67 73 20 65 29 0a 20 20 20 20 7b 0a 20 20  Args e).    {.  
6370: 20 20 20 20 74 72 79 0a 20 20 20 20 20 20 7b 0a      try.      {.
6380: 20 20 20 20 20 20 20 20 69 66 20 28 65 2e 43 6f          if (e.Co
6390: 6c 75 6d 6e 49 6e 64 65 78 20 3e 20 2d 31 29 0a  lumnIndex > -1).
63a0: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
63b0: 20 20 20 20 5f 64 61 74 61 47 72 69 64 2e 42 65      _dataGrid.Be
63c0: 67 69 6e 45 64 69 74 28 74 72 75 65 29 3b 0a 20  ginEdit(true);. 
63d0: 20 20 20 20 20 20 20 20 20 5f 64 61 74 61 47 72           _dataGr
63e0: 69 64 5f 53 65 6c 65 63 74 69 6f 6e 43 68 61 6e  id_SelectionChan
63f0: 67 65 64 28 73 65 6e 64 65 72 2c 20 65 29 3b 0a  ged(sender, e);.
6400: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
6410: 7d 0a 20 20 20 20 20 20 63 61 74 63 68 0a 20 20  }.      catch.  
6420: 20 20 20 20 7b 0a 20 20 20 20 20 20 7d 0a 20 20      {.      }.  
6430: 20 20 7d 0a 0a 20 20 20 20 70 72 69 76 61 74 65    }..    private
6440: 20 76 6f 69 64 20 5f 64 61 74 61 47 72 69 64 5f   void _dataGrid_
6450: 52 6f 77 48 65 61 64 65 72 4d 6f 75 73 65 43 6c  RowHeaderMouseCl
6460: 69 63 6b 28 6f 62 6a 65 63 74 20 73 65 6e 64 65  ick(object sende
6470: 72 2c 20 44 61 74 61 47 72 69 64 56 69 65 77 43  r, DataGridViewC
6480: 65 6c 6c 4d 6f 75 73 65 45 76 65 6e 74 41 72 67  ellMouseEventArg
6490: 73 20 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  s e).    {.     
64a0: 20 5f 64 61 74 61 47 72 69 64 2e 45 6e 64 45 64   _dataGrid.EndEd
64b0: 69 74 28 29 3b 0a 20 20 20 20 20 20 69 66 20 28  it();.      if (
64c0: 65 2e 42 75 74 74 6f 6e 20 3d 3d 20 4d 6f 75 73  e.Button == Mous
64d0: 65 42 75 74 74 6f 6e 73 2e 52 69 67 68 74 29 0a  eButtons.Right).
64e0: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
64f0: 69 66 20 28 5f 64 61 74 61 47 72 69 64 2e 52 6f  if (_dataGrid.Ro
6500: 77 73 5b 65 2e 52 6f 77 49 6e 64 65 78 5d 2e 53  ws[e.RowIndex].S
6510: 65 6c 65 63 74 65 64 20 3d 3d 20 66 61 6c 73 65  elected == false
6520: 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20  ).        {.    
6530: 20 20 20 20 20 20 73 77 69 74 63 68 20 28 43 6f        switch (Co
6540: 6e 74 72 6f 6c 2e 4d 6f 64 69 66 69 65 72 4b 65  ntrol.ModifierKe
6550: 79 73 29 0a 20 20 20 20 20 20 20 20 20 20 7b 0a  ys).          {.
6560: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
6570: 20 4b 65 79 73 2e 43 6f 6e 74 72 6f 6c 3a 0a 20   Keys.Control:. 
6580: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 64 61               _da
6590: 74 61 47 72 69 64 2e 52 6f 77 73 5b 65 2e 52 6f  taGrid.Rows[e.Ro
65a0: 77 49 6e 64 65 78 5d 2e 53 65 6c 65 63 74 65 64  wIndex].Selected
65b0: 20 3d 20 74 72 75 65 3b 0a 20 20 20 20 20 20 20   = true;.       
65c0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
65d0: 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 4b            case K
65e0: 65 79 73 2e 53 68 69 66 74 3a 0a 20 20 20 20 20  eys.Shift:.     
65f0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6d 69 6e           int min
6600: 20 3d 20 4d 61 74 68 2e 4d 69 6e 28 5f 64 61 74   = Math.Min(_dat
6610: 61 47 72 69 64 2e 43 75 72 72 65 6e 74 52 6f 77  aGrid.CurrentRow
6620: 2e 49 6e 64 65 78 2c 20 65 2e 52 6f 77 49 6e 64  .Index, e.RowInd
6630: 65 78 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  ex);.           
6640: 20 20 20 69 6e 74 20 6d 61 78 20 3d 20 4d 61 74     int max = Mat
6650: 68 2e 4d 61 78 28 5f 64 61 74 61 47 72 69 64 2e  h.Max(_dataGrid.
6660: 43 75 72 72 65 6e 74 52 6f 77 2e 49 6e 64 65 78  CurrentRow.Index
6670: 2c 20 65 2e 52 6f 77 49 6e 64 65 78 29 3b 0a 20  , e.RowIndex);. 
6680: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
6690: 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c   (int n = 0; n <
66a0: 20 5f 64 61 74 61 47 72 69 64 2e 52 6f 77 73 2e   _dataGrid.Rows.
66b0: 43 6f 75 6e 74 3b 20 6e 2b 2b 29 0a 20 20 20 20  Count; n++).    
66c0: 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20            {.    
66d0: 20 20 20 20 20 20 20 20 20 20 20 20 5f 64 61 74              _dat
66e0: 61 47 72 69 64 2e 52 6f 77 73 5b 6e 5d 2e 53 65  aGrid.Rows[n].Se
66f0: 6c 65 63 74 65 64 20 3d 20 28 5f 64 61 74 61 47  lected = (_dataG
6700: 72 69 64 2e 52 6f 77 73 5b 6e 5d 2e 49 6e 64 65  rid.Rows[n].Inde
6710: 78 20 3c 3d 20 6d 69 6e 20 7c 7c 20 5f 64 61 74  x <= min || _dat
6720: 61 47 72 69 64 2e 52 6f 77 73 5b 6e 5d 2e 49 6e  aGrid.Rows[n].In
6730: 64 65 78 20 3c 3d 20 6d 61 78 29 3b 0a 20 20 20  dex <= max);.   
6740: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
6750: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
6760: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 65  ;.            de
6770: 66 61 75 6c 74 3a 0a 20 20 20 20 20 20 20 20 20  fault:.         
6780: 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 6e 20       for (int n 
6790: 3d 20 30 3b 20 6e 20 3c 20 5f 64 61 74 61 47 72  = 0; n < _dataGr
67a0: 69 64 2e 52 6f 77 73 2e 43 6f 75 6e 74 3b 20 6e  id.Rows.Count; n
67b0: 2b 2b 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  ++).            
67c0: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
67d0: 20 20 20 20 5f 64 61 74 61 47 72 69 64 2e 52 6f      _dataGrid.Ro
67e0: 77 73 5b 6e 5d 2e 53 65 6c 65 63 74 65 64 20 3d  ws[n].Selected =
67f0: 20 28 65 2e 52 6f 77 49 6e 64 65 78 20 3d 3d 20   (e.RowIndex == 
6800: 6e 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  n);.            
6810: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
6820: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
6830: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 0a     }.        }..
6840: 20 20 20 20 20 20 20 20 49 56 73 55 49 53 68 65          IVsUIShe
6850: 6c 6c 20 73 68 65 6c 6c 20 3d 20 5f 73 65 72 76  ll shell = _serv
6860: 69 63 65 50 72 6f 76 69 64 65 72 2e 47 65 74 53  iceProvider.GetS
6870: 65 72 76 69 63 65 28 74 79 70 65 6f 66 28 49 56  ervice(typeof(IV
6880: 73 55 49 53 68 65 6c 6c 29 29 20 61 73 20 49 56  sUIShell)) as IV
6890: 73 55 49 53 68 65 6c 6c 3b 0a 20 20 20 20 20 20  sUIShell;.      
68a0: 20 20 69 66 20 28 73 68 65 6c 6c 20 21 3d 20 6e    if (shell != n
68b0: 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 7b 0a 20  ull).        {. 
68c0: 20 20 20 20 20 20 20 20 20 47 75 69 64 20 67 75           Guid gu
68d0: 69 64 3b 0a 20 20 20 20 20 20 20 20 20 20 50 4f  id;.          PO
68e0: 49 4e 54 53 5b 5d 20 70 20 3d 20 6e 65 77 20 50  INTS[] p = new P
68f0: 4f 49 4e 54 53 5b 31 5d 3b 0a 20 20 20 20 20 20  OINTS[1];.      
6900: 20 20 20 20 69 6e 74 20 72 65 74 3b 0a 0a 20 20      int ret;..  
6910: 20 20 20 20 20 20 20 20 70 5b 30 5d 2e 78 20 3d          p[0].x =
6920: 20 28 73 68 6f 72 74 29 43 6f 6e 74 72 6f 6c 2e   (short)Control.
6930: 4d 6f 75 73 65 50 6f 73 69 74 69 6f 6e 2e 58 3b  MousePosition.X;
6940: 0a 20 20 20 20 20 20 20 20 20 20 70 5b 30 5d 2e  .          p[0].
6950: 79 20 3d 20 28 73 68 6f 72 74 29 43 6f 6e 74 72  y = (short)Contr
6960: 6f 6c 2e 4d 6f 75 73 65 50 6f 73 69 74 69 6f 6e  ol.MousePosition
6970: 2e 59 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 67  .Y;..          g
6980: 75 69 64 20 3d 20 6e 65 77 20 47 75 69 64 28 22  uid = new Guid("
6990: 37 33 32 61 62 65 37 34 2d 63 64 38 30 2d 31 31  732abe74-cd80-11
69a0: 64 30 2d 61 32 64 62 2d 30 30 61 61 30 30 61 33  d0-a2db-00aa00a3
69b0: 65 66 66 66 22 29 3b 0a 0a 20 20 20 20 20 20 20  efff");..       
69c0: 20 20 20 72 65 74 20 3d 20 73 68 65 6c 6c 2e 53     ret = shell.S
69d0: 68 6f 77 43 6f 6e 74 65 78 74 4d 65 6e 75 28 30  howContextMenu(0
69e0: 2c 20 72 65 66 20 67 75 69 64 2c 20 32 35 39 2c  , ref guid, 259,
69f0: 20 70 2c 20 74 68 69 73 29 3b 0a 20 20 20 20 20   p, this);.     
6a00: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
6a10: 20 7d 0a 0a 20 20 20 20 70 72 69 76 61 74 65 20   }..    private 
6a20: 76 6f 69 64 20 5f 64 61 74 61 47 72 69 64 5f 43  void _dataGrid_C
6a30: 65 6c 6c 43 6c 69 63 6b 28 6f 62 6a 65 63 74 20  ellClick(object 
6a40: 73 65 6e 64 65 72 2c 20 44 61 74 61 47 72 69 64  sender, DataGrid
6a50: 56 69 65 77 43 65 6c 6c 45 76 65 6e 74 41 72 67  ViewCellEventArg
6a60: 73 20 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  s e).    {.     
6a70: 20 69 66 20 28 5f 69 6e 69 74 20 3d 3d 20 74 72   if (_init == tr
6a80: 75 65 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20  ue) return;.    
6a90: 20 20 69 66 20 28 65 2e 43 6f 6c 75 6d 6e 49 6e    if (e.ColumnIn
6aa0: 64 65 78 20 3d 3d 20 2d 31 20 26 26 20 65 2e 52  dex == -1 && e.R
6ab0: 6f 77 49 6e 64 65 78 20 3d 3d 20 2d 31 29 0a 20  owIndex == -1). 
6ac0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 5f       {.        _
6ad0: 64 61 74 61 47 72 69 64 2e 45 6e 64 45 64 69 74  dataGrid.EndEdit
6ae0: 28 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ();.      }.    
6af0: 20 20 5f 64 61 74 61 47 72 69 64 5f 53 65 6c 65    _dataGrid_Sele
6b00: 63 74 69 6f 6e 43 68 61 6e 67 65 64 28 73 65 6e  ctionChanged(sen
6b10: 64 65 72 2c 20 65 29 3b 0a 20 20 20 20 7d 0a 0a  der, e);.    }..
6b20: 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64      private void
6b30: 20 5f 64 61 74 61 47 72 69 64 5f 43 65 6c 6c 50   _dataGrid_CellP
6b40: 61 69 6e 74 69 6e 67 28 6f 62 6a 65 63 74 20 73  ainting(object s
6b50: 65 6e 64 65 72 2c 20 44 61 74 61 47 72 69 64 56  ender, DataGridV
6b60: 69 65 77 43 65 6c 6c 50 61 69 6e 74 69 6e 67 45  iewCellPaintingE
6b70: 76 65 6e 74 41 72 67 73 20 65 29 0a 20 20 20 20  ventArgs e).    
6b80: 7b 0a 20 20 20 20 20 20 69 66 20 28 5f 69 6e 69  {.      if (_ini
6b90: 74 20 3d 3d 20 74 72 75 65 29 20 72 65 74 75 72  t == true) retur
6ba0: 6e 3b 0a 20 20 20 20 20 20 69 66 20 28 65 2e 43  n;.      if (e.C
6bb0: 6f 6c 75 6d 6e 49 6e 64 65 78 20 3e 20 2d 31 20  olumnIndex > -1 
6bc0: 7c 7c 20 65 2e 52 6f 77 49 6e 64 65 78 20 3c 20  || e.RowIndex < 
6bd0: 30 29 20 72 65 74 75 72 6e 3b 0a 0a 20 20 20 20  0) return;..    
6be0: 20 20 43 6f 6c 75 6d 6e 20 63 6f 6c 20 3d 20 5f    Column col = _
6bf0: 64 61 74 61 47 72 69 64 2e 52 6f 77 73 5b 65 2e  dataGrid.Rows[e.
6c00: 52 6f 77 49 6e 64 65 78 5d 2e 54 61 67 20 61 73  RowIndex].Tag as
6c10: 20 43 6f 6c 75 6d 6e 3b 0a 0a 20 20 20 20 20 20   Column;..      
6c20: 69 66 20 28 63 6f 6c 20 3d 3d 20 6e 75 6c 6c 29  if (col == null)
6c30: 20 72 65 74 75 72 6e 3b 0a 0a 20 20 20 20 20 20   return;..      
6c40: 62 6f 6f 6c 20 69 73 70 6b 20 3d 20 66 61 6c 73  bool ispk = fals
6c50: 65 3b 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68  e;.      foreach
6c60: 20 28 49 6e 64 65 78 43 6f 6c 75 6d 6e 20 69 63   (IndexColumn ic
6c70: 20 69 6e 20 5f 74 61 62 6c 65 2e 50 72 69 6d 61   in _table.Prima
6c80: 72 79 4b 65 79 2e 43 6f 6c 75 6d 6e 73 29 0a 20  ryKey.Columns). 
6c90: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69       {.        i
6ca0: 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72  f (String.Compar
6cb0: 65 28 69 63 2e 43 6f 6c 75 6d 6e 2c 20 63 6f 6c  e(ic.Column, col
6cc0: 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 53 74 72  .ColumnName, Str
6cd0: 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
6ce0: 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29  dinalIgnoreCase)
6cf0: 20 3d 3d 20 30 29 0a 20 20 20 20 20 20 20 20 7b   == 0).        {
6d00: 0a 20 20 20 20 20 20 20 20 20 20 69 73 70 6b 20  .          ispk 
6d10: 3d 20 74 72 75 65 3b 0a 20 20 20 20 20 20 20 20  = true;.        
6d20: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
6d30: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
6d40: 20 69 66 20 28 69 73 70 6b 20 3d 3d 20 74 72 75   if (ispk == tru
6d50: 65 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20  e).      {.     
6d60: 20 20 20 65 2e 50 61 69 6e 74 28 65 2e 43 6c 69     e.Paint(e.Cli
6d70: 70 42 6f 75 6e 64 73 2c 20 44 61 74 61 47 72 69  pBounds, DataGri
6d80: 64 56 69 65 77 50 61 69 6e 74 50 61 72 74 73 2e  dViewPaintParts.
6d90: 41 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20 5f 69  All);.        _i
6da0: 6d 61 67 65 4c 69 73 74 2e 44 72 61 77 28 65 2e  mageList.Draw(e.
6db0: 47 72 61 70 68 69 63 73 2c 20 65 2e 43 65 6c 6c  Graphics, e.Cell
6dc0: 42 6f 75 6e 64 73 2e 4c 65 66 74 2c 20 65 2e 43  Bounds.Left, e.C
6dd0: 65 6c 6c 42 6f 75 6e 64 73 2e 54 6f 70 20 2b 20  ellBounds.Top + 
6de0: 28 28 65 2e 43 65 6c 6c 42 6f 75 6e 64 73 2e 42  ((e.CellBounds.B
6df0: 6f 74 74 6f 6d 20 2d 20 65 2e 43 65 6c 6c 42 6f  ottom - e.CellBo
6e00: 75 6e 64 73 2e 54 6f 70 29 20 2d 20 5f 69 6d 61  unds.Top) - _ima
6e10: 67 65 4c 69 73 74 2e 49 6d 61 67 65 53 69 7a 65  geList.ImageSize
6e20: 2e 48 65 69 67 68 74 29 20 2f 20 32 2c 20 30 29  .Height) / 2, 0)
6e30: 3b 0a 20 20 20 20 20 20 20 20 65 2e 48 61 6e 64  ;.        e.Hand
6e40: 6c 65 64 20 3d 20 74 72 75 65 3b 0a 20 20 20 20  led = true;.    
6e50: 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70    }.    }..    p
6e60: 72 69 76 61 74 65 20 44 61 74 61 47 72 69 64 56  rivate DataGridV
6e70: 69 65 77 52 6f 77 5b 5d 20 53 65 6c 65 63 74 65  iewRow[] Selecte
6e80: 64 52 6f 77 73 0a 20 20 20 20 7b 0a 20 20 20 20  dRows.    {.    
6e90: 20 20 67 65 74 0a 20 20 20 20 20 20 7b 0a 20 20    get.      {.  
6ea0: 20 20 20 20 20 20 4c 69 73 74 3c 44 61 74 61 47        List<DataG
6eb0: 72 69 64 56 69 65 77 52 6f 77 3e 20 69 74 65 6d  ridViewRow> item
6ec0: 73 20 3d 20 6e 65 77 20 4c 69 73 74 3c 44 61 74  s = new List<Dat
6ed0: 61 47 72 69 64 56 69 65 77 52 6f 77 3e 28 29 3b  aGridViewRow>();
6ee0: 0a 0a 20 20 20 20 20 20 20 20 66 6f 72 20 28 69  ..        for (i
6ef0: 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 5f 64  nt n = 0; n < _d
6f00: 61 74 61 47 72 69 64 2e 52 6f 77 73 2e 43 6f 75  ataGrid.Rows.Cou
6f10: 6e 74 3b 20 6e 2b 2b 29 0a 20 20 20 20 20 20 20  nt; n++).       
6f20: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 20   {.          if 
6f30: 28 5f 64 61 74 61 47 72 69 64 2e 52 6f 77 73 5b  (_dataGrid.Rows[
6f40: 6e 5d 2e 53 65 6c 65 63 74 65 64 20 7c 7c 20 28  n].Selected || (
6f50: 5f 64 61 74 61 47 72 69 64 2e 43 75 72 72 65 6e  _dataGrid.Curren
6f60: 74 43 65 6c 6c 2e 52 6f 77 49 6e 64 65 78 20 3d  tCell.RowIndex =
6f70: 3d 20 6e 20 26 26 20 5f 64 61 74 61 47 72 69 64  = n && _dataGrid
6f80: 2e 43 75 72 72 65 6e 74 43 65 6c 6c 2e 53 65 6c  .CurrentCell.Sel
6f90: 65 63 74 65 64 20 3d 3d 20 74 72 75 65 29 29 0a  ected == true)).
6fa0: 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20            {.    
6fb0: 20 20 20 20 20 20 20 20 69 66 20 28 5f 64 61 74          if (_dat
6fc0: 61 47 72 69 64 2e 52 6f 77 73 5b 6e 5d 2e 54 61  aGrid.Rows[n].Ta
6fd0: 67 20 69 73 20 43 6f 6c 75 6d 6e 29 0a 20 20 20  g is Column).   
6fe0: 20 20 20 20 20 20 20 20 20 20 20 69 74 65 6d 73             items
6ff0: 2e 41 64 64 28 5f 64 61 74 61 47 72 69 64 2e 52  .Add(_dataGrid.R
7000: 6f 77 73 5b 6e 5d 29 3b 0a 20 20 20 20 20 20 20  ows[n]);.       
7010: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 0a     }.        }..
7020: 20 20 20 20 20 20 20 20 44 61 74 61 47 72 69 64          DataGrid
7030: 56 69 65 77 52 6f 77 5b 5d 20 6f 62 6a 73 20 3d  ViewRow[] objs =
7040: 20 6e 65 77 20 44 61 74 61 47 72 69 64 56 69 65   new DataGridVie
7050: 77 52 6f 77 5b 69 74 65 6d 73 2e 43 6f 75 6e 74  wRow[items.Count
7060: 5d 3b 0a 20 20 20 20 20 20 20 20 69 74 65 6d 73  ];.        items
7070: 2e 43 6f 70 79 54 6f 28 6f 62 6a 73 29 3b 0a 0a  .CopyTo(objs);..
7080: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6f          return o
7090: 62 6a 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  bjs;.      }.   
70a0: 20 7d 0a 0a 20 20 20 20 70 72 69 76 61 74 65 20   }..    private 
70b0: 76 6f 69 64 20 5f 64 61 74 61 47 72 69 64 5f 53  void _dataGrid_S
70c0: 65 6c 65 63 74 69 6f 6e 43 68 61 6e 67 65 64 28  electionChanged(
70d0: 6f 62 6a 65 63 74 20 73 65 6e 64 65 72 2c 20 45  object sender, E
70e0: 76 65 6e 74 41 72 67 73 20 65 29 0a 20 20 20 20  ventArgs e).    
70f0: 7b 0a 20 20 20 20 20 20 69 66 20 28 5f 69 6e 69  {.      if (_ini
7100: 74 20 3d 3d 20 74 72 75 65 29 20 72 65 74 75 72  t == true) retur
7110: 6e 3b 0a 20 20 20 20 20 20 44 61 74 61 47 72 69  n;.      DataGri
7120: 64 56 69 65 77 52 6f 77 5b 5d 20 61 72 72 20 3d  dViewRow[] arr =
7130: 20 53 65 6c 65 63 74 65 64 52 6f 77 73 3b 0a 0a   SelectedRows;..
7140: 20 20 20 20 20 20 6f 62 6a 65 63 74 5b 5d 20 6f        object[] o
7150: 62 6a 73 20 3d 20 6e 65 77 20 6f 62 6a 65 63 74  bjs = new object
7160: 5b 61 72 72 2e 4c 65 6e 67 74 68 5d 3b 0a 0a 20  [arr.Length];.. 
7170: 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 6e 20       for (int n 
7180: 3d 20 30 3b 20 6e 20 3c 20 6f 62 6a 73 2e 4c 65  = 0; n < objs.Le
7190: 6e 67 74 68 3b 20 6e 2b 2b 29 0a 20 20 20 20 20  ngth; n++).     
71a0: 20 20 20 6f 62 6a 73 5b 6e 5d 20 3d 20 61 72 72     objs[n] = arr
71b0: 5b 6e 5d 2e 54 61 67 3b 0a 0a 20 20 20 20 20 20  [n].Tag;..      
71c0: 5f 70 72 6f 70 65 72 74 79 47 72 69 64 2e 53 65  _propertyGrid.Se
71d0: 6c 65 63 74 65 64 4f 62 6a 65 63 74 73 20 3d 20  lectedObjects = 
71e0: 6f 62 6a 73 3b 0a 0a 20 20 20 20 20 20 52 65 66  objs;..      Ref
71f0: 72 65 73 68 54 6f 6f 6c 62 61 72 73 28 29 3b 0a  reshToolbars();.
7200: 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 69 76 61      }..    priva
7210: 74 65 20 76 6f 69 64 20 5f 64 61 74 61 47 72 69  te void _dataGri
7220: 64 5f 43 65 6c 6c 56 61 6c 75 65 43 68 61 6e 67  d_CellValueChang
7230: 65 64 28 6f 62 6a 65 63 74 20 73 65 6e 64 65 72  ed(object sender
7240: 2c 20 44 61 74 61 47 72 69 64 56 69 65 77 43 65  , DataGridViewCe
7250: 6c 6c 45 76 65 6e 74 41 72 67 73 20 65 29 0a 20  llEventArgs e). 
7260: 20 20 20 7b 0a 20 20 20 20 20 20 69 66 20 28 5f     {.      if (_
7270: 69 6e 69 74 20 3d 3d 20 74 72 75 65 29 20 72 65  init == true) re
7280: 74 75 72 6e 3b 0a 20 20 20 20 20 20 69 66 20 28  turn;.      if (
7290: 65 2e 52 6f 77 49 6e 64 65 78 20 3e 20 2d 31 29  e.RowIndex > -1)
72a0: 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  .      {.       
72b0: 20 5f 70 72 6f 70 65 72 74 79 47 72 69 64 2e 53   _propertyGrid.S
72c0: 65 6c 65 63 74 65 64 4f 62 6a 65 63 74 73 20 3d  electedObjects =
72d0: 20 5f 70 72 6f 70 65 72 74 79 47 72 69 64 2e 53   _propertyGrid.S
72e0: 65 6c 65 63 74 65 64 4f 62 6a 65 63 74 73 3b 0a  electedObjects;.
72f0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20        }.    }.. 
7300: 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20     private void 
7310: 5f 64 61 74 61 47 72 69 64 5f 55 73 65 72 44 65  _dataGrid_UserDe
7320: 6c 65 74 65 64 52 6f 77 28 6f 62 6a 65 63 74 20  letedRow(object 
7330: 73 65 6e 64 65 72 2c 20 44 61 74 61 47 72 69 64  sender, DataGrid
7340: 56 69 65 77 52 6f 77 45 76 65 6e 74 41 72 67 73  ViewRowEventArgs
7350: 20 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20   e).    {.      
7360: 69 66 20 28 5f 69 6e 69 74 20 3d 3d 20 74 72 75  if (_init == tru
7370: 65 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20  e) return;.     
7380: 20 0a 20 20 20 20 20 20 69 66 20 28 65 2e 52 6f   .      if (e.Ro
7390: 77 2e 54 61 67 20 69 73 20 43 6f 6c 75 6d 6e 29  w.Tag is Column)
73a0: 0a 20 20 20 20 20 20 20 20 4d 61 6b 65 44 69 72  .        MakeDir
73b0: 74 79 28 29 3b 0a 0a 20 20 20 20 20 20 5f 64 61  ty();..      _da
73c0: 74 61 47 72 69 64 5f 53 65 6c 65 63 74 69 6f 6e  taGrid_Selection
73d0: 43 68 61 6e 67 65 64 28 73 65 6e 64 65 72 2c 20  Changed(sender, 
73e0: 65 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70  e);.    }..    p
73f0: 72 69 76 61 74 65 20 76 6f 69 64 20 5f 64 61 74  rivate void _dat
7400: 61 47 72 69 64 5f 55 73 65 72 44 65 6c 65 74 69  aGrid_UserDeleti
7410: 6e 67 52 6f 77 28 6f 62 6a 65 63 74 20 73 65 6e  ngRow(object sen
7420: 64 65 72 2c 20 44 61 74 61 47 72 69 64 56 69 65  der, DataGridVie
7430: 77 52 6f 77 43 61 6e 63 65 6c 45 76 65 6e 74 41  wRowCancelEventA
7440: 72 67 73 20 65 29 0a 20 20 20 20 7b 0a 20 20 20  rgs e).    {.   
7450: 20 20 20 69 66 20 28 5f 69 6e 69 74 20 3d 3d 20     if (_init == 
7460: 74 72 75 65 29 20 72 65 74 75 72 6e 3b 0a 20 20  true) return;.  
7470: 20 20 20 20 69 66 20 28 65 2e 52 6f 77 2e 54 61      if (e.Row.Ta
7480: 67 20 69 73 20 43 6f 6c 75 6d 6e 29 0a 20 20 20  g is Column).   
7490: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 5f 74 61     {.        _ta
74a0: 62 6c 65 2e 43 6f 6c 75 6d 6e 73 2e 52 65 6d 6f  ble.Columns.Remo
74b0: 76 65 28 65 2e 52 6f 77 2e 54 61 67 20 61 73 20  ve(e.Row.Tag as 
74c0: 43 6f 6c 75 6d 6e 29 3b 0a 20 20 20 20 20 20 7d  Column);.      }
74d0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 69 76  .    }..    priv
74e0: 61 74 65 20 76 6f 69 64 20 5f 64 61 74 61 47 72  ate void _dataGr
74f0: 69 64 5f 52 6f 77 73 41 64 64 65 64 28 6f 62 6a  id_RowsAdded(obj
7500: 65 63 74 20 73 65 6e 64 65 72 2c 20 44 61 74 61  ect sender, Data
7510: 47 72 69 64 56 69 65 77 52 6f 77 73 41 64 64 65  GridViewRowsAdde
7520: 64 45 76 65 6e 74 41 72 67 73 20 65 29 0a 20 20  dEventArgs e).  
7530: 20 20 7b 0a 0a 20 20 20 20 7d 0a 0a 20 20 20 20    {..    }..    
7540: 70 72 69 76 61 74 65 20 76 6f 69 64 20 5f 64 61  private void _da
7550: 74 61 47 72 69 64 5f 52 6f 77 73 52 65 6d 6f 76  taGrid_RowsRemov
7560: 65 64 28 6f 62 6a 65 63 74 20 73 65 6e 64 65 72  ed(object sender
7570: 2c 20 44 61 74 61 47 72 69 64 56 69 65 77 52 6f  , DataGridViewRo
7580: 77 73 52 65 6d 6f 76 65 64 45 76 65 6e 74 41 72  wsRemovedEventAr
7590: 67 73 20 65 29 0a 20 20 20 20 7b 0a 0a 20 20 20  gs e).    {..   
75a0: 20 7d 0a 0a 20 20 20 20 70 72 69 76 61 74 65 20   }..    private 
75b0: 52 65 63 74 61 6e 67 6c 65 20 5f 64 72 61 67 42  Rectangle _dragB
75c0: 6f 78 46 72 6f 6d 4d 6f 75 73 65 44 6f 77 6e 3b  oxFromMouseDown;
75d0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 69 6e 74  .    private int
75e0: 20 5f 72 6f 77 49 6e 64 65 78 46 72 6f 6d 4d 6f   _rowIndexFromMo
75f0: 75 73 65 44 6f 77 6e 3b 0a 20 20 20 20 70 72 69  useDown;.    pri
7600: 76 61 74 65 20 69 6e 74 20 5f 72 6f 77 49 6e 64  vate int _rowInd
7610: 65 78 4f 66 49 74 65 6d 55 6e 64 65 72 4d 6f 75  exOfItemUnderMou
7620: 73 65 54 6f 44 72 6f 70 3b 0a 0a 20 20 20 20 70  seToDrop;..    p
7630: 72 69 76 61 74 65 20 76 6f 69 64 20 5f 64 61 74  rivate void _dat
7640: 61 47 72 69 64 5f 44 72 61 67 44 72 6f 70 28 6f  aGrid_DragDrop(o
7650: 62 6a 65 63 74 20 73 65 6e 64 65 72 2c 20 44 72  bject sender, Dr
7660: 61 67 45 76 65 6e 74 41 72 67 73 20 65 29 0a 20  agEventArgs e). 
7670: 20 20 20 7b 0a 20 20 20 20 20 20 2f 2f 20 54 68     {.      // Th
7680: 65 20 6d 6f 75 73 65 20 6c 6f 63 61 74 69 6f 6e  e mouse location
7690: 73 20 61 72 65 20 72 65 6c 61 74 69 76 65 20 74  s are relative t
76a0: 6f 20 74 68 65 20 73 63 72 65 65 6e 2c 20 73 6f  o the screen, so
76b0: 20 74 68 65 79 20 6d 75 73 74 20 62 65 20 0a 20   they must be . 
76c0: 20 20 20 20 20 2f 2f 20 63 6f 6e 76 65 72 74 65       // converte
76d0: 64 20 74 6f 20 63 6c 69 65 6e 74 20 63 6f 6f 72  d to client coor
76e0: 64 69 6e 61 74 65 73 2e 0a 20 20 20 20 20 20 50  dinates..      P
76f0: 6f 69 6e 74 20 63 6c 69 65 6e 74 50 6f 69 6e 74  oint clientPoint
7700: 20 3d 20 5f 64 61 74 61 47 72 69 64 2e 50 6f 69   = _dataGrid.Poi
7710: 6e 74 54 6f 43 6c 69 65 6e 74 28 6e 65 77 20 50  ntToClient(new P
7720: 6f 69 6e 74 28 65 2e 58 2c 20 65 2e 59 29 29 3b  oint(e.X, e.Y));
7730: 0a 0a 20 20 20 20 20 20 69 66 20 28 5f 72 6f 77  ..      if (_row
7740: 49 6e 64 65 78 4f 66 49 74 65 6d 55 6e 64 65 72  IndexOfItemUnder
7750: 4d 6f 75 73 65 54 6f 44 72 6f 70 20 21 3d 20 2d  MouseToDrop != -
7760: 31 29 0a 20 20 20 20 20 20 20 20 5f 64 61 74 61  1).        _data
7770: 47 72 69 64 2e 52 6f 77 73 5b 5f 72 6f 77 49 6e  Grid.Rows[_rowIn
7780: 64 65 78 4f 66 49 74 65 6d 55 6e 64 65 72 4d 6f  dexOfItemUnderMo
7790: 75 73 65 54 6f 44 72 6f 70 5d 2e 44 69 76 69 64  useToDrop].Divid
77a0: 65 72 48 65 69 67 68 74 20 3d 20 30 3b 0a 0a 20  erHeight = 0;.. 
77b0: 20 20 20 20 20 5f 72 6f 77 49 6e 64 65 78 4f 66       _rowIndexOf
77c0: 49 74 65 6d 55 6e 64 65 72 4d 6f 75 73 65 54 6f  ItemUnderMouseTo
77d0: 44 72 6f 70 20 3d 20 5f 64 61 74 61 47 72 69 64  Drop = _dataGrid
77e0: 2e 48 69 74 54 65 73 74 28 63 6c 69 65 6e 74 50  .HitTest(clientP
77f0: 6f 69 6e 74 2e 58 2c 20 63 6c 69 65 6e 74 50 6f  oint.X, clientPo
7800: 69 6e 74 2e 59 29 2e 52 6f 77 49 6e 64 65 78 3b  int.Y).RowIndex;
7810: 0a 0a 20 20 20 20 20 20 69 66 20 28 5f 72 6f 77  ..      if (_row
7820: 49 6e 64 65 78 4f 66 49 74 65 6d 55 6e 64 65 72  IndexOfItemUnder
7830: 4d 6f 75 73 65 54 6f 44 72 6f 70 20 21 3d 20 2d  MouseToDrop != -
7840: 31 29 0a 20 20 20 20 20 20 20 20 5f 64 61 74 61  1).        _data
7850: 47 72 69 64 2e 52 6f 77 73 5b 5f 72 6f 77 49 6e  Grid.Rows[_rowIn
7860: 64 65 78 4f 66 49 74 65 6d 55 6e 64 65 72 4d 6f  dexOfItemUnderMo
7870: 75 73 65 54 6f 44 72 6f 70 5d 2e 44 69 76 69 64  useToDrop].Divid
7880: 65 72 48 65 69 67 68 74 20 3d 20 30 3b 0a 0a 20  erHeight = 0;.. 
7890: 20 20 20 20 20 2f 2f 20 49 66 20 74 68 65 20 64       // If the d
78a0: 72 61 67 20 6f 70 65 72 61 74 69 6f 6e 20 77 61  rag operation wa
78b0: 73 20 61 20 6d 6f 76 65 20 74 68 65 6e 20 72 65  s a move then re
78c0: 6d 6f 76 65 20 61 6e 64 20 69 6e 73 65 72 74 20  move and insert 
78d0: 74 68 65 20 72 6f 77 2e 0a 20 20 20 20 20 20 69  the row..      i
78e0: 66 20 28 65 2e 45 66 66 65 63 74 20 3d 3d 20 44  f (e.Effect == D
78f0: 72 61 67 44 72 6f 70 45 66 66 65 63 74 73 2e 4d  ragDropEffects.M
7900: 6f 76 65 29 0a 20 20 20 20 20 20 7b 0a 20 20 20  ove).      {.   
7910: 20 20 20 20 20 44 61 74 61 47 72 69 64 56 69 65       DataGridVie
7920: 77 52 6f 77 5b 5d 20 72 6f 77 73 54 6f 4d 6f 76  wRow[] rowsToMov
7930: 65 20 3d 20 65 2e 44 61 74 61 2e 47 65 74 44 61  e = e.Data.GetDa
7940: 74 61 28 74 79 70 65 6f 66 28 44 61 74 61 47 72  ta(typeof(DataGr
7950: 69 64 56 69 65 77 52 6f 77 5b 5d 29 29 20 61 73  idViewRow[])) as
7960: 20 44 61 74 61 47 72 69 64 56 69 65 77 52 6f 77   DataGridViewRow
7970: 5b 5d 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 20  [];.        for 
7980: 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20  (int n = 0; n < 
7990: 72 6f 77 73 54 6f 4d 6f 76 65 2e 4c 65 6e 67 74  rowsToMove.Lengt
79a0: 68 3b 20 6e 2b 2b 29 0a 20 20 20 20 20 20 20 20  h; n++).        
79b0: 7b 0a 20 20 20 20 20 20 20 20 20 20 5f 64 61 74  {.          _dat
79c0: 61 47 72 69 64 2e 52 6f 77 73 2e 52 65 6d 6f 76  aGrid.Rows.Remov
79d0: 65 28 72 6f 77 73 54 6f 4d 6f 76 65 5b 6e 5d 29  e(rowsToMove[n])
79e0: 3b 0a 20 20 20 20 20 20 20 20 20 20 5f 74 61 62  ;.          _tab
79f0: 6c 65 2e 43 6f 6c 75 6d 6e 73 2e 52 65 6d 6f 76  le.Columns.Remov
7a00: 65 28 72 6f 77 73 54 6f 4d 6f 76 65 5b 6e 5d 2e  e(rowsToMove[n].
7a10: 54 61 67 20 61 73 20 43 6f 6c 75 6d 6e 29 3b 0a  Tag as Column);.
7a20: 20 20 20 20 20 20 20 20 20 20 5f 64 61 74 61 47            _dataG
7a30: 72 69 64 2e 52 6f 77 73 2e 49 6e 73 65 72 74 28  rid.Rows.Insert(
7a40: 5f 72 6f 77 49 6e 64 65 78 4f 66 49 74 65 6d 55  _rowIndexOfItemU
7a50: 6e 64 65 72 4d 6f 75 73 65 54 6f 44 72 6f 70 2c  nderMouseToDrop,
7a60: 20 72 6f 77 73 54 6f 4d 6f 76 65 5b 6e 5d 29 3b   rowsToMove[n]);
7a70: 0a 20 20 20 20 20 20 20 20 20 20 5f 74 61 62 6c  .          _tabl
7a80: 65 2e 43 6f 6c 75 6d 6e 73 2e 49 6e 73 65 72 74  e.Columns.Insert
7a90: 28 5f 72 6f 77 49 6e 64 65 78 4f 66 49 74 65 6d  (_rowIndexOfItem
7aa0: 55 6e 64 65 72 4d 6f 75 73 65 54 6f 44 72 6f 70  UnderMouseToDrop
7ab0: 2c 20 72 6f 77 73 54 6f 4d 6f 76 65 5b 6e 5d 2e  , rowsToMove[n].
7ac0: 54 61 67 20 61 73 20 43 6f 6c 75 6d 6e 29 3b 0a  Tag as Column);.
7ad0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
7ae0: 20 20 4d 61 6b 65 44 69 72 74 79 28 29 3b 0a 20    MakeDirty();. 
7af0: 20 20 20 20 20 20 20 52 65 66 72 65 73 68 54 6f         RefreshTo
7b00: 6f 6c 62 61 72 73 28 29 3b 0a 20 20 20 20 20 20  olbars();.      
7b10: 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 69  }.    }..    pri
7b20: 76 61 74 65 20 76 6f 69 64 20 5f 64 61 74 61 47  vate void _dataG
7b30: 72 69 64 5f 44 72 61 67 4f 76 65 72 28 6f 62 6a  rid_DragOver(obj
7b40: 65 63 74 20 73 65 6e 64 65 72 2c 20 44 72 61 67  ect sender, Drag
7b50: 45 76 65 6e 74 41 72 67 73 20 65 29 0a 20 20 20  EventArgs e).   
7b60: 20 7b 0a 20 20 20 20 20 20 2f 2f 20 54 68 65 20   {.      // The 
7b70: 6d 6f 75 73 65 20 6c 6f 63 61 74 69 6f 6e 73 20  mouse locations 
7b80: 61 72 65 20 72 65 6c 61 74 69 76 65 20 74 6f 20  are relative to 
7b90: 74 68 65 20 73 63 72 65 65 6e 2c 20 73 6f 20 74  the screen, so t
7ba0: 68 65 79 20 6d 75 73 74 20 62 65 20 0a 20 20 20  hey must be .   
7bb0: 20 20 20 2f 2f 20 63 6f 6e 76 65 72 74 65 64 20     // converted 
7bc0: 74 6f 20 63 6c 69 65 6e 74 20 63 6f 6f 72 64 69  to client coordi
7bd0: 6e 61 74 65 73 2e 0a 20 20 20 20 20 20 50 6f 69  nates..      Poi
7be0: 6e 74 20 63 6c 69 65 6e 74 50 6f 69 6e 74 20 3d  nt clientPoint =
7bf0: 20 5f 64 61 74 61 47 72 69 64 2e 50 6f 69 6e 74   _dataGrid.Point
7c00: 54 6f 43 6c 69 65 6e 74 28 6e 65 77 20 50 6f 69  ToClient(new Poi
7c10: 6e 74 28 65 2e 58 2c 20 65 2e 59 29 29 3b 0a 0a  nt(e.X, e.Y));..
7c20: 20 20 20 20 20 20 2f 2f 20 47 65 74 20 74 68 65        // Get the
7c30: 20 72 6f 77 20 69 6e 64 65 78 20 6f 66 20 74 68   row index of th
7c40: 65 20 69 74 65 6d 20 74 68 65 20 6d 6f 75 73 65  e item the mouse
7c50: 20 69 73 20 62 65 6c 6f 77 2e 20 0a 20 20 20 20   is below. .    
7c60: 20 20 69 66 20 28 5f 72 6f 77 49 6e 64 65 78 4f    if (_rowIndexO
7c70: 66 49 74 65 6d 55 6e 64 65 72 4d 6f 75 73 65 54  fItemUnderMouseT
7c80: 6f 44 72 6f 70 20 21 3d 20 2d 31 29 0a 20 20 20  oDrop != -1).   
7c90: 20 20 20 20 20 5f 64 61 74 61 47 72 69 64 2e 52       _dataGrid.R
7ca0: 6f 77 73 5b 5f 72 6f 77 49 6e 64 65 78 4f 66 49  ows[_rowIndexOfI
7cb0: 74 65 6d 55 6e 64 65 72 4d 6f 75 73 65 54 6f 44  temUnderMouseToD
7cc0: 72 6f 70 5d 2e 44 69 76 69 64 65 72 48 65 69 67  rop].DividerHeig
7cd0: 68 74 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20 5f  ht = 0;..      _
7ce0: 72 6f 77 49 6e 64 65 78 4f 66 49 74 65 6d 55 6e  rowIndexOfItemUn
7cf0: 64 65 72 4d 6f 75 73 65 54 6f 44 72 6f 70 20 3d  derMouseToDrop =
7d00: 20 5f 64 61 74 61 47 72 69 64 2e 48 69 74 54 65   _dataGrid.HitTe
7d10: 73 74 28 63 6c 69 65 6e 74 50 6f 69 6e 74 2e 58  st(clientPoint.X
7d20: 2c 20 63 6c 69 65 6e 74 50 6f 69 6e 74 2e 59 29  , clientPoint.Y)
7d30: 2e 52 6f 77 49 6e 64 65 78 3b 0a 0a 20 20 20 20  .RowIndex;..    
7d40: 20 20 69 66 20 28 5f 64 61 74 61 47 72 69 64 2e    if (_dataGrid.
7d50: 52 6f 77 73 5b 5f 72 6f 77 49 6e 64 65 78 4f 66  Rows[_rowIndexOf
7d60: 49 74 65 6d 55 6e 64 65 72 4d 6f 75 73 65 54 6f  ItemUnderMouseTo
7d70: 44 72 6f 70 5d 2e 49 73 4e 65 77 52 6f 77 20 3d  Drop].IsNewRow =
7d80: 3d 20 66 61 6c 73 65 20 26 26 20 5f 72 6f 77 49  = false && _rowI
7d90: 6e 64 65 78 4f 66 49 74 65 6d 55 6e 64 65 72 4d  ndexOfItemUnderM
7da0: 6f 75 73 65 54 6f 44 72 6f 70 20 21 3d 20 5f 72  ouseToDrop != _r
7db0: 6f 77 49 6e 64 65 78 46 72 6f 6d 4d 6f 75 73 65  owIndexFromMouse
7dc0: 44 6f 77 6e 29 0a 20 20 20 20 20 20 7b 0a 20 20  Down).      {.  
7dd0: 20 20 20 20 20 20 65 2e 45 66 66 65 63 74 20 3d        e.Effect =
7de0: 20 44 72 61 67 44 72 6f 70 45 66 66 65 63 74 73   DragDropEffects
7df0: 2e 4d 6f 76 65 3b 0a 0a 20 20 20 20 20 20 20 20  .Move;..        
7e00: 69 66 20 28 5f 72 6f 77 49 6e 64 65 78 4f 66 49  if (_rowIndexOfI
7e10: 74 65 6d 55 6e 64 65 72 4d 6f 75 73 65 54 6f 44  temUnderMouseToD
7e20: 72 6f 70 20 21 3d 20 2d 31 29 0a 20 20 20 20 20  rop != -1).     
7e30: 20 20 20 20 20 5f 64 61 74 61 47 72 69 64 2e 52       _dataGrid.R
7e40: 6f 77 73 5b 5f 72 6f 77 49 6e 64 65 78 4f 66 49  ows[_rowIndexOfI
7e50: 74 65 6d 55 6e 64 65 72 4d 6f 75 73 65 54 6f 44  temUnderMouseToD
7e60: 72 6f 70 5d 2e 44 69 76 69 64 65 72 48 65 69 67  rop].DividerHeig
7e70: 68 74 20 3d 20 33 3b 0a 20 20 20 20 20 20 7d 0a  ht = 3;.      }.
7e80: 20 20 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20        else.     
7e90: 20 20 20 65 2e 45 66 66 65 63 74 20 3d 20 44 72     e.Effect = Dr
7ea0: 61 67 44 72 6f 70 45 66 66 65 63 74 73 2e 4e 6f  agDropEffects.No
7eb0: 6e 65 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70  ne;.    }..    p
7ec0: 72 69 76 61 74 65 20 76 6f 69 64 20 5f 64 61 74  rivate void _dat
7ed0: 61 47 72 69 64 5f 4d 6f 75 73 65 44 6f 77 6e 28  aGrid_MouseDown(
7ee0: 6f 62 6a 65 63 74 20 73 65 6e 64 65 72 2c 20 4d  object sender, M
7ef0: 6f 75 73 65 45 76 65 6e 74 41 72 67 73 20 65 29  ouseEventArgs e)
7f00: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 2f 2f 20  .    {.      // 
7f10: 47 65 74 20 74 68 65 20 69 6e 64 65 78 20 6f 66  Get the index of
7f20: 20 74 68 65 20 69 74 65 6d 20 74 68 65 20 6d 6f   the item the mo
7f30: 75 73 65 20 69 73 20 62 65 6c 6f 77 2e 0a 20 20  use is below..  
7f40: 20 20 20 20 5f 72 6f 77 49 6e 64 65 78 46 72 6f      _rowIndexFro
7f50: 6d 4d 6f 75 73 65 44 6f 77 6e 20 3d 20 5f 64 61  mMouseDown = _da
7f60: 74 61 47 72 69 64 2e 48 69 74 54 65 73 74 28 65  taGrid.HitTest(e
7f70: 2e 58 2c 20 65 2e 59 29 2e 52 6f 77 49 6e 64 65  .X, e.Y).RowInde
7f80: 78 3b 0a 0a 20 20 20 20 20 20 69 66 20 28 5f 72  x;..      if (_r
7f90: 6f 77 49 6e 64 65 78 46 72 6f 6d 4d 6f 75 73 65  owIndexFromMouse
7fa0: 44 6f 77 6e 20 21 3d 20 2d 31 29 0a 20 20 20 20  Down != -1).    
7fb0: 20 20 7b 0a 20 20 20 20 20 20 20 20 2f 2f 20 52    {.        // R
7fc0: 65 6d 65 6d 62 65 72 20 74 68 65 20 70 6f 69 6e  emember the poin
7fd0: 74 20 77 68 65 72 65 20 74 68 65 20 6d 6f 75 73  t where the mous
7fe0: 65 20 64 6f 77 6e 20 6f 63 63 75 72 72 65 64 2e  e down occurred.
7ff0: 20 0a 20 20 20 20 20 20 20 20 2f 2f 20 54 68 65   .        // The
8000: 20 44 72 61 67 53 69 7a 65 20 69 6e 64 69 63 61   DragSize indica
8010: 74 65 73 20 74 68 65 20 73 69 7a 65 20 74 68 61  tes the size tha
8020: 74 20 74 68 65 20 6d 6f 75 73 65 20 63 61 6e 20  t the mouse can 
8030: 6d 6f 76 65 20 0a 20 20 20 20 20 20 20 20 2f 2f  move .        //
8040: 20 62 65 66 6f 72 65 20 61 20 64 72 61 67 20 65   before a drag e
8050: 76 65 6e 74 20 73 68 6f 75 6c 64 20 62 65 20 73  vent should be s
8060: 74 61 72 74 65 64 2e 20 0a 20 20 20 20 20 20 20  tarted. .       
8070: 20 53 69 7a 65 20 64 72 61 67 53 69 7a 65 20 3d   Size dragSize =
8080: 20 53 79 73 74 65 6d 49 6e 66 6f 72 6d 61 74 69   SystemInformati
8090: 6f 6e 2e 44 72 61 67 53 69 7a 65 3b 0a 0a 20 20  on.DragSize;..  
80a0: 20 20 20 20 20 20 2f 2f 20 43 72 65 61 74 65 20        // Create 
80b0: 61 20 72 65 63 74 61 6e 67 6c 65 20 75 73 69 6e  a rectangle usin
80c0: 67 20 74 68 65 20 44 72 61 67 53 69 7a 65 2c 20  g the DragSize, 
80d0: 77 69 74 68 20 74 68 65 20 6d 6f 75 73 65 20 70  with the mouse p
80e0: 6f 73 69 74 69 6f 6e 20 62 65 69 6e 67 0a 20 20  osition being.  
80f0: 20 20 20 20 20 20 2f 2f 20 61 74 20 74 68 65 20        // at the 
8100: 63 65 6e 74 65 72 20 6f 66 20 74 68 65 20 72 65  center of the re
8110: 63 74 61 6e 67 6c 65 2e 0a 20 20 20 20 20 20 20  ctangle..       
8120: 20 5f 64 72 61 67 42 6f 78 46 72 6f 6d 4d 6f 75   _dragBoxFromMou
8130: 73 65 44 6f 77 6e 20 3d 20 6e 65 77 20 52 65 63  seDown = new Rec
8140: 74 61 6e 67 6c 65 28 6e 65 77 20 50 6f 69 6e 74  tangle(new Point
8150: 28 65 2e 58 20 2d 20 28 64 72 61 67 53 69 7a 65  (e.X - (dragSize
8160: 2e 57 69 64 74 68 20 2f 20 32 29 2c 20 65 2e 59  .Width / 2), e.Y
8170: 20 2d 20 28 64 72 61 67 53 69 7a 65 2e 48 65 69   - (dragSize.Hei
8180: 67 68 74 20 2f 20 32 29 29 2c 20 64 72 61 67 53  ght / 2)), dragS
8190: 69 7a 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ize);.      }.  
81a0: 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20 20 20      else.       
81b0: 20 2f 2f 20 52 65 73 65 74 20 74 68 65 20 72 65   // Reset the re
81c0: 63 74 61 6e 67 6c 65 20 69 66 20 74 68 65 20 6d  ctangle if the m
81d0: 6f 75 73 65 20 69 73 20 6e 6f 74 20 6f 76 65 72  ouse is not over
81e0: 20 61 6e 20 69 74 65 6d 20 69 6e 20 74 68 65 20   an item in the 
81f0: 4c 69 73 74 42 6f 78 2e 0a 20 20 20 20 20 20 20  ListBox..       
8200: 20 5f 64 72 61 67 42 6f 78 46 72 6f 6d 4d 6f 75   _dragBoxFromMou
8210: 73 65 44 6f 77 6e 20 3d 20 52 65 63 74 61 6e 67  seDown = Rectang
8220: 6c 65 2e 45 6d 70 74 79 3b 0a 20 20 20 20 7d 0a  le.Empty;.    }.
8230: 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69  .    private voi
8240: 64 20 5f 64 61 74 61 47 72 69 64 5f 4d 6f 75 73  d _dataGrid_Mous
8250: 65 4d 6f 76 65 28 6f 62 6a 65 63 74 20 73 65 6e  eMove(object sen
8260: 64 65 72 2c 20 4d 6f 75 73 65 45 76 65 6e 74 41  der, MouseEventA
8270: 72 67 73 20 65 29 0a 20 20 20 20 7b 0a 20 20 20  rgs e).    {.   
8280: 20 20 20 69 66 20 28 28 65 2e 42 75 74 74 6f 6e     if ((e.Button
8290: 20 26 20 4d 6f 75 73 65 42 75 74 74 6f 6e 73 2e   & MouseButtons.
82a0: 4c 65 66 74 29 20 3d 3d 20 4d 6f 75 73 65 42 75  Left) == MouseBu
82b0: 74 74 6f 6e 73 2e 4c 65 66 74 29 0a 20 20 20 20  ttons.Left).    
82c0: 20 20 7b 0a 20 20 20 20 20 20 20 20 2f 2f 20 49    {.        // I
82d0: 66 20 74 68 65 20 6d 6f 75 73 65 20 6d 6f 76 65  f the mouse move
82e0: 73 20 6f 75 74 73 69 64 65 20 74 68 65 20 72 65  s outside the re
82f0: 63 74 61 6e 67 6c 65 2c 20 73 74 61 72 74 20 74  ctangle, start t
8300: 68 65 20 64 72 61 67 2e 0a 20 20 20 20 20 20 20  he drag..       
8310: 20 69 66 20 28 5f 64 72 61 67 42 6f 78 46 72 6f   if (_dragBoxFro
8320: 6d 4d 6f 75 73 65 44 6f 77 6e 20 21 3d 20 52 65  mMouseDown != Re
8330: 63 74 61 6e 67 6c 65 2e 45 6d 70 74 79 20 26 26  ctangle.Empty &&
8340: 20 21 5f 64 72 61 67 42 6f 78 46 72 6f 6d 4d 6f   !_dragBoxFromMo
8350: 75 73 65 44 6f 77 6e 2e 43 6f 6e 74 61 69 6e 73  useDown.Contains
8360: 28 65 2e 58 2c 20 65 2e 59 29 29 0a 20 20 20 20  (e.X, e.Y)).    
8370: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
8380: 5f 72 6f 77 49 6e 64 65 78 4f 66 49 74 65 6d 55  _rowIndexOfItemU
8390: 6e 64 65 72 4d 6f 75 73 65 54 6f 44 72 6f 70 20  nderMouseToDrop 
83a0: 3d 20 2d 31 3b 0a 20 20 20 20 20 20 20 20 20 20  = -1;.          
83b0: 5f 64 61 74 61 47 72 69 64 2e 45 6e 64 45 64 69  _dataGrid.EndEdi
83c0: 74 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 2f  t();.          /
83d0: 2f 20 50 72 6f 63 65 65 64 20 77 69 74 68 20 74  / Proceed with t
83e0: 68 65 20 64 72 61 67 20 61 6e 64 20 64 72 6f 70  he drag and drop
83f0: 2c 20 70 61 73 73 69 6e 67 20 69 6e 20 74 68 65  , passing in the
8400: 20 6c 69 73 74 20 69 74 65 6d 2e 20 0a 20 20 20   list item. .   
8410: 20 20 20 20 20 20 20 44 72 61 67 44 72 6f 70 45         DragDropE
8420: 66 66 65 63 74 73 20 64 72 6f 70 45 66 66 65 63  ffects dropEffec
8430: 74 20 3d 20 5f 64 61 74 61 47 72 69 64 2e 44 6f  t = _dataGrid.Do
8440: 44 72 61 67 44 72 6f 70 28 53 65 6c 65 63 74 65  DragDrop(Selecte
8450: 64 52 6f 77 73 2c 20 44 72 61 67 44 72 6f 70 45  dRows, DragDropE
8460: 66 66 65 63 74 73 2e 4d 6f 76 65 29 3b 0a 20 20  ffects.Move);.  
8470: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
8480: 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 69 76 61      }..    priva
8490: 74 65 20 76 6f 69 64 20 5f 64 61 74 61 47 72 69  te void _dataGri
84a0: 64 5f 43 65 6c 6c 56 61 6c 69 64 61 74 65 64 28  d_CellValidated(
84b0: 6f 62 6a 65 63 74 20 73 65 6e 64 65 72 2c 20 44  object sender, D
84c0: 61 74 61 47 72 69 64 56 69 65 77 43 65 6c 6c 45  ataGridViewCellE
84d0: 76 65 6e 74 41 72 67 73 20 65 29 0a 20 20 20 20  ventArgs e).    
84e0: 7b 0a 20 20 20 20 20 20 44 61 74 61 47 72 69 64  {.      DataGrid
84f0: 56 69 65 77 52 6f 77 20 72 6f 77 20 3d 20 5f 64  ViewRow row = _d
8500: 61 74 61 47 72 69 64 2e 52 6f 77 73 5b 65 2e 52  ataGrid.Rows[e.R
8510: 6f 77 49 6e 64 65 78 5d 3b 0a 20 20 20 20 20 20  owIndex];.      
8520: 43 6f 6c 75 6d 6e 20 63 6f 6c 20 3d 20 72 6f 77  Column col = row
8530: 2e 54 61 67 20 61 73 20 43 6f 6c 75 6d 6e 3b 0a  .Tag as Column;.
8540: 0a 20 20 20 20 20 20 69 66 20 28 63 6f 6c 20 3d  .      if (col =
8550: 3d 20 6e 75 6c 6c 20 26 26 20 72 6f 77 2e 49 73  = null && row.Is
8560: 4e 65 77 52 6f 77 20 3d 3d 20 66 61 6c 73 65 29  NewRow == false)
8570: 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  .      {.       
8580: 20 63 6f 6c 20 3d 20 6e 65 77 20 43 6f 6c 75 6d   col = new Colum
8590: 6e 28 5f 74 61 62 6c 65 2c 20 72 6f 77 29 3b 0a  n(_table, row);.
85a0: 20 20 20 20 20 20 20 20 72 6f 77 2e 54 61 67 20          row.Tag 
85b0: 3d 20 63 6f 6c 3b 0a 20 20 20 20 20 20 20 20 5f  = col;.        _
85c0: 74 61 62 6c 65 2e 43 6f 6c 75 6d 6e 73 2e 49 6e  table.Columns.In
85d0: 73 65 72 74 28 72 6f 77 2e 49 6e 64 65 78 2c 20  sert(row.Index, 
85e0: 63 6f 6c 29 3b 0a 20 20 20 20 20 20 20 20 5f 64  col);.        _d
85f0: 61 74 61 47 72 69 64 5f 53 65 6c 65 63 74 69 6f  ataGrid_Selectio
8600: 6e 43 68 61 6e 67 65 64 28 74 68 69 73 2c 20 6e  nChanged(this, n
8610: 65 77 20 45 76 65 6e 74 41 72 67 73 28 29 29 3b  ew EventArgs());
8620: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
8630: 66 20 28 63 6f 6c 20 21 3d 20 6e 75 6c 6c 29 0a  f (col != null).
8640: 20 20 20 20 20 20 20 20 63 6f 6c 2e 43 65 6c 6c          col.Cell
8650: 56 61 6c 75 65 43 68 61 6e 67 65 64 28 65 2e 52  ValueChanged(e.R
8660: 6f 77 49 6e 64 65 78 2c 20 65 2e 43 6f 6c 75 6d  owIndex, e.Colum
8670: 6e 49 6e 64 65 78 29 3b 0a 0a 20 20 20 20 20 20  nIndex);..      
8680: 52 65 66 72 65 73 68 54 6f 6f 6c 62 61 72 73 28  RefreshToolbars(
8690: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20  );.    }.  }..  
86a0: 69 6e 74 65 72 6e 61 6c 20 63 6c 61 73 73 20 45  internal class E
86b0: 64 69 74 6f 72 48 6f 6c 64 65 72 0a 20 20 7b 0a  ditorHolder.  {.
86c0: 20 20 20 20 70 72 69 76 61 74 65 20 4c 69 73 74      private List
86d0: 3c 49 6e 64 65 78 3e 20 5f 69 6e 64 65 78 65 73  <Index> _indexes
86e0: 3b 0a 20 20 20 20 70 72 69 76 61 74 65 20 4c 69  ;.    private Li
86f0: 73 74 3c 46 6f 72 65 69 67 6e 4b 65 79 3e 20 5f  st<ForeignKey> _
8700: 66 6b 65 79 73 3b 0a 20 20 20 20 70 72 69 76 61  fkeys;.    priva
8710: 74 65 20 4c 69 73 74 3c 73 74 72 69 6e 67 3e 20  te List<string> 
8720: 5f 63 68 65 63 6b 3b 0a 20 20 20 20 70 72 69 76  _check;.    priv
8730: 61 74 65 20 4c 69 73 74 3c 54 72 69 67 67 65 72  ate List<Trigger
8740: 3e 20 5f 74 72 69 67 67 65 72 73 3b 0a 0a 20 20  > _triggers;..  
8750: 20 20 69 6e 74 65 72 6e 61 6c 20 45 64 69 74 6f    internal Edito
8760: 72 48 6f 6c 64 65 72 28 54 61 62 6c 65 20 74 62  rHolder(Table tb
8770: 6c 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 5f  l).    {.      _
8780: 69 6e 64 65 78 65 73 20 3d 20 74 62 6c 2e 49 6e  indexes = tbl.In
8790: 64 65 78 65 73 3b 0a 20 20 20 20 20 20 5f 66 6b  dexes;.      _fk
87a0: 65 79 73 20 3d 20 74 62 6c 2e 46 6f 72 65 69 67  eys = tbl.Foreig
87b0: 6e 4b 65 79 73 3b 0a 20 20 20 20 20 20 5f 63 68  nKeys;.      _ch
87c0: 65 63 6b 20 3d 20 74 62 6c 2e 43 68 65 63 6b 3b  eck = tbl.Check;
87d0: 0a 20 20 20 20 20 20 5f 74 72 69 67 67 65 72 73  .      _triggers
87e0: 20 3d 20 74 62 6c 2e 54 72 69 67 67 65 72 73 20   = tbl.Triggers 
87f0: 61 73 20 4c 69 73 74 3c 54 72 69 67 67 65 72 3e  as List<Trigger>
8800: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 75 62  ;.    }..    pub
8810: 6c 69 63 20 4c 69 73 74 3c 49 6e 64 65 78 3e 20  lic List<Index> 
8820: 49 6e 64 65 78 65 73 0a 20 20 20 20 7b 0a 20 20  Indexes.    {.  
8830: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
8840: 20 5f 69 6e 64 65 78 65 73 3b 20 7d 0a 20 20 20   _indexes; }.   
8850: 20 7d 0a 0a 20 20 20 20 70 75 62 6c 69 63 20 4c   }..    public L
8860: 69 73 74 3c 46 6f 72 65 69 67 6e 4b 65 79 3e 20  ist<ForeignKey> 
8870: 46 6f 72 65 69 67 6e 4b 65 79 73 0a 20 20 20 20  ForeignKeys.    
8880: 7b 0a 20 20 20 20 20 20 67 65 74 20 7b 20 72 65  {.      get { re
8890: 74 75 72 6e 20 5f 66 6b 65 79 73 3b 20 7d 0a 20  turn _fkeys; }. 
88a0: 20 20 20 7d 0a 0a 20 20 20 20 70 75 62 6c 69 63     }..    public
88b0: 20 4c 69 73 74 3c 73 74 72 69 6e 67 3e 20 43 68   List<string> Ch
88c0: 65 63 6b 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  eck.    {.      
88d0: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 63 68  get { return _ch
88e0: 65 63 6b 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20  eck; }.    }..  
88f0: 20 20 70 75 62 6c 69 63 20 4c 69 73 74 3c 54 72    public List<Tr
8900: 69 67 67 65 72 3e 20 54 72 69 67 67 65 72 73 0a  igger> Triggers.
8910: 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74 20      {.      get 
8920: 7b 20 72 65 74 75 72 6e 20 5f 74 72 69 67 67 65  { return _trigge
8930: 72 73 3b 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a  rs; }.    }.  }.
8940: 0a 20 20 70 75 62 6c 69 63 20 63 6c 61 73 73 20  .  public class 
8950: 44 65 73 69 67 6e 65 72 44 6f 63 42 61 73 65 20  DesignerDocBase 
8960: 3a 20 55 73 65 72 43 6f 6e 74 72 6f 6c 0a 20 20  : UserControl.  
8970: 7b 0a 20 20 20 20 70 75 62 6c 69 63 20 76 69 72  {.    public vir
8980: 74 75 61 6c 20 73 74 72 69 6e 67 20 43 61 6e 6f  tual string Cano
8990: 6e 69 63 61 6c 4e 61 6d 65 0a 20 20 20 20 7b 0a  nicalName.    {.
89a0: 20 20 20 20 20 20 67 65 74 0a 20 20 20 20 20 20        get.      
89b0: 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  {.        return
89c0: 20 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 7d 0a 20   null;.      }. 
89d0: 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 69 6e 74 65     }.  }..  inte
89e0: 72 6e 61 6c 20 63 6c 61 73 73 20 46 61 6b 65 48  rnal class FakeH
89f0: 69 65 72 61 72 63 68 79 20 3a 20 49 56 73 55 49  ierarchy : IVsUI
8a00: 48 69 65 72 61 72 63 68 79 2c 20 49 56 73 50 65  Hierarchy, IVsPe
8a10: 72 73 69 73 74 48 69 65 72 61 72 63 68 79 49 74  rsistHierarchyIt
8a20: 65 6d 32 0a 20 20 7b 0a 20 20 20 20 44 65 73 69  em2.  {.    Desi
8a30: 67 6e 65 72 44 6f 63 42 61 73 65 20 5f 63 6f 6e  gnerDocBase _con
8a40: 74 72 6f 6c 3b 0a 20 20 20 20 49 56 73 55 49 48  trol;.    IVsUIH
8a50: 69 65 72 61 72 63 68 79 20 5f 6f 77 6e 65 72 3b  ierarchy _owner;
8a60: 0a 20 20 20 20 44 69 63 74 69 6f 6e 61 72 79 3c  .    Dictionary<
8a70: 75 69 6e 74 2c 20 49 56 73 48 69 65 72 61 72 63  uint, IVsHierarc
8a80: 68 79 45 76 65 6e 74 73 3e 20 5f 65 76 65 6e 74  hyEvents> _event
8a90: 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61  s = new Dictiona
8aa0: 72 79 3c 75 69 6e 74 2c 20 49 56 73 48 69 65 72  ry<uint, IVsHier
8ab0: 61 72 63 68 79 45 76 65 6e 74 73 3e 28 29 3b 0a  archyEvents>();.
8ac0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 46 61  .    internal Fa
8ad0: 6b 65 48 69 65 72 61 72 63 68 79 28 44 65 73 69  keHierarchy(Desi
8ae0: 67 6e 65 72 44 6f 63 42 61 73 65 20 63 6f 6e 74  gnerDocBase cont
8af0: 72 6f 6c 2c 20 49 56 73 55 49 48 69 65 72 61 72  rol, IVsUIHierar
8b00: 63 68 79 20 6f 77 6e 65 72 29 0a 20 20 20 20 7b  chy owner).    {
8b10: 0a 20 20 20 20 20 20 5f 63 6f 6e 74 72 6f 6c 20  .      _control 
8b20: 3d 20 63 6f 6e 74 72 6f 6c 3b 0a 20 20 20 20 20  = control;.     
8b30: 20 5f 6f 77 6e 65 72 20 3d 20 6f 77 6e 65 72 3b   _owner = owner;
8b40: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 72 65 67  .    }..    #reg
8b50: 69 6f 6e 20 49 56 73 55 49 48 69 65 72 61 72 63  ion IVsUIHierarc
8b60: 68 79 20 4d 65 6d 62 65 72 73 0a 0a 20 20 20 20  hy Members..    
8b70: 69 6e 74 20 49 56 73 55 49 48 69 65 72 61 72 63  int IVsUIHierarc
8b80: 68 79 2e 41 64 76 69 73 65 48 69 65 72 61 72 63  hy.AdviseHierarc
8b90: 68 79 45 76 65 6e 74 73 28 49 56 73 48 69 65 72  hyEvents(IVsHier
8ba0: 61 72 63 68 79 45 76 65 6e 74 73 20 70 45 76 65  archyEvents pEve
8bb0: 6e 74 53 69 6e 6b 2c 20 6f 75 74 20 75 69 6e 74  ntSink, out uint
8bc0: 20 70 64 77 43 6f 6f 6b 69 65 29 0a 20 20 20 20   pdwCookie).    
8bd0: 7b 0a 20 20 20 20 20 20 70 64 77 43 6f 6f 6b 69  {.      pdwCooki
8be0: 65 20 3d 20 31 30 30 3b 0a 20 20 20 20 20 20 77  e = 100;.      w
8bf0: 68 69 6c 65 20 28 5f 65 76 65 6e 74 73 2e 43 6f  hile (_events.Co
8c00: 6e 74 61 69 6e 73 4b 65 79 28 70 64 77 43 6f 6f  ntainsKey(pdwCoo
8c10: 6b 69 65 29 29 0a 20 20 20 20 20 20 20 20 70 64  kie)).        pd
8c20: 77 43 6f 6f 6b 69 65 2b 2b 3b 0a 0a 20 20 20 20  wCookie++;..    
8c30: 20 20 5f 65 76 65 6e 74 73 5b 70 64 77 43 6f 6f    _events[pdwCoo
8c40: 6b 69 65 5d 20 3d 20 70 45 76 65 6e 74 53 69 6e  kie] = pEventSin
8c50: 6b 3b 0a 0a 20 20 20 20 20 20 72 65 74 75 72 6e  k;..      return
8c60: 20 56 53 43 6f 6e 73 74 61 6e 74 73 2e 53 5f 4f   VSConstants.S_O
8c70: 4b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e  K;.    }..    in
8c80: 74 20 49 56 73 55 49 48 69 65 72 61 72 63 68 79  t IVsUIHierarchy
8c90: 2e 43 6c 6f 73 65 28 29 0a 20 20 20 20 7b 0a 20  .Close().    {. 
8ca0: 20 20 20 20 20 72 65 74 75 72 6e 20 56 53 43 6f       return VSCo
8cb0: 6e 73 74 61 6e 74 73 2e 53 5f 4f 4b 3b 0a 20 20  nstants.S_OK;.  
8cc0: 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20 49 56 73    }..    int IVs
8cd0: 55 49 48 69 65 72 61 72 63 68 79 2e 45 78 65 63  UIHierarchy.Exec
8ce0: 43 6f 6d 6d 61 6e 64 28 75 69 6e 74 20 69 74 65  Command(uint ite
8cf0: 6d 69 64 2c 20 72 65 66 20 47 75 69 64 20 70 67  mid, ref Guid pg
8d00: 75 69 64 43 6d 64 47 72 6f 75 70 2c 20 75 69 6e  uidCmdGroup, uin
8d10: 74 20 6e 43 6d 64 49 44 2c 20 75 69 6e 74 20 6e  t nCmdID, uint n
8d20: 43 6d 64 65 78 65 63 6f 70 74 2c 20 49 6e 74 50  Cmdexecopt, IntP
8d30: 74 72 20 70 76 61 49 6e 2c 20 49 6e 74 50 74 72  tr pvaIn, IntPtr
8d40: 20 70 76 61 4f 75 74 29 0a 20 20 20 20 7b 0a 20   pvaOut).    {. 
8d50: 20 20 20 20 20 72 65 74 75 72 6e 20 56 53 43 6f       return VSCo
8d60: 6e 73 74 61 6e 74 73 2e 45 5f 4e 4f 54 49 4d 50  nstants.E_NOTIMP
8d70: 4c 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e  L;.    }..    in
8d80: 74 20 49 56 73 55 49 48 69 65 72 61 72 63 68 79  t IVsUIHierarchy
8d90: 2e 47 65 74 43 61 6e 6f 6e 69 63 61 6c 4e 61 6d  .GetCanonicalNam
8da0: 65 28 75 69 6e 74 20 69 74 65 6d 69 64 2c 20 6f  e(uint itemid, o
8db0: 75 74 20 73 74 72 69 6e 67 20 70 62 73 74 72 4e  ut string pbstrN
8dc0: 61 6d 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  ame).    {.     
8dd0: 20 70 62 73 74 72 4e 61 6d 65 20 3d 20 5f 63 6f   pbstrName = _co
8de0: 6e 74 72 6f 6c 2e 43 61 6e 6f 6e 69 63 61 6c 4e  ntrol.CanonicalN
8df0: 61 6d 65 3b 0a 20 20 20 20 20 20 72 65 74 75 72  ame;.      retur
8e00: 6e 20 56 53 43 6f 6e 73 74 61 6e 74 73 2e 53 5f  n VSConstants.S_
8e10: 4f 4b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  OK;.    }..    i
8e20: 6e 74 20 49 56 73 55 49 48 69 65 72 61 72 63 68  nt IVsUIHierarch
8e30: 79 2e 47 65 74 47 75 69 64 50 72 6f 70 65 72 74  y.GetGuidPropert
8e40: 79 28 75 69 6e 74 20 69 74 65 6d 69 64 2c 20 69  y(uint itemid, i
8e50: 6e 74 20 70 72 6f 70 69 64 2c 20 6f 75 74 20 47  nt propid, out G
8e60: 75 69 64 20 70 67 75 69 64 29 0a 20 20 20 20 7b  uid pguid).    {
8e70: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6f  .      return _o
8e80: 77 6e 65 72 2e 47 65 74 47 75 69 64 50 72 6f 70  wner.GetGuidProp
8e90: 65 72 74 79 28 69 74 65 6d 69 64 2c 20 70 72 6f  erty(itemid, pro
8ea0: 70 69 64 2c 20 6f 75 74 20 70 67 75 69 64 29 3b  pid, out pguid);
8eb0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20  .    }..    int 
8ec0: 49 56 73 55 49 48 69 65 72 61 72 63 68 79 2e 47  IVsUIHierarchy.G
8ed0: 65 74 4e 65 73 74 65 64 48 69 65 72 61 72 63 68  etNestedHierarch
8ee0: 79 28 75 69 6e 74 20 69 74 65 6d 69 64 2c 20 72  y(uint itemid, r
8ef0: 65 66 20 47 75 69 64 20 69 69 64 48 69 65 72 61  ef Guid iidHiera
8f00: 72 63 68 79 4e 65 73 74 65 64 2c 20 6f 75 74 20  rchyNested, out 
8f10: 49 6e 74 50 74 72 20 70 70 48 69 65 72 61 72 63  IntPtr ppHierarc
8f20: 68 79 4e 65 73 74 65 64 2c 20 6f 75 74 20 75 69  hyNested, out ui
8f30: 6e 74 20 70 69 74 65 6d 69 64 4e 65 73 74 65 64  nt pitemidNested
8f40: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 70 70  ).    {.      pp
8f50: 48 69 65 72 61 72 63 68 79 4e 65 73 74 65 64 20  HierarchyNested 
8f60: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0a 20  = IntPtr.Zero;. 
8f70: 20 20 20 20 20 70 69 74 65 6d 69 64 4e 65 73 74       pitemidNest
8f80: 65 64 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20 72  ed = 0;..      r
8f90: 65 74 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74  eturn VSConstant
8fa0: 73 2e 45 5f 4e 4f 54 49 4d 50 4c 3b 0a 20 20 20  s.E_NOTIMPL;.   
8fb0: 20 7d 0a 0a 20 20 20 20 69 6e 74 20 49 56 73 55   }..    int IVsU
8fc0: 49 48 69 65 72 61 72 63 68 79 2e 47 65 74 50 72  IHierarchy.GetPr
8fd0: 6f 70 65 72 74 79 28 75 69 6e 74 20 69 74 65 6d  operty(uint item
8fe0: 69 64 2c 20 69 6e 74 20 70 72 6f 70 69 64 2c 20  id, int propid, 
8ff0: 6f 75 74 20 6f 62 6a 65 63 74 20 70 76 61 72 29  out object pvar)
9000: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 70 76 61  .    {.      pva
9010: 72 20 3d 20 6e 75 6c 6c 3b 0a 0a 20 20 20 20 20  r = null;..     
9020: 20 73 77 69 74 63 68 20 28 28 5f 5f 56 53 48 50   switch ((__VSHP
9030: 52 4f 50 49 44 29 70 72 6f 70 69 64 29 0a 20 20  ROPID)propid).  
9040: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 63 61      {.        ca
9050: 73 65 20 5f 5f 56 53 48 50 52 4f 50 49 44 2e 56  se __VSHPROPID.V
9060: 53 48 50 52 4f 50 49 44 5f 41 6c 6c 6f 77 45 64  SHPROPID_AllowEd
9070: 69 74 49 6e 52 75 6e 4d 6f 64 65 3a 0a 20 20 20  itInRunMode:.   
9080: 20 20 20 20 20 20 20 70 76 61 72 20 3d 20 74 72         pvar = tr
9090: 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72  ue;.          br
90a0: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73  eak;.        cas
90b0: 65 20 5f 5f 56 53 48 50 52 4f 50 49 44 2e 56 53  e __VSHPROPID.VS
90c0: 48 50 52 4f 50 49 44 5f 43 61 6e 42 75 69 6c 64  HPROPID_CanBuild
90d0: 46 72 6f 6d 4d 65 6d 6f 72 79 3a 0a 20 20 20 20  FromMemory:.    
90e0: 20 20 20 20 20 20 70 76 61 72 20 3d 20 74 72 75        pvar = tru
90f0: 65 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  e;.          bre
9100: 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65  ak;.        case
9110: 20 5f 5f 56 53 48 50 52 4f 50 49 44 2e 56 53 48   __VSHPROPID.VSH
9120: 50 52 4f 50 49 44 5f 43 61 70 74 69 6f 6e 3a 0a  PROPID_Caption:.
9130: 20 20 20 20 20 20 20 20 63 61 73 65 20 5f 5f 56          case __V
9140: 53 48 50 52 4f 50 49 44 2e 56 53 48 50 52 4f 50  SHPROPID.VSHPROP
9150: 49 44 5f 53 61 76 65 4e 61 6d 65 3a 0a 20 20 20  ID_SaveName:.   
9160: 20 20 20 20 20 20 20 70 76 61 72 20 3d 20 5f 63         pvar = _c
9170: 6f 6e 74 72 6f 6c 2e 43 61 6e 6f 6e 69 63 61 6c  ontrol.Canonical
9180: 4e 61 6d 65 3b 0a 20 20 20 20 20 20 20 20 20 20  Name;.          
9190: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63  break;.        c
91a0: 61 73 65 20 5f 5f 56 53 48 50 52 4f 50 49 44 2e  ase __VSHPROPID.
91b0: 56 53 48 50 52 4f 50 49 44 5f 49 73 48 69 64 64  VSHPROPID_IsHidd
91c0: 65 6e 49 74 65 6d 3a 0a 20 20 20 20 20 20 20 20  enItem:.        
91d0: 20 20 70 76 61 72 20 3d 20 74 72 75 65 3b 0a 20    pvar = true;. 
91e0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
91f0: 20 20 20 20 20 20 20 20 63 61 73 65 20 5f 5f 56          case __V
9200: 53 48 50 52 4f 50 49 44 2e 56 53 48 50 52 4f 50  SHPROPID.VSHPROP
9210: 49 44 5f 49 73 4e 65 77 55 6e 73 61 76 65 64 49  ID_IsNewUnsavedI
9220: 74 65 6d 3a 0a 20 20 20 20 20 20 20 20 20 20 70  tem:.          p
9230: 76 61 72 20 3d 20 74 72 75 65 3b 0a 20 20 20 20  var = true;.    
9240: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
9250: 20 20 20 20 20 63 61 73 65 20 5f 5f 56 53 48 50       case __VSHP
9260: 52 4f 50 49 44 2e 56 53 48 50 52 4f 50 49 44 5f  ROPID.VSHPROPID_
9270: 53 68 6f 77 4f 6e 6c 79 49 74 65 6d 43 61 70 74  ShowOnlyItemCapt
9280: 69 6f 6e 3a 0a 20 20 20 20 20 20 20 20 20 20 70  ion:.          p
9290: 76 61 72 20 3d 20 74 72 75 65 3b 0a 20 20 20 20  var = true;.    
92a0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
92b0: 20 20 20 20 20 63 61 73 65 20 5f 5f 56 53 48 50       case __VSHP
92c0: 52 4f 50 49 44 2e 56 53 48 50 52 4f 50 49 44 5f  ROPID.VSHPROPID_
92d0: 49 63 6f 6e 49 6d 67 4c 69 73 74 3a 0a 20 20 20  IconImgList:.   
92e0: 20 20 20 20 20 20 20 70 76 61 72 20 3d 20 30 3b         pvar = 0;
92f0: 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
9300: 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 5f  ;.        case _
9310: 5f 56 53 48 50 52 4f 50 49 44 2e 56 53 48 50 52  _VSHPROPID.VSHPR
9320: 4f 50 49 44 5f 49 63 6f 6e 48 61 6e 64 6c 65 3a  OPID_IconHandle:
9330: 0a 20 20 20 20 20 20 20 20 20 20 70 76 61 72 20  .          pvar 
9340: 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  = null;.        
9350: 20 20 72 65 74 75 72 6e 20 56 53 43 6f 6e 73 74    return VSConst
9360: 61 6e 74 73 2e 53 5f 4f 4b 3b 0a 20 20 20 20 20  ants.S_OK;.     
9370: 20 7d 0a 0a 20 20 20 20 20 20 69 66 20 28 70 76   }..      if (pv
9380: 61 72 20 3d 3d 20 6e 75 6c 6c 29 0a 20 20 20 20  ar == null).    
9390: 20 20 20 20 72 65 74 75 72 6e 20 5f 6f 77 6e 65      return _owne
93a0: 72 2e 47 65 74 50 72 6f 70 65 72 74 79 28 69 74  r.GetProperty(it
93b0: 65 6d 69 64 2c 20 70 72 6f 70 69 64 2c 20 6f 75  emid, propid, ou
93c0: 74 20 70 76 61 72 29 3b 0a 20 20 20 20 20 20 65  t pvar);.      e
93d0: 6c 73 65 0a 20 20 20 20 20 20 20 20 72 65 74 75  lse.        retu
93e0: 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74 73 2e 53  rn VSConstants.S
93f0: 5f 4f 4b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  _OK;.    }..    
9400: 69 6e 74 20 49 56 73 55 49 48 69 65 72 61 72 63  int IVsUIHierarc
9410: 68 79 2e 47 65 74 53 69 74 65 28 6f 75 74 20 4d  hy.GetSite(out M
9420: 69 63 72 6f 73 6f 66 74 2e 56 69 73 75 61 6c 53  icrosoft.VisualS
9430: 74 75 64 69 6f 2e 4f 4c 45 2e 49 6e 74 65 72 6f  tudio.OLE.Intero
9440: 70 2e 49 53 65 72 76 69 63 65 50 72 6f 76 69 64  p.IServiceProvid
9450: 65 72 20 70 70 53 50 29 0a 20 20 20 20 7b 0a 20  er ppSP).    {. 
9460: 20 20 20 20 20 70 70 53 50 20 3d 20 6e 75 6c 6c       ppSP = null
9470: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 56  ;.      return V
9480: 53 43 6f 6e 73 74 61 6e 74 73 2e 45 5f 4e 4f 54  SConstants.E_NOT
9490: 49 4d 50 4c 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  IMPL;.    }..   
94a0: 20 69 6e 74 20 49 56 73 55 49 48 69 65 72 61 72   int IVsUIHierar
94b0: 63 68 79 2e 50 61 72 73 65 43 61 6e 6f 6e 69 63  chy.ParseCanonic
94c0: 61 6c 4e 61 6d 65 28 73 74 72 69 6e 67 20 70 73  alName(string ps
94d0: 7a 4e 61 6d 65 2c 20 6f 75 74 20 75 69 6e 74 20  zName, out uint 
94e0: 70 69 74 65 6d 69 64 29 0a 20 20 20 20 7b 0a 20  pitemid).    {. 
94f0: 20 20 20 20 20 70 69 74 65 6d 69 64 20 3d 20 30       pitemid = 0
9500: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 56  ;.      return V
9510: 53 43 6f 6e 73 74 61 6e 74 73 2e 45 5f 4e 4f 54  SConstants.E_NOT
9520: 49 4d 50 4c 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  IMPL;.    }..   
9530: 20 69 6e 74 20 49 56 73 55 49 48 69 65 72 61 72   int IVsUIHierar
9540: 63 68 79 2e 51 75 65 72 79 43 6c 6f 73 65 28 6f  chy.QueryClose(o
9550: 75 74 20 69 6e 74 20 70 66 43 61 6e 43 6c 6f 73  ut int pfCanClos
9560: 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 70  e).    {.      p
9570: 66 43 61 6e 43 6c 6f 73 65 20 3d 20 31 3b 0a 20  fCanClose = 1;. 
9580: 20 20 20 20 20 72 65 74 75 72 6e 20 56 53 43 6f       return VSCo
9590: 6e 73 74 61 6e 74 73 2e 53 5f 4f 4b 3b 0a 20 20  nstants.S_OK;.  
95a0: 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20 49 56 73    }..    int IVs
95b0: 55 49 48 69 65 72 61 72 63 68 79 2e 51 75 65 72  UIHierarchy.Quer
95c0: 79 53 74 61 74 75 73 43 6f 6d 6d 61 6e 64 28 75  yStatusCommand(u
95d0: 69 6e 74 20 69 74 65 6d 69 64 2c 20 72 65 66 20  int itemid, ref 
95e0: 47 75 69 64 20 70 67 75 69 64 43 6d 64 47 72 6f  Guid pguidCmdGro
95f0: 75 70 2c 20 75 69 6e 74 20 63 43 6d 64 73 2c 20  up, uint cCmds, 
9600: 4f 4c 45 43 4d 44 5b 5d 20 70 72 67 43 6d 64 73  OLECMD[] prgCmds
9610: 2c 20 49 6e 74 50 74 72 20 70 43 6d 64 54 65 78  , IntPtr pCmdTex
9620: 74 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72  t).    {.      r
9630: 65 74 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74  eturn VSConstant
9640: 73 2e 45 5f 4e 4f 54 49 4d 50 4c 3b 0a 20 20 20  s.E_NOTIMPL;.   
9650: 20 7d 0a 0a 20 20 20 20 69 6e 74 20 49 56 73 55   }..    int IVsU
9660: 49 48 69 65 72 61 72 63 68 79 2e 53 65 74 47 75  IHierarchy.SetGu
9670: 69 64 50 72 6f 70 65 72 74 79 28 75 69 6e 74 20  idProperty(uint 
9680: 69 74 65 6d 69 64 2c 20 69 6e 74 20 70 72 6f 70  itemid, int prop
9690: 69 64 2c 20 72 65 66 20 47 75 69 64 20 72 67 75  id, ref Guid rgu
96a0: 69 64 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  id).    {.      
96b0: 72 65 74 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e  return VSConstan
96c0: 74 73 2e 45 5f 4e 4f 54 49 4d 50 4c 3b 0a 20 20  ts.E_NOTIMPL;.  
96d0: 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20 49 56 73    }..    int IVs
96e0: 55 49 48 69 65 72 61 72 63 68 79 2e 53 65 74 50  UIHierarchy.SetP
96f0: 72 6f 70 65 72 74 79 28 75 69 6e 74 20 69 74 65  roperty(uint ite
9700: 6d 69 64 2c 20 69 6e 74 20 70 72 6f 70 69 64 2c  mid, int propid,
9710: 20 6f 62 6a 65 63 74 20 76 61 72 29 0a 20 20 20   object var).   
9720: 20 7b 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68   {.      foreach
9730: 28 49 56 73 48 69 65 72 61 72 63 68 79 45 76 65  (IVsHierarchyEve
9740: 6e 74 73 20 6c 69 73 74 65 6e 65 72 20 69 6e 20  nts listener in 
9750: 5f 65 76 65 6e 74 73 2e 56 61 6c 75 65 73 29 0a  _events.Values).
9760: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
9770: 6c 69 73 74 65 6e 65 72 2e 4f 6e 50 72 6f 70 65  listener.OnPrope
9780: 72 74 79 43 68 61 6e 67 65 64 28 69 74 65 6d 69  rtyChanged(itemi
9790: 64 2c 20 70 72 6f 70 69 64 2c 20 30 29 3b 0a 20  d, propid, 0);. 
97a0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74       }.      ret
97b0: 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74 73 2e  urn VSConstants.
97c0: 53 5f 4f 4b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  S_OK;.    }..   
97d0: 20 69 6e 74 20 49 56 73 55 49 48 69 65 72 61 72   int IVsUIHierar
97e0: 63 68 79 2e 53 65 74 53 69 74 65 28 4d 69 63 72  chy.SetSite(Micr
97f0: 6f 73 6f 66 74 2e 56 69 73 75 61 6c 53 74 75 64  osoft.VisualStud
9800: 69 6f 2e 4f 4c 45 2e 49 6e 74 65 72 6f 70 2e 49  io.OLE.Interop.I
9810: 53 65 72 76 69 63 65 50 72 6f 76 69 64 65 72 20  ServiceProvider 
9820: 70 73 70 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  psp).    {.     
9830: 20 72 65 74 75 72 6e 20 56 53 43 6f 6e 73 74 61   return VSConsta
9840: 6e 74 73 2e 45 5f 4e 4f 54 49 4d 50 4c 3b 0a 20  nts.E_NOTIMPL;. 
9850: 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20 49 56     }..    int IV
9860: 73 55 49 48 69 65 72 61 72 63 68 79 2e 55 6e 61  sUIHierarchy.Una
9870: 64 76 69 73 65 48 69 65 72 61 72 63 68 79 45 76  dviseHierarchyEv
9880: 65 6e 74 73 28 75 69 6e 74 20 64 77 43 6f 6f 6b  ents(uint dwCook
9890: 69 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  ie).    {.      
98a0: 5f 65 76 65 6e 74 73 2e 52 65 6d 6f 76 65 28 64  _events.Remove(d
98b0: 77 43 6f 6f 6b 69 65 29 3b 0a 20 20 20 20 20 20  wCookie);.      
98c0: 72 65 74 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e  return VSConstan
98d0: 74 73 2e 53 5f 4f 4b 3b 0a 20 20 20 20 7d 0a 0a  ts.S_OK;.    }..
98e0: 20 20 20 20 69 6e 74 20 49 56 73 55 49 48 69 65      int IVsUIHie
98f0: 72 61 72 63 68 79 2e 55 6e 75 73 65 64 30 28 29  rarchy.Unused0()
9900: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74  .    {.      ret
9910: 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74 73 2e  urn VSConstants.
9920: 45 5f 4e 4f 54 49 4d 50 4c 3b 0a 20 20 20 20 7d  E_NOTIMPL;.    }
9930: 0a 0a 20 20 20 20 69 6e 74 20 49 56 73 55 49 48  ..    int IVsUIH
9940: 69 65 72 61 72 63 68 79 2e 55 6e 75 73 65 64 31  ierarchy.Unused1
9950: 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72  ().    {.      r
9960: 65 74 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74  eturn VSConstant
9970: 73 2e 45 5f 4e 4f 54 49 4d 50 4c 3b 0a 20 20 20  s.E_NOTIMPL;.   
9980: 20 7d 0a 0a 20 20 20 20 69 6e 74 20 49 56 73 55   }..    int IVsU
9990: 49 48 69 65 72 61 72 63 68 79 2e 55 6e 75 73 65  IHierarchy.Unuse
99a0: 64 32 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  d2().    {.     
99b0: 20 72 65 74 75 72 6e 20 56 53 43 6f 6e 73 74 61   return VSConsta
99c0: 6e 74 73 2e 45 5f 4e 4f 54 49 4d 50 4c 3b 0a 20  nts.E_NOTIMPL;. 
99d0: 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20 49 56     }..    int IV
99e0: 73 55 49 48 69 65 72 61 72 63 68 79 2e 55 6e 75  sUIHierarchy.Unu
99f0: 73 65 64 33 28 29 0a 20 20 20 20 7b 0a 20 20 20  sed3().    {.   
9a00: 20 20 20 72 65 74 75 72 6e 20 56 53 43 6f 6e 73     return VSCons
9a10: 74 61 6e 74 73 2e 45 5f 4e 4f 54 49 4d 50 4c 3b  tants.E_NOTIMPL;
9a20: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20  .    }..    int 
9a30: 49 56 73 55 49 48 69 65 72 61 72 63 68 79 2e 55  IVsUIHierarchy.U
9a40: 6e 75 73 65 64 34 28 29 0a 20 20 20 20 7b 0a 20  nused4().    {. 
9a50: 20 20 20 20 20 72 65 74 75 72 6e 20 56 53 43 6f       return VSCo
9a60: 6e 73 74 61 6e 74 73 2e 45 5f 4e 4f 54 49 4d 50  nstants.E_NOTIMP
9a70: 4c 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 65  L;.    }..    #e
9a80: 6e 64 72 65 67 69 6f 6e 0a 0a 20 20 20 20 23 72  ndregion..    #r
9a90: 65 67 69 6f 6e 20 49 56 73 48 69 65 72 61 72 63  egion IVsHierarc
9aa0: 68 79 20 4d 65 6d 62 65 72 73 0a 0a 20 20 20 20  hy Members..    
9ab0: 69 6e 74 20 49 56 73 48 69 65 72 61 72 63 68 79  int IVsHierarchy
9ac0: 2e 41 64 76 69 73 65 48 69 65 72 61 72 63 68 79  .AdviseHierarchy
9ad0: 45 76 65 6e 74 73 28 49 56 73 48 69 65 72 61 72  Events(IVsHierar
9ae0: 63 68 79 45 76 65 6e 74 73 20 70 45 76 65 6e 74  chyEvents pEvent
9af0: 53 69 6e 6b 2c 20 6f 75 74 20 75 69 6e 74 20 70  Sink, out uint p
9b00: 64 77 43 6f 6f 6b 69 65 29 0a 20 20 20 20 7b 0a  dwCookie).    {.
9b10: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 28 49        return ((I
9b20: 56 73 55 49 48 69 65 72 61 72 63 68 79 29 74 68  VsUIHierarchy)th
9b30: 69 73 29 2e 41 64 76 69 73 65 48 69 65 72 61 72  is).AdviseHierar
9b40: 63 68 79 45 76 65 6e 74 73 28 70 45 76 65 6e 74  chyEvents(pEvent
9b50: 53 69 6e 6b 2c 20 6f 75 74 20 70 64 77 43 6f 6f  Sink, out pdwCoo
9b60: 6b 69 65 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  kie);.    }..   
9b70: 20 69 6e 74 20 49 56 73 48 69 65 72 61 72 63 68   int IVsHierarch
9b80: 79 2e 43 6c 6f 73 65 28 29 0a 20 20 20 20 7b 0a  y.Close().    {.
9b90: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 28 49        return ((I
9ba0: 56 73 55 49 48 69 65 72 61 72 63 68 79 29 74 68  VsUIHierarchy)th
9bb0: 69 73 29 2e 43 6c 6f 73 65 28 29 3b 0a 20 20 20  is).Close();.   
9bc0: 20 7d 0a 0a 20 20 20 20 69 6e 74 20 49 56 73 48   }..    int IVsH
9bd0: 69 65 72 61 72 63 68 79 2e 47 65 74 43 61 6e 6f  ierarchy.GetCano
9be0: 6e 69 63 61 6c 4e 61 6d 65 28 75 69 6e 74 20 69  nicalName(uint i
9bf0: 74 65 6d 69 64 2c 20 6f 75 74 20 73 74 72 69 6e  temid, out strin
9c00: 67 20 70 62 73 74 72 4e 61 6d 65 29 0a 20 20 20  g pbstrName).   
9c10: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
9c20: 28 28 49 56 73 55 49 48 69 65 72 61 72 63 68 79  ((IVsUIHierarchy
9c30: 29 74 68 69 73 29 2e 47 65 74 43 61 6e 6f 6e 69  )this).GetCanoni
9c40: 63 61 6c 4e 61 6d 65 28 69 74 65 6d 69 64 2c 20  calName(itemid, 
9c50: 6f 75 74 20 70 62 73 74 72 4e 61 6d 65 29 3b 0a  out pbstrName);.
9c60: 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20 49      }..    int I
9c70: 56 73 48 69 65 72 61 72 63 68 79 2e 47 65 74 47  VsHierarchy.GetG
9c80: 75 69 64 50 72 6f 70 65 72 74 79 28 75 69 6e 74  uidProperty(uint
9c90: 20 69 74 65 6d 69 64 2c 20 69 6e 74 20 70 72 6f   itemid, int pro
9ca0: 70 69 64 2c 20 6f 75 74 20 47 75 69 64 20 70 67  pid, out Guid pg
9cb0: 75 69 64 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  uid).    {.     
9cc0: 20 72 65 74 75 72 6e 20 28 28 49 56 73 55 49 48   return ((IVsUIH
9cd0: 69 65 72 61 72 63 68 79 29 74 68 69 73 29 2e 47  ierarchy)this).G
9ce0: 65 74 47 75 69 64 50 72 6f 70 65 72 74 79 28 69  etGuidProperty(i
9cf0: 74 65 6d 69 64 2c 20 70 72 6f 70 69 64 2c 20 6f  temid, propid, o
9d00: 75 74 20 70 67 75 69 64 29 3b 0a 20 20 20 20 7d  ut pguid);.    }
9d10: 0a 0a 20 20 20 20 69 6e 74 20 49 56 73 48 69 65  ..    int IVsHie
9d20: 72 61 72 63 68 79 2e 47 65 74 4e 65 73 74 65 64  rarchy.GetNested
9d30: 48 69 65 72 61 72 63 68 79 28 75 69 6e 74 20 69  Hierarchy(uint i
9d40: 74 65 6d 69 64 2c 20 72 65 66 20 47 75 69 64 20  temid, ref Guid 
9d50: 69 69 64 48 69 65 72 61 72 63 68 79 4e 65 73 74  iidHierarchyNest
9d60: 65 64 2c 20 6f 75 74 20 49 6e 74 50 74 72 20 70  ed, out IntPtr p
9d70: 70 48 69 65 72 61 72 63 68 79 4e 65 73 74 65 64  pHierarchyNested
9d80: 2c 20 6f 75 74 20 75 69 6e 74 20 70 69 74 65 6d  , out uint pitem
9d90: 69 64 4e 65 73 74 65 64 29 0a 20 20 20 20 7b 0a  idNested).    {.
9da0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 28 49        return ((I
9db0: 56 73 55 49 48 69 65 72 61 72 63 68 79 29 74 68  VsUIHierarchy)th
9dc0: 69 73 29 2e 47 65 74 4e 65 73 74 65 64 48 69 65  is).GetNestedHie
9dd0: 72 61 72 63 68 79 28 69 74 65 6d 69 64 2c 20 72  rarchy(itemid, r
9de0: 65 66 20 69 69 64 48 69 65 72 61 72 63 68 79 4e  ef iidHierarchyN
9df0: 65 73 74 65 64 2c 20 6f 75 74 20 70 70 48 69 65  ested, out ppHie
9e00: 72 61 72 63 68 79 4e 65 73 74 65 64 2c 20 6f 75  rarchyNested, ou
9e10: 74 20 70 69 74 65 6d 69 64 4e 65 73 74 65 64 29  t pitemidNested)
9e20: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74  ;.    }..    int
9e30: 20 49 56 73 48 69 65 72 61 72 63 68 79 2e 47 65   IVsHierarchy.Ge
9e40: 74 50 72 6f 70 65 72 74 79 28 75 69 6e 74 20 69  tProperty(uint i
9e50: 74 65 6d 69 64 2c 20 69 6e 74 20 70 72 6f 70 69  temid, int propi
9e60: 64 2c 20 6f 75 74 20 6f 62 6a 65 63 74 20 70 76  d, out object pv
9e70: 61 72 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  ar).    {.      
9e80: 72 65 74 75 72 6e 20 28 28 49 56 73 55 49 48 69  return ((IVsUIHi
9e90: 65 72 61 72 63 68 79 29 74 68 69 73 29 2e 47 65  erarchy)this).Ge
9ea0: 74 50 72 6f 70 65 72 74 79 28 69 74 65 6d 69 64  tProperty(itemid
9eb0: 2c 20 70 72 6f 70 69 64 2c 20 6f 75 74 20 70 76  , propid, out pv
9ec0: 61 72 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ar);.    }..    
9ed0: 69 6e 74 20 49 56 73 48 69 65 72 61 72 63 68 79  int IVsHierarchy
9ee0: 2e 47 65 74 53 69 74 65 28 6f 75 74 20 4d 69 63  .GetSite(out Mic
9ef0: 72 6f 73 6f 66 74 2e 56 69 73 75 61 6c 53 74 75  rosoft.VisualStu
9f00: 64 69 6f 2e 4f 4c 45 2e 49 6e 74 65 72 6f 70 2e  dio.OLE.Interop.
9f10: 49 53 65 72 76 69 63 65 50 72 6f 76 69 64 65 72  IServiceProvider
9f20: 20 70 70 53 50 29 0a 20 20 20 20 7b 0a 20 20 20   ppSP).    {.   
9f30: 20 20 20 70 70 53 50 20 3d 20 6e 75 6c 6c 3b 0a     ppSP = null;.
9f40: 20 20 20 20 20 20 72 65 74 75 72 6e 20 56 53 43        return VSC
9f50: 6f 6e 73 74 61 6e 74 73 2e 45 5f 4e 4f 54 49 4d  onstants.E_NOTIM
9f60: 50 4c 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  PL;.    }..    i
9f70: 6e 74 20 49 56 73 48 69 65 72 61 72 63 68 79 2e  nt IVsHierarchy.
9f80: 50 61 72 73 65 43 61 6e 6f 6e 69 63 61 6c 4e 61  ParseCanonicalNa
9f90: 6d 65 28 73 74 72 69 6e 67 20 70 73 7a 4e 61 6d  me(string pszNam
9fa0: 65 2c 20 6f 75 74 20 75 69 6e 74 20 70 69 74 65  e, out uint pite
9fb0: 6d 69 64 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  mid).    {.     
9fc0: 20 70 69 74 65 6d 69 64 20 3d 20 30 3b 0a 20 20   pitemid = 0;.  
9fd0: 20 20 20 20 72 65 74 75 72 6e 20 56 53 43 6f 6e      return VSCon
9fe0: 73 74 61 6e 74 73 2e 45 5f 4e 4f 54 49 4d 50 4c  stants.E_NOTIMPL
9ff0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74  ;.    }..    int
a000: 20 49 56 73 48 69 65 72 61 72 63 68 79 2e 51 75   IVsHierarchy.Qu
a010: 65 72 79 43 6c 6f 73 65 28 6f 75 74 20 69 6e 74  eryClose(out int
a020: 20 70 66 43 61 6e 43 6c 6f 73 65 29 0a 20 20 20   pfCanClose).   
a030: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
a040: 28 28 49 56 73 55 49 48 69 65 72 61 72 63 68 79  ((IVsUIHierarchy
a050: 29 74 68 69 73 29 2e 51 75 65 72 79 43 6c 6f 73  )this).QueryClos
a060: 65 28 6f 75 74 20 70 66 43 61 6e 43 6c 6f 73 65  e(out pfCanClose
a070: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e  );.    }..    in
a080: 74 20 49 56 73 48 69 65 72 61 72 63 68 79 2e 53  t IVsHierarchy.S
a090: 65 74 47 75 69 64 50 72 6f 70 65 72 74 79 28 75  etGuidProperty(u
a0a0: 69 6e 74 20 69 74 65 6d 69 64 2c 20 69 6e 74 20  int itemid, int 
a0b0: 70 72 6f 70 69 64 2c 20 72 65 66 20 47 75 69 64  propid, ref Guid
a0c0: 20 72 67 75 69 64 29 0a 20 20 20 20 7b 0a 20 20   rguid).    {.  
a0d0: 20 20 20 20 72 65 74 75 72 6e 20 28 28 49 56 73      return ((IVs
a0e0: 55 49 48 69 65 72 61 72 63 68 79 29 74 68 69 73  UIHierarchy)this
a0f0: 29 2e 53 65 74 47 75 69 64 50 72 6f 70 65 72 74  ).SetGuidPropert
a100: 79 28 69 74 65 6d 69 64 2c 20 70 72 6f 70 69 64  y(itemid, propid
a110: 2c 20 72 65 66 20 72 67 75 69 64 29 3b 0a 20 20  , ref rguid);.  
a120: 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20 49 56 73    }..    int IVs
a130: 48 69 65 72 61 72 63 68 79 2e 53 65 74 50 72 6f  Hierarchy.SetPro
a140: 70 65 72 74 79 28 75 69 6e 74 20 69 74 65 6d 69  perty(uint itemi
a150: 64 2c 20 69 6e 74 20 70 72 6f 70 69 64 2c 20 6f  d, int propid, o
a160: 62 6a 65 63 74 20 76 61 72 29 0a 20 20 20 20 7b  bject var).    {
a170: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 28  .      return ((
a180: 49 56 73 55 49 48 69 65 72 61 72 63 68 79 29 74  IVsUIHierarchy)t
a190: 68 69 73 29 2e 53 65 74 50 72 6f 70 65 72 74 79  his).SetProperty
a1a0: 28 69 74 65 6d 69 64 2c 20 70 72 6f 70 69 64 2c  (itemid, propid,
a1b0: 20 76 61 72 29 3b 0a 20 20 20 20 7d 0a 0a 20 20   var);.    }..  
a1c0: 20 20 69 6e 74 20 49 56 73 48 69 65 72 61 72 63    int IVsHierarc
a1d0: 68 79 2e 53 65 74 53 69 74 65 28 4d 69 63 72 6f  hy.SetSite(Micro
a1e0: 73 6f 66 74 2e 56 69 73 75 61 6c 53 74 75 64 69  soft.VisualStudi
a1f0: 6f 2e 4f 4c 45 2e 49 6e 74 65 72 6f 70 2e 49 53  o.OLE.Interop.IS
a200: 65 72 76 69 63 65 50 72 6f 76 69 64 65 72 20 70  erviceProvider p
a210: 73 70 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  sp).    {.      
a220: 72 65 74 75 72 6e 20 28 28 49 56 73 55 49 48 69  return ((IVsUIHi
a230: 65 72 61 72 63 68 79 29 74 68 69 73 29 2e 53 65  erarchy)this).Se
a240: 74 53 69 74 65 28 70 73 70 29 3b 0a 20 20 20 20  tSite(psp);.    
a250: 7d 0a 0a 20 20 20 20 69 6e 74 20 49 56 73 48 69  }..    int IVsHi
a260: 65 72 61 72 63 68 79 2e 55 6e 61 64 76 69 73 65  erarchy.Unadvise
a270: 48 69 65 72 61 72 63 68 79 45 76 65 6e 74 73 28  HierarchyEvents(
a280: 75 69 6e 74 20 64 77 43 6f 6f 6b 69 65 29 0a 20  uint dwCookie). 
a290: 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72     {.      retur
a2a0: 6e 20 28 28 49 56 73 55 49 48 69 65 72 61 72 63  n ((IVsUIHierarc
a2b0: 68 79 29 74 68 69 73 29 2e 55 6e 61 64 76 69 73  hy)this).Unadvis
a2c0: 65 48 69 65 72 61 72 63 68 79 45 76 65 6e 74 73  eHierarchyEvents
a2d0: 28 64 77 43 6f 6f 6b 69 65 29 3b 0a 20 20 20 20  (dwCookie);.    
a2e0: 7d 0a 0a 20 20 20 20 69 6e 74 20 49 56 73 48 69  }..    int IVsHi
a2f0: 65 72 61 72 63 68 79 2e 55 6e 75 73 65 64 30 28  erarchy.Unused0(
a300: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65  ).    {.      re
a310: 74 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74 73  turn VSConstants
a320: 2e 45 5f 4e 4f 54 49 4d 50 4c 3b 0a 20 20 20 20  .E_NOTIMPL;.    
a330: 7d 0a 0a 20 20 20 20 69 6e 74 20 49 56 73 48 69  }..    int IVsHi
a340: 65 72 61 72 63 68 79 2e 55 6e 75 73 65 64 31 28  erarchy.Unused1(
a350: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65  ).    {.      re
a360: 74 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74 73  turn VSConstants
a370: 2e 45 5f 4e 4f 54 49 4d 50 4c 3b 0a 20 20 20 20  .E_NOTIMPL;.    
a380: 7d 0a 0a 20 20 20 20 69 6e 74 20 49 56 73 48 69  }..    int IVsHi
a390: 65 72 61 72 63 68 79 2e 55 6e 75 73 65 64 32 28  erarchy.Unused2(
a3a0: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65  ).    {.      re
a3b0: 74 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74 73  turn VSConstants
a3c0: 2e 45 5f 4e 4f 54 49 4d 50 4c 3b 0a 20 20 20 20  .E_NOTIMPL;.    
a3d0: 7d 0a 0a 20 20 20 20 69 6e 74 20 49 56 73 48 69  }..    int IVsHi
a3e0: 65 72 61 72 63 68 79 2e 55 6e 75 73 65 64 33 28  erarchy.Unused3(
a3f0: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65  ).    {.      re
a400: 74 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74 73  turn VSConstants
a410: 2e 45 5f 4e 4f 54 49 4d 50 4c 3b 0a 20 20 20 20  .E_NOTIMPL;.    
a420: 7d 0a 0a 20 20 20 20 69 6e 74 20 49 56 73 48 69  }..    int IVsHi
a430: 65 72 61 72 63 68 79 2e 55 6e 75 73 65 64 34 28  erarchy.Unused4(
a440: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65  ).    {.      re
a450: 74 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74 73  turn VSConstants
a460: 2e 45 5f 4e 4f 54 49 4d 50 4c 3b 0a 20 20 20 20  .E_NOTIMPL;.    
a470: 7d 0a 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f  }..    #endregio
a480: 6e 0a 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 49  n..    #region I
a490: 56 73 50 65 72 73 69 73 74 48 69 65 72 61 72 63  VsPersistHierarc
a4a0: 68 79 49 74 65 6d 20 4d 65 6d 62 65 72 73 0a 0a  hyItem Members..
a4b0: 20 20 20 20 69 6e 74 20 49 56 73 50 65 72 73 69      int IVsPersi
a4c0: 73 74 48 69 65 72 61 72 63 68 79 49 74 65 6d 2e  stHierarchyItem.
a4d0: 49 73 49 74 65 6d 44 69 72 74 79 28 75 69 6e 74  IsItemDirty(uint
a4e0: 20 69 74 65 6d 69 64 2c 20 49 6e 74 50 74 72 20   itemid, IntPtr 
a4f0: 70 75 6e 6b 44 6f 63 44 61 74 61 2c 20 6f 75 74  punkDocData, out
a500: 20 69 6e 74 20 70 66 44 69 72 74 79 29 0a 20 20   int pfDirty).  
a510: 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e    {.      return
a520: 20 28 28 49 56 73 50 65 72 73 69 73 74 44 6f 63   ((IVsPersistDoc
a530: 44 61 74 61 29 5f 63 6f 6e 74 72 6f 6c 29 2e 49  Data)_control).I
a540: 73 44 6f 63 44 61 74 61 44 69 72 74 79 28 6f 75  sDocDataDirty(ou
a550: 74 20 70 66 44 69 72 74 79 29 3b 0a 20 20 20 20  t pfDirty);.    
a560: 7d 0a 0a 20 20 20 20 69 6e 74 20 49 56 73 50 65  }..    int IVsPe
a570: 72 73 69 73 74 48 69 65 72 61 72 63 68 79 49 74  rsistHierarchyIt
a580: 65 6d 2e 53 61 76 65 49 74 65 6d 28 56 53 53 41  em.SaveItem(VSSA
a590: 56 45 46 4c 41 47 53 20 64 77 53 61 76 65 2c 20  VEFLAGS dwSave, 
a5a0: 73 74 72 69 6e 67 20 70 73 7a 53 69 6c 65 6e 74  string pszSilent
a5b0: 53 61 76 65 41 73 4e 61 6d 65 2c 20 75 69 6e 74  SaveAsName, uint
a5c0: 20 69 74 65 6d 69 64 2c 20 49 6e 74 50 74 72 20   itemid, IntPtr 
a5d0: 70 75 6e 6b 44 6f 63 44 61 74 61 2c 20 6f 75 74  punkDocData, out
a5e0: 20 69 6e 74 20 70 66 43 61 6e 63 65 6c 65 64 29   int pfCanceled)
a5f0: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74  .    {.      ret
a600: 75 72 6e 20 28 28 49 56 73 50 65 72 73 69 73 74  urn ((IVsPersist
a610: 44 6f 63 44 61 74 61 29 5f 63 6f 6e 74 72 6f 6c  DocData)_control
a620: 29 2e 53 61 76 65 44 6f 63 44 61 74 61 28 64 77  ).SaveDocData(dw
a630: 53 61 76 65 2c 20 6f 75 74 20 70 73 7a 53 69 6c  Save, out pszSil
a640: 65 6e 74 53 61 76 65 41 73 4e 61 6d 65 2c 20 6f  entSaveAsName, o
a650: 75 74 20 70 66 43 61 6e 63 65 6c 65 64 29 3b 0a  ut pfCanceled);.
a660: 20 20 20 20 7d 0a 0a 20 20 20 20 23 65 6e 64 72      }..    #endr
a670: 65 67 69 6f 6e 0a 0a 20 20 20 20 23 72 65 67 69  egion..    #regi
a680: 6f 6e 20 49 56 73 50 65 72 73 69 73 74 48 69 65  on IVsPersistHie
a690: 72 61 72 63 68 79 49 74 65 6d 32 20 4d 65 6d 62  rarchyItem2 Memb
a6a0: 65 72 73 0a 0a 20 20 20 20 69 6e 74 20 49 56 73  ers..    int IVs
a6b0: 50 65 72 73 69 73 74 48 69 65 72 61 72 63 68 79  PersistHierarchy
a6c0: 49 74 65 6d 32 2e 49 67 6e 6f 72 65 49 74 65 6d  Item2.IgnoreItem
a6d0: 46 69 6c 65 43 68 61 6e 67 65 73 28 75 69 6e 74  FileChanges(uint
a6e0: 20 69 74 65 6d 69 64 2c 20 69 6e 74 20 66 49 67   itemid, int fIg
a6f0: 6e 6f 72 65 29 0a 20 20 20 20 7b 0a 20 20 20 20  nore).    {.    
a700: 20 20 72 65 74 75 72 6e 20 56 53 43 6f 6e 73 74    return VSConst
a710: 61 6e 74 73 2e 45 5f 4e 4f 54 49 4d 50 4c 3b 0a  ants.E_NOTIMPL;.
a720: 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20 49      }..    int I
a730: 56 73 50 65 72 73 69 73 74 48 69 65 72 61 72 63  VsPersistHierarc
a740: 68 79 49 74 65 6d 32 2e 49 73 49 74 65 6d 44 69  hyItem2.IsItemDi
a750: 72 74 79 28 75 69 6e 74 20 69 74 65 6d 69 64 2c  rty(uint itemid,
a760: 20 49 6e 74 50 74 72 20 70 75 6e 6b 44 6f 63 44   IntPtr punkDocD
a770: 61 74 61 2c 20 6f 75 74 20 69 6e 74 20 70 66 44  ata, out int pfD
a780: 69 72 74 79 29 0a 20 20 20 20 7b 0a 20 20 20 20  irty).    {.    
a790: 20 20 72 65 74 75 72 6e 20 28 28 49 56 73 50 65    return ((IVsPe
a7a0: 72 73 69 73 74 44 6f 63 44 61 74 61 29 5f 63 6f  rsistDocData)_co
a7b0: 6e 74 72 6f 6c 29 2e 49 73 44 6f 63 44 61 74 61  ntrol).IsDocData
a7c0: 44 69 72 74 79 28 6f 75 74 20 70 66 44 69 72 74  Dirty(out pfDirt
a7d0: 79 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  y);.    }..    i
a7e0: 6e 74 20 49 56 73 50 65 72 73 69 73 74 48 69 65  nt IVsPersistHie
a7f0: 72 61 72 63 68 79 49 74 65 6d 32 2e 49 73 49 74  rarchyItem2.IsIt
a800: 65 6d 52 65 6c 6f 61 64 61 62 6c 65 28 75 69 6e  emReloadable(uin
a810: 74 20 69 74 65 6d 69 64 2c 20 6f 75 74 20 69 6e  t itemid, out in
a820: 74 20 70 66 52 65 6c 6f 61 64 61 62 6c 65 29 0a  t pfReloadable).
a830: 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75      {.      retu
a840: 72 6e 20 28 28 49 56 73 50 65 72 73 69 73 74 44  rn ((IVsPersistD
a850: 6f 63 44 61 74 61 29 5f 63 6f 6e 74 72 6f 6c 29  ocData)_control)
a860: 2e 49 73 44 6f 63 44 61 74 61 52 65 6c 6f 61 64  .IsDocDataReload
a870: 61 62 6c 65 28 6f 75 74 20 70 66 52 65 6c 6f 61  able(out pfReloa
a880: 64 61 62 6c 65 29 3b 0a 20 20 20 20 7d 0a 0a 20  dable);.    }.. 
a890: 20 20 20 69 6e 74 20 49 56 73 50 65 72 73 69 73     int IVsPersis
a8a0: 74 48 69 65 72 61 72 63 68 79 49 74 65 6d 32 2e  tHierarchyItem2.
a8b0: 52 65 6c 6f 61 64 49 74 65 6d 28 75 69 6e 74 20  ReloadItem(uint 
a8c0: 69 74 65 6d 69 64 2c 20 75 69 6e 74 20 64 77 52  itemid, uint dwR
a8d0: 65 73 65 72 76 65 64 29 0a 20 20 20 20 7b 0a 20  eserved).    {. 
a8e0: 20 20 20 20 20 72 65 74 75 72 6e 20 28 28 49 56       return ((IV
a8f0: 73 50 65 72 73 69 73 74 44 6f 63 44 61 74 61 29  sPersistDocData)
a900: 5f 63 6f 6e 74 72 6f 6c 29 2e 52 65 6c 6f 61 64  _control).Reload
a910: 44 6f 63 44 61 74 61 28 64 77 52 65 73 65 72 76  DocData(dwReserv
a920: 65 64 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ed);.    }..    
a930: 69 6e 74 20 49 56 73 50 65 72 73 69 73 74 48 69  int IVsPersistHi
a940: 65 72 61 72 63 68 79 49 74 65 6d 32 2e 53 61 76  erarchyItem2.Sav
a950: 65 49 74 65 6d 28 56 53 53 41 56 45 46 4c 41 47  eItem(VSSAVEFLAG
a960: 53 20 64 77 53 61 76 65 2c 20 73 74 72 69 6e 67  S dwSave, string
a970: 20 70 73 7a 53 69 6c 65 6e 74 53 61 76 65 41 73   pszSilentSaveAs
a980: 4e 61 6d 65 2c 20 75 69 6e 74 20 69 74 65 6d 69  Name, uint itemi
a990: 64 2c 20 49 6e 74 50 74 72 20 70 75 6e 6b 44 6f  d, IntPtr punkDo
a9a0: 63 44 61 74 61 2c 20 6f 75 74 20 69 6e 74 20 70  cData, out int p
a9b0: 66 43 61 6e 63 65 6c 65 64 29 0a 20 20 20 20 7b  fCanceled).    {
a9c0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 28  .      return ((
a9d0: 49 56 73 50 65 72 73 69 73 74 44 6f 63 44 61 74  IVsPersistDocDat
a9e0: 61 29 5f 63 6f 6e 74 72 6f 6c 29 2e 53 61 76 65  a)_control).Save
a9f0: 44 6f 63 44 61 74 61 28 64 77 53 61 76 65 2c 20  DocData(dwSave, 
aa00: 6f 75 74 20 70 73 7a 53 69 6c 65 6e 74 53 61 76  out pszSilentSav
aa10: 65 41 73 4e 61 6d 65 2c 20 6f 75 74 20 70 66 43  eAsName, out pfC
aa20: 61 6e 63 65 6c 65 64 29 3b 0a 20 20 20 20 7d 0a  anceled);.    }.
aa30: 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0a  .    #endregion.
aa40: 20 20 7d 0a 7d                                     }.}