System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact ee61f7487d9146064c9df8d2c2042b43efd3bd73:


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 73 71 6c 69 74 65 2e 6f 72 67 22 2c 20 22 46  @sqlite.org", "F
6230: 65 61 74 75 72 65 20 55 6e 64 65 72 20 52 65 76  eature Under Rev
6240: 69 65 77 22 2c 20 4d 65 73 73 61 67 65 42 6f 78  iew", MessageBox
6250: 42 75 74 74 6f 6e 73 2e 4f 4b 29 3b 0a 20 20 20  Buttons.OK);.   
6260: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
6270: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
6280: 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 56  }.      return V
6290: 53 43 6f 6e 73 74 61 6e 74 73 2e 53 5f 4f 4b 3b  SConstants.S_OK;
62a0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20  .    }..    int 
62b0: 49 56 73 57 69 6e 64 6f 77 46 72 61 6d 65 4e 6f  IVsWindowFrameNo
62c0: 74 69 66 79 2e 4f 6e 53 69 7a 65 28 29 0a 20 20  tify.OnSize().  
62d0: 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e    {.      return
62e0: 20 56 53 43 6f 6e 73 74 61 6e 74 73 2e 53 5f 4f   VSConstants.S_O
62f0: 4b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 65  K;.    }..    #e
6300: 6e 64 72 65 67 69 6f 6e 0a 0a 20 20 20 20 70 72  ndregion..    pr
6310: 69 76 61 74 65 20 76 6f 69 64 20 5f 64 61 74 61  ivate void _data
6320: 47 72 69 64 5f 43 65 6c 6c 45 6e 74 65 72 28 6f  Grid_CellEnter(o
6330: 62 6a 65 63 74 20 73 65 6e 64 65 72 2c 20 44 61  bject sender, Da
6340: 74 61 47 72 69 64 56 69 65 77 43 65 6c 6c 45 76  taGridViewCellEv
6350: 65 6e 74 41 72 67 73 20 65 29 0a 20 20 20 20 7b  entArgs e).    {
6360: 0a 20 20 20 20 20 20 74 72 79 0a 20 20 20 20 20  .      try.     
6370: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 65   {.        if (e
6380: 2e 43 6f 6c 75 6d 6e 49 6e 64 65 78 20 3e 20 2d  .ColumnIndex > -
6390: 31 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20  1).        {.   
63a0: 20 20 20 20 20 20 20 5f 64 61 74 61 47 72 69 64         _dataGrid
63b0: 2e 42 65 67 69 6e 45 64 69 74 28 74 72 75 65 29  .BeginEdit(true)
63c0: 3b 0a 20 20 20 20 20 20 20 20 20 20 5f 64 61 74  ;.          _dat
63d0: 61 47 72 69 64 5f 53 65 6c 65 63 74 69 6f 6e 43  aGrid_SelectionC
63e0: 68 61 6e 67 65 64 28 73 65 6e 64 65 72 2c 20 65  hanged(sender, e
63f0: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
6400: 20 20 20 7d 0a 20 20 20 20 20 20 63 61 74 63 68     }.      catch
6410: 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 7d  .      {.      }
6420: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 69 76  .    }..    priv
6430: 61 74 65 20 76 6f 69 64 20 5f 64 61 74 61 47 72  ate void _dataGr
6440: 69 64 5f 52 6f 77 48 65 61 64 65 72 4d 6f 75 73  id_RowHeaderMous
6450: 65 43 6c 69 63 6b 28 6f 62 6a 65 63 74 20 73 65  eClick(object se
6460: 6e 64 65 72 2c 20 44 61 74 61 47 72 69 64 56 69  nder, DataGridVi
6470: 65 77 43 65 6c 6c 4d 6f 75 73 65 45 76 65 6e 74  ewCellMouseEvent
6480: 41 72 67 73 20 65 29 0a 20 20 20 20 7b 0a 20 20  Args e).    {.  
6490: 20 20 20 20 5f 64 61 74 61 47 72 69 64 2e 45 6e      _dataGrid.En
64a0: 64 45 64 69 74 28 29 3b 0a 20 20 20 20 20 20 69  dEdit();.      i
64b0: 66 20 28 65 2e 42 75 74 74 6f 6e 20 3d 3d 20 4d  f (e.Button == M
64c0: 6f 75 73 65 42 75 74 74 6f 6e 73 2e 52 69 67 68  ouseButtons.Righ
64d0: 74 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20  t).      {.     
64e0: 20 20 20 69 66 20 28 5f 64 61 74 61 47 72 69 64     if (_dataGrid
64f0: 2e 52 6f 77 73 5b 65 2e 52 6f 77 49 6e 64 65 78  .Rows[e.RowIndex
6500: 5d 2e 53 65 6c 65 63 74 65 64 20 3d 3d 20 66 61  ].Selected == fa
6510: 6c 73 65 29 0a 20 20 20 20 20 20 20 20 7b 0a 20  lse).        {. 
6520: 20 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20           switch 
6530: 28 43 6f 6e 74 72 6f 6c 2e 4d 6f 64 69 66 69 65  (Control.Modifie
6540: 72 4b 65 79 73 29 0a 20 20 20 20 20 20 20 20 20  rKeys).         
6550: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63   {.            c
6560: 61 73 65 20 4b 65 79 73 2e 43 6f 6e 74 72 6f 6c  ase Keys.Control
6570: 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :.              
6580: 5f 64 61 74 61 47 72 69 64 2e 52 6f 77 73 5b 65  _dataGrid.Rows[e
6590: 2e 52 6f 77 49 6e 64 65 78 5d 2e 53 65 6c 65 63  .RowIndex].Selec
65a0: 74 65 64 20 3d 20 74 72 75 65 3b 0a 20 20 20 20  ted = true;.    
65b0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
65c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73  .            cas
65d0: 65 20 4b 65 79 73 2e 53 68 69 66 74 3a 0a 20 20  e Keys.Shift:.  
65e0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
65f0: 6d 69 6e 20 3d 20 4d 61 74 68 2e 4d 69 6e 28 5f  min = Math.Min(_
6600: 64 61 74 61 47 72 69 64 2e 43 75 72 72 65 6e 74  dataGrid.Current
6610: 52 6f 77 2e 49 6e 64 65 78 2c 20 65 2e 52 6f 77  Row.Index, e.Row
6620: 49 6e 64 65 78 29 3b 0a 20 20 20 20 20 20 20 20  Index);.        
6630: 20 20 20 20 20 20 69 6e 74 20 6d 61 78 20 3d 20        int max = 
6640: 4d 61 74 68 2e 4d 61 78 28 5f 64 61 74 61 47 72  Math.Max(_dataGr
6650: 69 64 2e 43 75 72 72 65 6e 74 52 6f 77 2e 49 6e  id.CurrentRow.In
6660: 64 65 78 2c 20 65 2e 52 6f 77 49 6e 64 65 78 29  dex, e.RowIndex)
6670: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
6680: 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20  for (int n = 0; 
6690: 6e 20 3c 20 5f 64 61 74 61 47 72 69 64 2e 52 6f  n < _dataGrid.Ro
66a0: 77 73 2e 43 6f 75 6e 74 3b 20 6e 2b 2b 29 0a 20  ws.Count; n++). 
66b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20               {. 
66c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
66d0: 64 61 74 61 47 72 69 64 2e 52 6f 77 73 5b 6e 5d  dataGrid.Rows[n]
66e0: 2e 53 65 6c 65 63 74 65 64 20 3d 20 28 5f 64 61  .Selected = (_da
66f0: 74 61 47 72 69 64 2e 52 6f 77 73 5b 6e 5d 2e 49  taGrid.Rows[n].I
6700: 6e 64 65 78 20 3c 3d 20 6d 69 6e 20 7c 7c 20 5f  ndex <= min || _
6710: 64 61 74 61 47 72 69 64 2e 52 6f 77 73 5b 6e 5d  dataGrid.Rows[n]
6720: 2e 49 6e 64 65 78 20 3c 3d 20 6d 61 78 29 3b 0a  .Index <= max);.
6730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
6740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
6750: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20  eak;.           
6760: 20 64 65 66 61 75 6c 74 3a 0a 20 20 20 20 20 20   default:.      
6770: 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74          for (int
6780: 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 5f 64 61 74   n = 0; n < _dat
6790: 61 47 72 69 64 2e 52 6f 77 73 2e 43 6f 75 6e 74  aGrid.Rows.Count
67a0: 3b 20 6e 2b 2b 29 0a 20 20 20 20 20 20 20 20 20  ; n++).         
67b0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
67c0: 20 20 20 20 20 20 20 5f 64 61 74 61 47 72 69 64         _dataGrid
67d0: 2e 52 6f 77 73 5b 6e 5d 2e 53 65 6c 65 63 74 65  .Rows[n].Selecte
67e0: 64 20 3d 20 28 65 2e 52 6f 77 49 6e 64 65 78 20  d = (e.RowIndex 
67f0: 3d 3d 20 6e 29 3b 0a 20 20 20 20 20 20 20 20 20  == n);.         
6800: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
6810: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
6820: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
6830: 7d 0a 0a 20 20 20 20 20 20 20 20 49 56 73 55 49  }..        IVsUI
6840: 53 68 65 6c 6c 20 73 68 65 6c 6c 20 3d 20 5f 73  Shell shell = _s
6850: 65 72 76 69 63 65 50 72 6f 76 69 64 65 72 2e 47  erviceProvider.G
6860: 65 74 53 65 72 76 69 63 65 28 74 79 70 65 6f 66  etService(typeof
6870: 28 49 56 73 55 49 53 68 65 6c 6c 29 29 20 61 73  (IVsUIShell)) as
6880: 20 49 56 73 55 49 53 68 65 6c 6c 3b 0a 20 20 20   IVsUIShell;.   
6890: 20 20 20 20 20 69 66 20 28 73 68 65 6c 6c 20 21       if (shell !
68a0: 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20  = null).        
68b0: 7b 0a 20 20 20 20 20 20 20 20 20 20 47 75 69 64  {.          Guid
68c0: 20 67 75 69 64 3b 0a 20 20 20 20 20 20 20 20 20   guid;.         
68d0: 20 50 4f 49 4e 54 53 5b 5d 20 70 20 3d 20 6e 65   POINTS[] p = ne
68e0: 77 20 50 4f 49 4e 54 53 5b 31 5d 3b 0a 20 20 20  w POINTS[1];.   
68f0: 20 20 20 20 20 20 20 69 6e 74 20 72 65 74 3b 0a         int ret;.
6900: 0a 20 20 20 20 20 20 20 20 20 20 70 5b 30 5d 2e  .          p[0].
6910: 78 20 3d 20 28 73 68 6f 72 74 29 43 6f 6e 74 72  x = (short)Contr
6920: 6f 6c 2e 4d 6f 75 73 65 50 6f 73 69 74 69 6f 6e  ol.MousePosition
6930: 2e 58 3b 0a 20 20 20 20 20 20 20 20 20 20 70 5b  .X;.          p[
6940: 30 5d 2e 79 20 3d 20 28 73 68 6f 72 74 29 43 6f  0].y = (short)Co
6950: 6e 74 72 6f 6c 2e 4d 6f 75 73 65 50 6f 73 69 74  ntrol.MousePosit
6960: 69 6f 6e 2e 59 3b 0a 0a 20 20 20 20 20 20 20 20  ion.Y;..        
6970: 20 20 67 75 69 64 20 3d 20 6e 65 77 20 47 75 69    guid = new Gui
6980: 64 28 22 37 33 32 61 62 65 37 34 2d 63 64 38 30  d("732abe74-cd80
6990: 2d 31 31 64 30 2d 61 32 64 62 2d 30 30 61 61 30  -11d0-a2db-00aa0
69a0: 30 61 33 65 66 66 66 22 29 3b 0a 0a 20 20 20 20  0a3efff");..    
69b0: 20 20 20 20 20 20 72 65 74 20 3d 20 73 68 65 6c        ret = shel
69c0: 6c 2e 53 68 6f 77 43 6f 6e 74 65 78 74 4d 65 6e  l.ShowContextMen
69d0: 75 28 30 2c 20 72 65 66 20 67 75 69 64 2c 20 32  u(0, ref guid, 2
69e0: 35 39 2c 20 70 2c 20 74 68 69 73 29 3b 0a 20 20  59, p, this);.  
69f0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
6a00: 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 69 76 61      }..    priva
6a10: 74 65 20 76 6f 69 64 20 5f 64 61 74 61 47 72 69  te void _dataGri
6a20: 64 5f 43 65 6c 6c 43 6c 69 63 6b 28 6f 62 6a 65  d_CellClick(obje
6a30: 63 74 20 73 65 6e 64 65 72 2c 20 44 61 74 61 47  ct sender, DataG
6a40: 72 69 64 56 69 65 77 43 65 6c 6c 45 76 65 6e 74  ridViewCellEvent
6a50: 41 72 67 73 20 65 29 0a 20 20 20 20 7b 0a 20 20  Args e).    {.  
6a60: 20 20 20 20 69 66 20 28 5f 69 6e 69 74 20 3d 3d      if (_init ==
6a70: 20 74 72 75 65 29 20 72 65 74 75 72 6e 3b 0a 20   true) return;. 
6a80: 20 20 20 20 20 69 66 20 28 65 2e 43 6f 6c 75 6d       if (e.Colum
6a90: 6e 49 6e 64 65 78 20 3d 3d 20 2d 31 20 26 26 20  nIndex == -1 && 
6aa0: 65 2e 52 6f 77 49 6e 64 65 78 20 3d 3d 20 2d 31  e.RowIndex == -1
6ab0: 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20  ).      {.      
6ac0: 20 20 5f 64 61 74 61 47 72 69 64 2e 45 6e 64 45    _dataGrid.EndE
6ad0: 64 69 74 28 29 3b 0a 20 20 20 20 20 20 7d 0a 20  dit();.      }. 
6ae0: 20 20 20 20 20 5f 64 61 74 61 47 72 69 64 5f 53       _dataGrid_S
6af0: 65 6c 65 63 74 69 6f 6e 43 68 61 6e 67 65 64 28  electionChanged(
6b00: 73 65 6e 64 65 72 2c 20 65 29 3b 0a 20 20 20 20  sender, e);.    
6b10: 7d 0a 0a 20 20 20 20 70 72 69 76 61 74 65 20 76  }..    private v
6b20: 6f 69 64 20 5f 64 61 74 61 47 72 69 64 5f 43 65  oid _dataGrid_Ce
6b30: 6c 6c 50 61 69 6e 74 69 6e 67 28 6f 62 6a 65 63  llPainting(objec
6b40: 74 20 73 65 6e 64 65 72 2c 20 44 61 74 61 47 72  t sender, DataGr
6b50: 69 64 56 69 65 77 43 65 6c 6c 50 61 69 6e 74 69  idViewCellPainti
6b60: 6e 67 45 76 65 6e 74 41 72 67 73 20 65 29 0a 20  ngEventArgs e). 
6b70: 20 20 20 7b 0a 20 20 20 20 20 20 69 66 20 28 5f     {.      if (_
6b80: 69 6e 69 74 20 3d 3d 20 74 72 75 65 29 20 72 65  init == true) re
6b90: 74 75 72 6e 3b 0a 20 20 20 20 20 20 69 66 20 28  turn;.      if (
6ba0: 65 2e 43 6f 6c 75 6d 6e 49 6e 64 65 78 20 3e 20  e.ColumnIndex > 
6bb0: 2d 31 20 7c 7c 20 65 2e 52 6f 77 49 6e 64 65 78  -1 || e.RowIndex
6bc0: 20 3c 20 30 29 20 72 65 74 75 72 6e 3b 0a 0a 20   < 0) return;.. 
6bd0: 20 20 20 20 20 43 6f 6c 75 6d 6e 20 63 6f 6c 20       Column col 
6be0: 3d 20 5f 64 61 74 61 47 72 69 64 2e 52 6f 77 73  = _dataGrid.Rows
6bf0: 5b 65 2e 52 6f 77 49 6e 64 65 78 5d 2e 54 61 67  [e.RowIndex].Tag
6c00: 20 61 73 20 43 6f 6c 75 6d 6e 3b 0a 0a 20 20 20   as Column;..   
6c10: 20 20 20 69 66 20 28 63 6f 6c 20 3d 3d 20 6e 75     if (col == nu
6c20: 6c 6c 29 20 72 65 74 75 72 6e 3b 0a 0a 20 20 20  ll) return;..   
6c30: 20 20 20 62 6f 6f 6c 20 69 73 70 6b 20 3d 20 66     bool ispk = f
6c40: 61 6c 73 65 3b 0a 20 20 20 20 20 20 66 6f 72 65  alse;.      fore
6c50: 61 63 68 20 28 49 6e 64 65 78 43 6f 6c 75 6d 6e  ach (IndexColumn
6c60: 20 69 63 20 69 6e 20 5f 74 61 62 6c 65 2e 50 72   ic in _table.Pr
6c70: 69 6d 61 72 79 4b 65 79 2e 43 6f 6c 75 6d 6e 73  imaryKey.Columns
6c80: 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20  ).      {.      
6c90: 20 20 69 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d    if (String.Com
6ca0: 70 61 72 65 28 69 63 2e 43 6f 6c 75 6d 6e 2c 20  pare(ic.Column, 
6cb0: 63 6f 6c 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20  col.ColumnName, 
6cc0: 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e  StringComparison
6cd0: 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61  .OrdinalIgnoreCa
6ce0: 73 65 29 20 3d 3d 20 30 29 0a 20 20 20 20 20 20  se) == 0).      
6cf0: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 69 73    {.          is
6d00: 70 6b 20 3d 20 74 72 75 65 3b 0a 20 20 20 20 20  pk = true;.     
6d10: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
6d20: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
6d30: 20 20 20 20 69 66 20 28 69 73 70 6b 20 3d 3d 20      if (ispk == 
6d40: 74 72 75 65 29 0a 20 20 20 20 20 20 7b 0a 20 20  true).      {.  
6d50: 20 20 20 20 20 20 65 2e 50 61 69 6e 74 28 65 2e        e.Paint(e.
6d60: 43 6c 69 70 42 6f 75 6e 64 73 2c 20 44 61 74 61  ClipBounds, Data
6d70: 47 72 69 64 56 69 65 77 50 61 69 6e 74 50 61 72  GridViewPaintPar
6d80: 74 73 2e 41 6c 6c 29 3b 0a 20 20 20 20 20 20 20  ts.All);.       
6d90: 20 5f 69 6d 61 67 65 4c 69 73 74 2e 44 72 61 77   _imageList.Draw
6da0: 28 65 2e 47 72 61 70 68 69 63 73 2c 20 65 2e 43  (e.Graphics, e.C
6db0: 65 6c 6c 42 6f 75 6e 64 73 2e 4c 65 66 74 2c 20  ellBounds.Left, 
6dc0: 65 2e 43 65 6c 6c 42 6f 75 6e 64 73 2e 54 6f 70  e.CellBounds.Top
6dd0: 20 2b 20 28 28 65 2e 43 65 6c 6c 42 6f 75 6e 64   + ((e.CellBound
6de0: 73 2e 42 6f 74 74 6f 6d 20 2d 20 65 2e 43 65 6c  s.Bottom - e.Cel
6df0: 6c 42 6f 75 6e 64 73 2e 54 6f 70 29 20 2d 20 5f  lBounds.Top) - _
6e00: 69 6d 61 67 65 4c 69 73 74 2e 49 6d 61 67 65 53  imageList.ImageS
6e10: 69 7a 65 2e 48 65 69 67 68 74 29 20 2f 20 32 2c  ize.Height) / 2,
6e20: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 65 2e 48   0);.        e.H
6e30: 61 6e 64 6c 65 64 20 3d 20 74 72 75 65 3b 0a 20  andled = true;. 
6e40: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20       }.    }..  
6e50: 20 20 70 72 69 76 61 74 65 20 44 61 74 61 47 72    private DataGr
6e60: 69 64 56 69 65 77 52 6f 77 5b 5d 20 53 65 6c 65  idViewRow[] Sele
6e70: 63 74 65 64 52 6f 77 73 0a 20 20 20 20 7b 0a 20  ctedRows.    {. 
6e80: 20 20 20 20 20 67 65 74 0a 20 20 20 20 20 20 7b       get.      {
6e90: 0a 20 20 20 20 20 20 20 20 4c 69 73 74 3c 44 61  .        List<Da
6ea0: 74 61 47 72 69 64 56 69 65 77 52 6f 77 3e 20 69  taGridViewRow> i
6eb0: 74 65 6d 73 20 3d 20 6e 65 77 20 4c 69 73 74 3c  tems = new List<
6ec0: 44 61 74 61 47 72 69 64 56 69 65 77 52 6f 77 3e  DataGridViewRow>
6ed0: 28 29 3b 0a 0a 20 20 20 20 20 20 20 20 66 6f 72  ();..        for
6ee0: 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c   (int n = 0; n <
6ef0: 20 5f 64 61 74 61 47 72 69 64 2e 52 6f 77 73 2e   _dataGrid.Rows.
6f00: 43 6f 75 6e 74 3b 20 6e 2b 2b 29 0a 20 20 20 20  Count; n++).    
6f10: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
6f20: 69 66 20 28 5f 64 61 74 61 47 72 69 64 2e 52 6f  if (_dataGrid.Ro
6f30: 77 73 5b 6e 5d 2e 53 65 6c 65 63 74 65 64 20 7c  ws[n].Selected |
6f40: 7c 20 28 5f 64 61 74 61 47 72 69 64 2e 43 75 72  | (_dataGrid.Cur
6f50: 72 65 6e 74 43 65 6c 6c 2e 52 6f 77 49 6e 64 65  rentCell.RowInde
6f60: 78 20 3d 3d 20 6e 20 26 26 20 5f 64 61 74 61 47  x == n && _dataG
6f70: 72 69 64 2e 43 75 72 72 65 6e 74 43 65 6c 6c 2e  rid.CurrentCell.
6f80: 53 65 6c 65 63 74 65 64 20 3d 3d 20 74 72 75 65  Selected == true
6f90: 29 29 0a 20 20 20 20 20 20 20 20 20 20 7b 0a 20  )).          {. 
6fa0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f             if (_
6fb0: 64 61 74 61 47 72 69 64 2e 52 6f 77 73 5b 6e 5d  dataGrid.Rows[n]
6fc0: 2e 54 61 67 20 69 73 20 43 6f 6c 75 6d 6e 29 0a  .Tag is Column).
6fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 74                it
6fe0: 65 6d 73 2e 41 64 64 28 5f 64 61 74 61 47 72 69  ems.Add(_dataGri
6ff0: 64 2e 52 6f 77 73 5b 6e 5d 29 3b 0a 20 20 20 20  d.Rows[n]);.    
7000: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
7010: 7d 0a 0a 20 20 20 20 20 20 20 20 44 61 74 61 47  }..        DataG
7020: 72 69 64 56 69 65 77 52 6f 77 5b 5d 20 6f 62 6a  ridViewRow[] obj
7030: 73 20 3d 20 6e 65 77 20 44 61 74 61 47 72 69 64  s = new DataGrid
7040: 56 69 65 77 52 6f 77 5b 69 74 65 6d 73 2e 43 6f  ViewRow[items.Co
7050: 75 6e 74 5d 3b 0a 20 20 20 20 20 20 20 20 69 74  unt];.        it
7060: 65 6d 73 2e 43 6f 70 79 54 6f 28 6f 62 6a 73 29  ems.CopyTo(objs)
7070: 3b 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
7080: 6e 20 6f 62 6a 73 3b 0a 20 20 20 20 20 20 7d 0a  n objs;.      }.
7090: 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 69 76 61      }..    priva
70a0: 74 65 20 76 6f 69 64 20 5f 64 61 74 61 47 72 69  te void _dataGri
70b0: 64 5f 53 65 6c 65 63 74 69 6f 6e 43 68 61 6e 67  d_SelectionChang
70c0: 65 64 28 6f 62 6a 65 63 74 20 73 65 6e 64 65 72  ed(object sender
70d0: 2c 20 45 76 65 6e 74 41 72 67 73 20 65 29 0a 20  , EventArgs e). 
70e0: 20 20 20 7b 0a 20 20 20 20 20 20 69 66 20 28 5f     {.      if (_
70f0: 69 6e 69 74 20 3d 3d 20 74 72 75 65 29 20 72 65  init == true) re
7100: 74 75 72 6e 3b 0a 20 20 20 20 20 20 44 61 74 61  turn;.      Data
7110: 47 72 69 64 56 69 65 77 52 6f 77 5b 5d 20 61 72  GridViewRow[] ar
7120: 72 20 3d 20 53 65 6c 65 63 74 65 64 52 6f 77 73  r = SelectedRows
7130: 3b 0a 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 5b  ;..      object[
7140: 5d 20 6f 62 6a 73 20 3d 20 6e 65 77 20 6f 62 6a  ] objs = new obj
7150: 65 63 74 5b 61 72 72 2e 4c 65 6e 67 74 68 5d 3b  ect[arr.Length];
7160: 0a 0a 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74  ..      for (int
7170: 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 6f 62 6a 73   n = 0; n < objs
7180: 2e 4c 65 6e 67 74 68 3b 20 6e 2b 2b 29 0a 20 20  .Length; n++).  
7190: 20 20 20 20 20 20 6f 62 6a 73 5b 6e 5d 20 3d 20        objs[n] = 
71a0: 61 72 72 5b 6e 5d 2e 54 61 67 3b 0a 0a 20 20 20  arr[n].Tag;..   
71b0: 20 20 20 5f 70 72 6f 70 65 72 74 79 47 72 69 64     _propertyGrid
71c0: 2e 53 65 6c 65 63 74 65 64 4f 62 6a 65 63 74 73  .SelectedObjects
71d0: 20 3d 20 6f 62 6a 73 3b 0a 0a 20 20 20 20 20 20   = objs;..      
71e0: 52 65 66 72 65 73 68 54 6f 6f 6c 62 61 72 73 28  RefreshToolbars(
71f0: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72  );.    }..    pr
7200: 69 76 61 74 65 20 76 6f 69 64 20 5f 64 61 74 61  ivate void _data
7210: 47 72 69 64 5f 43 65 6c 6c 56 61 6c 75 65 43 68  Grid_CellValueCh
7220: 61 6e 67 65 64 28 6f 62 6a 65 63 74 20 73 65 6e  anged(object sen
7230: 64 65 72 2c 20 44 61 74 61 47 72 69 64 56 69 65  der, DataGridVie
7240: 77 43 65 6c 6c 45 76 65 6e 74 41 72 67 73 20 65  wCellEventArgs e
7250: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 69 66  ).    {.      if
7260: 20 28 5f 69 6e 69 74 20 3d 3d 20 74 72 75 65 29   (_init == true)
7270: 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 69   return;.      i
7280: 66 20 28 65 2e 52 6f 77 49 6e 64 65 78 20 3e 20  f (e.RowIndex > 
7290: 2d 31 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20  -1).      {.    
72a0: 20 20 20 20 5f 70 72 6f 70 65 72 74 79 47 72 69      _propertyGri
72b0: 64 2e 53 65 6c 65 63 74 65 64 4f 62 6a 65 63 74  d.SelectedObject
72c0: 73 20 3d 20 5f 70 72 6f 70 65 72 74 79 47 72 69  s = _propertyGri
72d0: 64 2e 53 65 6c 65 63 74 65 64 4f 62 6a 65 63 74  d.SelectedObject
72e0: 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  s;.      }.    }
72f0: 0a 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f  ..    private vo
7300: 69 64 20 5f 64 61 74 61 47 72 69 64 5f 55 73 65  id _dataGrid_Use
7310: 72 44 65 6c 65 74 65 64 52 6f 77 28 6f 62 6a 65  rDeletedRow(obje
7320: 63 74 20 73 65 6e 64 65 72 2c 20 44 61 74 61 47  ct sender, DataG
7330: 72 69 64 56 69 65 77 52 6f 77 45 76 65 6e 74 41  ridViewRowEventA
7340: 72 67 73 20 65 29 0a 20 20 20 20 7b 0a 20 20 20  rgs e).    {.   
7350: 20 20 20 69 66 20 28 5f 69 6e 69 74 20 3d 3d 20     if (_init == 
7360: 74 72 75 65 29 20 72 65 74 75 72 6e 3b 0a 20 20  true) return;.  
7370: 20 20 20 20 0a 20 20 20 20 20 20 69 66 20 28 65      .      if (e
7380: 2e 52 6f 77 2e 54 61 67 20 69 73 20 43 6f 6c 75  .Row.Tag is Colu
7390: 6d 6e 29 0a 20 20 20 20 20 20 20 20 4d 61 6b 65  mn).        Make
73a0: 44 69 72 74 79 28 29 3b 0a 0a 20 20 20 20 20 20  Dirty();..      
73b0: 5f 64 61 74 61 47 72 69 64 5f 53 65 6c 65 63 74  _dataGrid_Select
73c0: 69 6f 6e 43 68 61 6e 67 65 64 28 73 65 6e 64 65  ionChanged(sende
73d0: 72 2c 20 65 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  r, e);.    }..  
73e0: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 5f    private void _
73f0: 64 61 74 61 47 72 69 64 5f 55 73 65 72 44 65 6c  dataGrid_UserDel
7400: 65 74 69 6e 67 52 6f 77 28 6f 62 6a 65 63 74 20  etingRow(object 
7410: 73 65 6e 64 65 72 2c 20 44 61 74 61 47 72 69 64  sender, DataGrid
7420: 56 69 65 77 52 6f 77 43 61 6e 63 65 6c 45 76 65  ViewRowCancelEve
7430: 6e 74 41 72 67 73 20 65 29 0a 20 20 20 20 7b 0a  ntArgs e).    {.
7440: 20 20 20 20 20 20 69 66 20 28 5f 69 6e 69 74 20        if (_init 
7450: 3d 3d 20 74 72 75 65 29 20 72 65 74 75 72 6e 3b  == true) return;
7460: 0a 20 20 20 20 20 20 69 66 20 28 65 2e 52 6f 77  .      if (e.Row
7470: 2e 54 61 67 20 69 73 20 43 6f 6c 75 6d 6e 29 0a  .Tag is Column).
7480: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
7490: 5f 74 61 62 6c 65 2e 43 6f 6c 75 6d 6e 73 2e 52  _table.Columns.R
74a0: 65 6d 6f 76 65 28 65 2e 52 6f 77 2e 54 61 67 20  emove(e.Row.Tag 
74b0: 61 73 20 43 6f 6c 75 6d 6e 29 3b 0a 20 20 20 20  as Column);.    
74c0: 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70    }.    }..    p
74d0: 72 69 76 61 74 65 20 76 6f 69 64 20 5f 64 61 74  rivate void _dat
74e0: 61 47 72 69 64 5f 52 6f 77 73 41 64 64 65 64 28  aGrid_RowsAdded(
74f0: 6f 62 6a 65 63 74 20 73 65 6e 64 65 72 2c 20 44  object sender, D
7500: 61 74 61 47 72 69 64 56 69 65 77 52 6f 77 73 41  ataGridViewRowsA
7510: 64 64 65 64 45 76 65 6e 74 41 72 67 73 20 65 29  ddedEventArgs e)
7520: 0a 20 20 20 20 7b 0a 0a 20 20 20 20 7d 0a 0a 20  .    {..    }.. 
7530: 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20     private void 
7540: 5f 64 61 74 61 47 72 69 64 5f 52 6f 77 73 52 65  _dataGrid_RowsRe
7550: 6d 6f 76 65 64 28 6f 62 6a 65 63 74 20 73 65 6e  moved(object sen
7560: 64 65 72 2c 20 44 61 74 61 47 72 69 64 56 69 65  der, DataGridVie
7570: 77 52 6f 77 73 52 65 6d 6f 76 65 64 45 76 65 6e  wRowsRemovedEven
7580: 74 41 72 67 73 20 65 29 0a 20 20 20 20 7b 0a 0a  tArgs e).    {..
7590: 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 69 76 61      }..    priva
75a0: 74 65 20 52 65 63 74 61 6e 67 6c 65 20 5f 64 72  te Rectangle _dr
75b0: 61 67 42 6f 78 46 72 6f 6d 4d 6f 75 73 65 44 6f  agBoxFromMouseDo
75c0: 77 6e 3b 0a 20 20 20 20 70 72 69 76 61 74 65 20  wn;.    private 
75d0: 69 6e 74 20 5f 72 6f 77 49 6e 64 65 78 46 72 6f  int _rowIndexFro
75e0: 6d 4d 6f 75 73 65 44 6f 77 6e 3b 0a 20 20 20 20  mMouseDown;.    
75f0: 70 72 69 76 61 74 65 20 69 6e 74 20 5f 72 6f 77  private int _row
7600: 49 6e 64 65 78 4f 66 49 74 65 6d 55 6e 64 65 72  IndexOfItemUnder
7610: 4d 6f 75 73 65 54 6f 44 72 6f 70 3b 0a 0a 20 20  MouseToDrop;..  
7620: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 5f    private void _
7630: 64 61 74 61 47 72 69 64 5f 44 72 61 67 44 72 6f  dataGrid_DragDro
7640: 70 28 6f 62 6a 65 63 74 20 73 65 6e 64 65 72 2c  p(object sender,
7650: 20 44 72 61 67 45 76 65 6e 74 41 72 67 73 20 65   DragEventArgs e
7660: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 2f 2f  ).    {.      //
7670: 20 54 68 65 20 6d 6f 75 73 65 20 6c 6f 63 61 74   The mouse locat
7680: 69 6f 6e 73 20 61 72 65 20 72 65 6c 61 74 69 76  ions are relativ
7690: 65 20 74 6f 20 74 68 65 20 73 63 72 65 65 6e 2c  e to the screen,
76a0: 20 73 6f 20 74 68 65 79 20 6d 75 73 74 20 62 65   so they must be
76b0: 20 0a 20 20 20 20 20 20 2f 2f 20 63 6f 6e 76 65   .      // conve
76c0: 72 74 65 64 20 74 6f 20 63 6c 69 65 6e 74 20 63  rted to client c
76d0: 6f 6f 72 64 69 6e 61 74 65 73 2e 0a 20 20 20 20  oordinates..    
76e0: 20 20 50 6f 69 6e 74 20 63 6c 69 65 6e 74 50 6f    Point clientPo
76f0: 69 6e 74 20 3d 20 5f 64 61 74 61 47 72 69 64 2e  int = _dataGrid.
7700: 50 6f 69 6e 74 54 6f 43 6c 69 65 6e 74 28 6e 65  PointToClient(ne
7710: 77 20 50 6f 69 6e 74 28 65 2e 58 2c 20 65 2e 59  w Point(e.X, e.Y
7720: 29 29 3b 0a 0a 20 20 20 20 20 20 69 66 20 28 5f  ));..      if (_
7730: 72 6f 77 49 6e 64 65 78 4f 66 49 74 65 6d 55 6e  rowIndexOfItemUn
7740: 64 65 72 4d 6f 75 73 65 54 6f 44 72 6f 70 20 21  derMouseToDrop !
7750: 3d 20 2d 31 29 0a 20 20 20 20 20 20 20 20 5f 64  = -1).        _d
7760: 61 74 61 47 72 69 64 2e 52 6f 77 73 5b 5f 72 6f  ataGrid.Rows[_ro
7770: 77 49 6e 64 65 78 4f 66 49 74 65 6d 55 6e 64 65  wIndexOfItemUnde
7780: 72 4d 6f 75 73 65 54 6f 44 72 6f 70 5d 2e 44 69  rMouseToDrop].Di
7790: 76 69 64 65 72 48 65 69 67 68 74 20 3d 20 30 3b  viderHeight = 0;
77a0: 0a 0a 20 20 20 20 20 20 5f 72 6f 77 49 6e 64 65  ..      _rowInde
77b0: 78 4f 66 49 74 65 6d 55 6e 64 65 72 4d 6f 75 73  xOfItemUnderMous
77c0: 65 54 6f 44 72 6f 70 20 3d 20 5f 64 61 74 61 47  eToDrop = _dataG
77d0: 72 69 64 2e 48 69 74 54 65 73 74 28 63 6c 69 65  rid.HitTest(clie
77e0: 6e 74 50 6f 69 6e 74 2e 58 2c 20 63 6c 69 65 6e  ntPoint.X, clien
77f0: 74 50 6f 69 6e 74 2e 59 29 2e 52 6f 77 49 6e 64  tPoint.Y).RowInd
7800: 65 78 3b 0a 0a 20 20 20 20 20 20 69 66 20 28 5f  ex;..      if (_
7810: 72 6f 77 49 6e 64 65 78 4f 66 49 74 65 6d 55 6e  rowIndexOfItemUn
7820: 64 65 72 4d 6f 75 73 65 54 6f 44 72 6f 70 20 21  derMouseToDrop !
7830: 3d 20 2d 31 29 0a 20 20 20 20 20 20 20 20 5f 64  = -1).        _d
7840: 61 74 61 47 72 69 64 2e 52 6f 77 73 5b 5f 72 6f  ataGrid.Rows[_ro
7850: 77 49 6e 64 65 78 4f 66 49 74 65 6d 55 6e 64 65  wIndexOfItemUnde
7860: 72 4d 6f 75 73 65 54 6f 44 72 6f 70 5d 2e 44 69  rMouseToDrop].Di
7870: 76 69 64 65 72 48 65 69 67 68 74 20 3d 20 30 3b  viderHeight = 0;
7880: 0a 0a 20 20 20 20 20 20 2f 2f 20 49 66 20 74 68  ..      // If th
7890: 65 20 64 72 61 67 20 6f 70 65 72 61 74 69 6f 6e  e drag operation
78a0: 20 77 61 73 20 61 20 6d 6f 76 65 20 74 68 65 6e   was a move then
78b0: 20 72 65 6d 6f 76 65 20 61 6e 64 20 69 6e 73 65   remove and inse
78c0: 72 74 20 74 68 65 20 72 6f 77 2e 0a 20 20 20 20  rt the row..    
78d0: 20 20 69 66 20 28 65 2e 45 66 66 65 63 74 20 3d    if (e.Effect =
78e0: 3d 20 44 72 61 67 44 72 6f 70 45 66 66 65 63 74  = DragDropEffect
78f0: 73 2e 4d 6f 76 65 29 0a 20 20 20 20 20 20 7b 0a  s.Move).      {.
7900: 20 20 20 20 20 20 20 20 44 61 74 61 47 72 69 64          DataGrid
7910: 56 69 65 77 52 6f 77 5b 5d 20 72 6f 77 73 54 6f  ViewRow[] rowsTo
7920: 4d 6f 76 65 20 3d 20 65 2e 44 61 74 61 2e 47 65  Move = e.Data.Ge
7930: 74 44 61 74 61 28 74 79 70 65 6f 66 28 44 61 74  tData(typeof(Dat
7940: 61 47 72 69 64 56 69 65 77 52 6f 77 5b 5d 29 29  aGridViewRow[]))
7950: 20 61 73 20 44 61 74 61 47 72 69 64 56 69 65 77   as DataGridView
7960: 52 6f 77 5b 5d 3b 0a 20 20 20 20 20 20 20 20 66  Row[];.        f
7970: 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e  or (int n = 0; n
7980: 20 3c 20 72 6f 77 73 54 6f 4d 6f 76 65 2e 4c 65   < rowsToMove.Le
7990: 6e 67 74 68 3b 20 6e 2b 2b 29 0a 20 20 20 20 20  ngth; n++).     
79a0: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 5f     {.          _
79b0: 64 61 74 61 47 72 69 64 2e 52 6f 77 73 2e 52 65  dataGrid.Rows.Re
79c0: 6d 6f 76 65 28 72 6f 77 73 54 6f 4d 6f 76 65 5b  move(rowsToMove[
79d0: 6e 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 5f  n]);.          _
79e0: 74 61 62 6c 65 2e 43 6f 6c 75 6d 6e 73 2e 52 65  table.Columns.Re
79f0: 6d 6f 76 65 28 72 6f 77 73 54 6f 4d 6f 76 65 5b  move(rowsToMove[
7a00: 6e 5d 2e 54 61 67 20 61 73 20 43 6f 6c 75 6d 6e  n].Tag as Column
7a10: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 5f 64 61  );.          _da
7a20: 74 61 47 72 69 64 2e 52 6f 77 73 2e 49 6e 73 65  taGrid.Rows.Inse
7a30: 72 74 28 5f 72 6f 77 49 6e 64 65 78 4f 66 49 74  rt(_rowIndexOfIt
7a40: 65 6d 55 6e 64 65 72 4d 6f 75 73 65 54 6f 44 72  emUnderMouseToDr
7a50: 6f 70 2c 20 72 6f 77 73 54 6f 4d 6f 76 65 5b 6e  op, rowsToMove[n
7a60: 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 5f 74  ]);.          _t
7a70: 61 62 6c 65 2e 43 6f 6c 75 6d 6e 73 2e 49 6e 73  able.Columns.Ins
7a80: 65 72 74 28 5f 72 6f 77 49 6e 64 65 78 4f 66 49  ert(_rowIndexOfI
7a90: 74 65 6d 55 6e 64 65 72 4d 6f 75 73 65 54 6f 44  temUnderMouseToD
7aa0: 72 6f 70 2c 20 72 6f 77 73 54 6f 4d 6f 76 65 5b  rop, rowsToMove[
7ab0: 6e 5d 2e 54 61 67 20 61 73 20 43 6f 6c 75 6d 6e  n].Tag as Column
7ac0: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
7ad0: 20 20 20 20 20 4d 61 6b 65 44 69 72 74 79 28 29       MakeDirty()
7ae0: 3b 0a 20 20 20 20 20 20 20 20 52 65 66 72 65 73  ;.        Refres
7af0: 68 54 6f 6f 6c 62 61 72 73 28 29 3b 0a 20 20 20  hToolbars();.   
7b00: 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20     }.    }..    
7b10: 70 72 69 76 61 74 65 20 76 6f 69 64 20 5f 64 61  private void _da
7b20: 74 61 47 72 69 64 5f 44 72 61 67 4f 76 65 72 28  taGrid_DragOver(
7b30: 6f 62 6a 65 63 74 20 73 65 6e 64 65 72 2c 20 44  object sender, D
7b40: 72 61 67 45 76 65 6e 74 41 72 67 73 20 65 29 0a  ragEventArgs e).
7b50: 20 20 20 20 7b 0a 20 20 20 20 20 20 2f 2f 20 54      {.      // T
7b60: 68 65 20 6d 6f 75 73 65 20 6c 6f 63 61 74 69 6f  he mouse locatio
7b70: 6e 73 20 61 72 65 20 72 65 6c 61 74 69 76 65 20  ns are relative 
7b80: 74 6f 20 74 68 65 20 73 63 72 65 65 6e 2c 20 73  to the screen, s
7b90: 6f 20 74 68 65 79 20 6d 75 73 74 20 62 65 20 0a  o they must be .
7ba0: 20 20 20 20 20 20 2f 2f 20 63 6f 6e 76 65 72 74        // convert
7bb0: 65 64 20 74 6f 20 63 6c 69 65 6e 74 20 63 6f 6f  ed to client coo
7bc0: 72 64 69 6e 61 74 65 73 2e 0a 20 20 20 20 20 20  rdinates..      
7bd0: 50 6f 69 6e 74 20 63 6c 69 65 6e 74 50 6f 69 6e  Point clientPoin
7be0: 74 20 3d 20 5f 64 61 74 61 47 72 69 64 2e 50 6f  t = _dataGrid.Po
7bf0: 69 6e 74 54 6f 43 6c 69 65 6e 74 28 6e 65 77 20  intToClient(new 
7c00: 50 6f 69 6e 74 28 65 2e 58 2c 20 65 2e 59 29 29  Point(e.X, e.Y))
7c10: 3b 0a 0a 20 20 20 20 20 20 2f 2f 20 47 65 74 20  ;..      // Get 
7c20: 74 68 65 20 72 6f 77 20 69 6e 64 65 78 20 6f 66  the row index of
7c30: 20 74 68 65 20 69 74 65 6d 20 74 68 65 20 6d 6f   the item the mo
7c40: 75 73 65 20 69 73 20 62 65 6c 6f 77 2e 20 0a 20  use is below. . 
7c50: 20 20 20 20 20 69 66 20 28 5f 72 6f 77 49 6e 64       if (_rowInd
7c60: 65 78 4f 66 49 74 65 6d 55 6e 64 65 72 4d 6f 75  exOfItemUnderMou
7c70: 73 65 54 6f 44 72 6f 70 20 21 3d 20 2d 31 29 0a  seToDrop != -1).
7c80: 20 20 20 20 20 20 20 20 5f 64 61 74 61 47 72 69          _dataGri
7c90: 64 2e 52 6f 77 73 5b 5f 72 6f 77 49 6e 64 65 78  d.Rows[_rowIndex
7ca0: 4f 66 49 74 65 6d 55 6e 64 65 72 4d 6f 75 73 65  OfItemUnderMouse
7cb0: 54 6f 44 72 6f 70 5d 2e 44 69 76 69 64 65 72 48  ToDrop].DividerH
7cc0: 65 69 67 68 74 20 3d 20 30 3b 0a 0a 20 20 20 20  eight = 0;..    
7cd0: 20 20 5f 72 6f 77 49 6e 64 65 78 4f 66 49 74 65    _rowIndexOfIte
7ce0: 6d 55 6e 64 65 72 4d 6f 75 73 65 54 6f 44 72 6f  mUnderMouseToDro
7cf0: 70 20 3d 20 5f 64 61 74 61 47 72 69 64 2e 48 69  p = _dataGrid.Hi
7d00: 74 54 65 73 74 28 63 6c 69 65 6e 74 50 6f 69 6e  tTest(clientPoin
7d10: 74 2e 58 2c 20 63 6c 69 65 6e 74 50 6f 69 6e 74  t.X, clientPoint
7d20: 2e 59 29 2e 52 6f 77 49 6e 64 65 78 3b 0a 0a 20  .Y).RowIndex;.. 
7d30: 20 20 20 20 20 69 66 20 28 5f 64 61 74 61 47 72       if (_dataGr
7d40: 69 64 2e 52 6f 77 73 5b 5f 72 6f 77 49 6e 64 65  id.Rows[_rowInde
7d50: 78 4f 66 49 74 65 6d 55 6e 64 65 72 4d 6f 75 73  xOfItemUnderMous
7d60: 65 54 6f 44 72 6f 70 5d 2e 49 73 4e 65 77 52 6f  eToDrop].IsNewRo
7d70: 77 20 3d 3d 20 66 61 6c 73 65 20 26 26 20 5f 72  w == false && _r
7d80: 6f 77 49 6e 64 65 78 4f 66 49 74 65 6d 55 6e 64  owIndexOfItemUnd
7d90: 65 72 4d 6f 75 73 65 54 6f 44 72 6f 70 20 21 3d  erMouseToDrop !=
7da0: 20 5f 72 6f 77 49 6e 64 65 78 46 72 6f 6d 4d 6f   _rowIndexFromMo
7db0: 75 73 65 44 6f 77 6e 29 0a 20 20 20 20 20 20 7b  useDown).      {
7dc0: 0a 20 20 20 20 20 20 20 20 65 2e 45 66 66 65 63  .        e.Effec
7dd0: 74 20 3d 20 44 72 61 67 44 72 6f 70 45 66 66 65  t = DragDropEffe
7de0: 63 74 73 2e 4d 6f 76 65 3b 0a 0a 20 20 20 20 20  cts.Move;..     
7df0: 20 20 20 69 66 20 28 5f 72 6f 77 49 6e 64 65 78     if (_rowIndex
7e00: 4f 66 49 74 65 6d 55 6e 64 65 72 4d 6f 75 73 65  OfItemUnderMouse
7e10: 54 6f 44 72 6f 70 20 21 3d 20 2d 31 29 0a 20 20  ToDrop != -1).  
7e20: 20 20 20 20 20 20 20 20 5f 64 61 74 61 47 72 69          _dataGri
7e30: 64 2e 52 6f 77 73 5b 5f 72 6f 77 49 6e 64 65 78  d.Rows[_rowIndex
7e40: 4f 66 49 74 65 6d 55 6e 64 65 72 4d 6f 75 73 65  OfItemUnderMouse
7e50: 54 6f 44 72 6f 70 5d 2e 44 69 76 69 64 65 72 48  ToDrop].DividerH
7e60: 65 69 67 68 74 20 3d 20 33 3b 0a 20 20 20 20 20  eight = 3;.     
7e70: 20 7d 0a 20 20 20 20 20 20 65 6c 73 65 0a 20 20   }.      else.  
7e80: 20 20 20 20 20 20 65 2e 45 66 66 65 63 74 20 3d        e.Effect =
7e90: 20 44 72 61 67 44 72 6f 70 45 66 66 65 63 74 73   DragDropEffects
7ea0: 2e 4e 6f 6e 65 3b 0a 20 20 20 20 7d 0a 0a 20 20  .None;.    }..  
7eb0: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 5f    private void _
7ec0: 64 61 74 61 47 72 69 64 5f 4d 6f 75 73 65 44 6f  dataGrid_MouseDo
7ed0: 77 6e 28 6f 62 6a 65 63 74 20 73 65 6e 64 65 72  wn(object sender
7ee0: 2c 20 4d 6f 75 73 65 45 76 65 6e 74 41 72 67 73  , MouseEventArgs
7ef0: 20 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20   e).    {.      
7f00: 2f 2f 20 47 65 74 20 74 68 65 20 69 6e 64 65 78  // Get the index
7f10: 20 6f 66 20 74 68 65 20 69 74 65 6d 20 74 68 65   of the item the
7f20: 20 6d 6f 75 73 65 20 69 73 20 62 65 6c 6f 77 2e   mouse is below.
7f30: 0a 20 20 20 20 20 20 5f 72 6f 77 49 6e 64 65 78  .      _rowIndex
7f40: 46 72 6f 6d 4d 6f 75 73 65 44 6f 77 6e 20 3d 20  FromMouseDown = 
7f50: 5f 64 61 74 61 47 72 69 64 2e 48 69 74 54 65 73  _dataGrid.HitTes
7f60: 74 28 65 2e 58 2c 20 65 2e 59 29 2e 52 6f 77 49  t(e.X, e.Y).RowI
7f70: 6e 64 65 78 3b 0a 0a 20 20 20 20 20 20 69 66 20  ndex;..      if 
7f80: 28 5f 72 6f 77 49 6e 64 65 78 46 72 6f 6d 4d 6f  (_rowIndexFromMo
7f90: 75 73 65 44 6f 77 6e 20 21 3d 20 2d 31 29 0a 20  useDown != -1). 
7fa0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 2f       {.        /
7fb0: 2f 20 52 65 6d 65 6d 62 65 72 20 74 68 65 20 70  / Remember the p
7fc0: 6f 69 6e 74 20 77 68 65 72 65 20 74 68 65 20 6d  oint where the m
7fd0: 6f 75 73 65 20 64 6f 77 6e 20 6f 63 63 75 72 72  ouse down occurr
7fe0: 65 64 2e 20 0a 20 20 20 20 20 20 20 20 2f 2f 20  ed. .        // 
7ff0: 54 68 65 20 44 72 61 67 53 69 7a 65 20 69 6e 64  The DragSize ind
8000: 69 63 61 74 65 73 20 74 68 65 20 73 69 7a 65 20  icates the size 
8010: 74 68 61 74 20 74 68 65 20 6d 6f 75 73 65 20 63  that the mouse c
8020: 61 6e 20 6d 6f 76 65 20 0a 20 20 20 20 20 20 20  an move .       
8030: 20 2f 2f 20 62 65 66 6f 72 65 20 61 20 64 72 61   // before a dra
8040: 67 20 65 76 65 6e 74 20 73 68 6f 75 6c 64 20 62  g event should b
8050: 65 20 73 74 61 72 74 65 64 2e 20 0a 20 20 20 20  e started. .    
8060: 20 20 20 20 53 69 7a 65 20 64 72 61 67 53 69 7a      Size dragSiz
8070: 65 20 3d 20 53 79 73 74 65 6d 49 6e 66 6f 72 6d  e = SystemInform
8080: 61 74 69 6f 6e 2e 44 72 61 67 53 69 7a 65 3b 0a  ation.DragSize;.
8090: 0a 20 20 20 20 20 20 20 20 2f 2f 20 43 72 65 61  .        // Crea
80a0: 74 65 20 61 20 72 65 63 74 61 6e 67 6c 65 20 75  te a rectangle u
80b0: 73 69 6e 67 20 74 68 65 20 44 72 61 67 53 69 7a  sing the DragSiz
80c0: 65 2c 20 77 69 74 68 20 74 68 65 20 6d 6f 75 73  e, with the mous
80d0: 65 20 70 6f 73 69 74 69 6f 6e 20 62 65 69 6e 67  e position being
80e0: 0a 20 20 20 20 20 20 20 20 2f 2f 20 61 74 20 74  .        // at t
80f0: 68 65 20 63 65 6e 74 65 72 20 6f 66 20 74 68 65  he center of the
8100: 20 72 65 63 74 61 6e 67 6c 65 2e 0a 20 20 20 20   rectangle..    
8110: 20 20 20 20 5f 64 72 61 67 42 6f 78 46 72 6f 6d      _dragBoxFrom
8120: 4d 6f 75 73 65 44 6f 77 6e 20 3d 20 6e 65 77 20  MouseDown = new 
8130: 52 65 63 74 61 6e 67 6c 65 28 6e 65 77 20 50 6f  Rectangle(new Po
8140: 69 6e 74 28 65 2e 58 20 2d 20 28 64 72 61 67 53  int(e.X - (dragS
8150: 69 7a 65 2e 57 69 64 74 68 20 2f 20 32 29 2c 20  ize.Width / 2), 
8160: 65 2e 59 20 2d 20 28 64 72 61 67 53 69 7a 65 2e  e.Y - (dragSize.
8170: 48 65 69 67 68 74 20 2f 20 32 29 29 2c 20 64 72  Height / 2)), dr
8180: 61 67 53 69 7a 65 29 3b 0a 20 20 20 20 20 20 7d  agSize);.      }
8190: 0a 20 20 20 20 20 20 65 6c 73 65 0a 20 20 20 20  .      else.    
81a0: 20 20 20 20 2f 2f 20 52 65 73 65 74 20 74 68 65      // Reset the
81b0: 20 72 65 63 74 61 6e 67 6c 65 20 69 66 20 74 68   rectangle if th
81c0: 65 20 6d 6f 75 73 65 20 69 73 20 6e 6f 74 20 6f  e mouse is not o
81d0: 76 65 72 20 61 6e 20 69 74 65 6d 20 69 6e 20 74  ver an item in t
81e0: 68 65 20 4c 69 73 74 42 6f 78 2e 0a 20 20 20 20  he ListBox..    
81f0: 20 20 20 20 5f 64 72 61 67 42 6f 78 46 72 6f 6d      _dragBoxFrom
8200: 4d 6f 75 73 65 44 6f 77 6e 20 3d 20 52 65 63 74  MouseDown = Rect
8210: 61 6e 67 6c 65 2e 45 6d 70 74 79 3b 0a 20 20 20  angle.Empty;.   
8220: 20 7d 0a 0a 20 20 20 20 70 72 69 76 61 74 65 20   }..    private 
8230: 76 6f 69 64 20 5f 64 61 74 61 47 72 69 64 5f 4d  void _dataGrid_M
8240: 6f 75 73 65 4d 6f 76 65 28 6f 62 6a 65 63 74 20  ouseMove(object 
8250: 73 65 6e 64 65 72 2c 20 4d 6f 75 73 65 45 76 65  sender, MouseEve
8260: 6e 74 41 72 67 73 20 65 29 0a 20 20 20 20 7b 0a  ntArgs e).    {.
8270: 20 20 20 20 20 20 69 66 20 28 28 65 2e 42 75 74        if ((e.But
8280: 74 6f 6e 20 26 20 4d 6f 75 73 65 42 75 74 74 6f  ton & MouseButto
8290: 6e 73 2e 4c 65 66 74 29 20 3d 3d 20 4d 6f 75 73  ns.Left) == Mous
82a0: 65 42 75 74 74 6f 6e 73 2e 4c 65 66 74 29 0a 20  eButtons.Left). 
82b0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 2f       {.        /
82c0: 2f 20 49 66 20 74 68 65 20 6d 6f 75 73 65 20 6d  / If the mouse m
82d0: 6f 76 65 73 20 6f 75 74 73 69 64 65 20 74 68 65  oves outside the
82e0: 20 72 65 63 74 61 6e 67 6c 65 2c 20 73 74 61 72   rectangle, star
82f0: 74 20 74 68 65 20 64 72 61 67 2e 0a 20 20 20 20  t the drag..    
8300: 20 20 20 20 69 66 20 28 5f 64 72 61 67 42 6f 78      if (_dragBox
8310: 46 72 6f 6d 4d 6f 75 73 65 44 6f 77 6e 20 21 3d  FromMouseDown !=
8320: 20 52 65 63 74 61 6e 67 6c 65 2e 45 6d 70 74 79   Rectangle.Empty
8330: 20 26 26 20 21 5f 64 72 61 67 42 6f 78 46 72 6f   && !_dragBoxFro
8340: 6d 4d 6f 75 73 65 44 6f 77 6e 2e 43 6f 6e 74 61  mMouseDown.Conta
8350: 69 6e 73 28 65 2e 58 2c 20 65 2e 59 29 29 0a 20  ins(e.X, e.Y)). 
8360: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
8370: 20 20 20 5f 72 6f 77 49 6e 64 65 78 4f 66 49 74     _rowIndexOfIt
8380: 65 6d 55 6e 64 65 72 4d 6f 75 73 65 54 6f 44 72  emUnderMouseToDr
8390: 6f 70 20 3d 20 2d 31 3b 0a 20 20 20 20 20 20 20  op = -1;.       
83a0: 20 20 20 5f 64 61 74 61 47 72 69 64 2e 45 6e 64     _dataGrid.End
83b0: 45 64 69 74 28 29 3b 0a 20 20 20 20 20 20 20 20  Edit();.        
83c0: 20 20 2f 2f 20 50 72 6f 63 65 65 64 20 77 69 74    // Proceed wit
83d0: 68 20 74 68 65 20 64 72 61 67 20 61 6e 64 20 64  h the drag and d
83e0: 72 6f 70 2c 20 70 61 73 73 69 6e 67 20 69 6e 20  rop, passing in 
83f0: 74 68 65 20 6c 69 73 74 20 69 74 65 6d 2e 20 0a  the list item. .
8400: 20 20 20 20 20 20 20 20 20 20 44 72 61 67 44 72            DragDr
8410: 6f 70 45 66 66 65 63 74 73 20 64 72 6f 70 45 66  opEffects dropEf
8420: 66 65 63 74 20 3d 20 5f 64 61 74 61 47 72 69 64  fect = _dataGrid
8430: 2e 44 6f 44 72 61 67 44 72 6f 70 28 53 65 6c 65  .DoDragDrop(Sele
8440: 63 74 65 64 52 6f 77 73 2c 20 44 72 61 67 44 72  ctedRows, DragDr
8450: 6f 70 45 66 66 65 63 74 73 2e 4d 6f 76 65 29 3b  opEffects.Move);
8460: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
8470: 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72   }.    }..    pr
8480: 69 76 61 74 65 20 76 6f 69 64 20 5f 64 61 74 61  ivate void _data
8490: 47 72 69 64 5f 43 65 6c 6c 56 61 6c 69 64 61 74  Grid_CellValidat
84a0: 65 64 28 6f 62 6a 65 63 74 20 73 65 6e 64 65 72  ed(object sender
84b0: 2c 20 44 61 74 61 47 72 69 64 56 69 65 77 43 65  , DataGridViewCe
84c0: 6c 6c 45 76 65 6e 74 41 72 67 73 20 65 29 0a 20  llEventArgs e). 
84d0: 20 20 20 7b 0a 20 20 20 20 20 20 44 61 74 61 47     {.      DataG
84e0: 72 69 64 56 69 65 77 52 6f 77 20 72 6f 77 20 3d  ridViewRow row =
84f0: 20 5f 64 61 74 61 47 72 69 64 2e 52 6f 77 73 5b   _dataGrid.Rows[
8500: 65 2e 52 6f 77 49 6e 64 65 78 5d 3b 0a 20 20 20  e.RowIndex];.   
8510: 20 20 20 43 6f 6c 75 6d 6e 20 63 6f 6c 20 3d 20     Column col = 
8520: 72 6f 77 2e 54 61 67 20 61 73 20 43 6f 6c 75 6d  row.Tag as Colum
8530: 6e 3b 0a 0a 20 20 20 20 20 20 69 66 20 28 63 6f  n;..      if (co
8540: 6c 20 3d 3d 20 6e 75 6c 6c 20 26 26 20 72 6f 77  l == null && row
8550: 2e 49 73 4e 65 77 52 6f 77 20 3d 3d 20 66 61 6c  .IsNewRow == fal
8560: 73 65 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20  se).      {.    
8570: 20 20 20 20 63 6f 6c 20 3d 20 6e 65 77 20 43 6f      col = new Co
8580: 6c 75 6d 6e 28 5f 74 61 62 6c 65 2c 20 72 6f 77  lumn(_table, row
8590: 29 3b 0a 20 20 20 20 20 20 20 20 72 6f 77 2e 54  );.        row.T
85a0: 61 67 20 3d 20 63 6f 6c 3b 0a 20 20 20 20 20 20  ag = col;.      
85b0: 20 20 5f 74 61 62 6c 65 2e 43 6f 6c 75 6d 6e 73    _table.Columns
85c0: 2e 49 6e 73 65 72 74 28 72 6f 77 2e 49 6e 64 65  .Insert(row.Inde
85d0: 78 2c 20 63 6f 6c 29 3b 0a 20 20 20 20 20 20 20  x, col);.       
85e0: 20 5f 64 61 74 61 47 72 69 64 5f 53 65 6c 65 63   _dataGrid_Selec
85f0: 74 69 6f 6e 43 68 61 6e 67 65 64 28 74 68 69 73  tionChanged(this
8600: 2c 20 6e 65 77 20 45 76 65 6e 74 41 72 67 73 28  , new EventArgs(
8610: 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ));.      }.    
8620: 20 20 69 66 20 28 63 6f 6c 20 21 3d 20 6e 75 6c    if (col != nul
8630: 6c 29 0a 20 20 20 20 20 20 20 20 63 6f 6c 2e 43  l).        col.C
8640: 65 6c 6c 56 61 6c 75 65 43 68 61 6e 67 65 64 28  ellValueChanged(
8650: 65 2e 52 6f 77 49 6e 64 65 78 2c 20 65 2e 43 6f  e.RowIndex, e.Co
8660: 6c 75 6d 6e 49 6e 64 65 78 29 3b 0a 0a 20 20 20  lumnIndex);..   
8670: 20 20 20 52 65 66 72 65 73 68 54 6f 6f 6c 62 61     RefreshToolba
8680: 72 73 28 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  rs();.    }.  }.
8690: 0a 20 20 69 6e 74 65 72 6e 61 6c 20 63 6c 61 73  .  internal clas
86a0: 73 20 45 64 69 74 6f 72 48 6f 6c 64 65 72 0a 20  s EditorHolder. 
86b0: 20 7b 0a 20 20 20 20 70 72 69 76 61 74 65 20 4c   {.    private L
86c0: 69 73 74 3c 49 6e 64 65 78 3e 20 5f 69 6e 64 65  ist<Index> _inde
86d0: 78 65 73 3b 0a 20 20 20 20 70 72 69 76 61 74 65  xes;.    private
86e0: 20 4c 69 73 74 3c 46 6f 72 65 69 67 6e 4b 65 79   List<ForeignKey
86f0: 3e 20 5f 66 6b 65 79 73 3b 0a 20 20 20 20 70 72  > _fkeys;.    pr
8700: 69 76 61 74 65 20 4c 69 73 74 3c 73 74 72 69 6e  ivate List<strin
8710: 67 3e 20 5f 63 68 65 63 6b 3b 0a 20 20 20 20 70  g> _check;.    p
8720: 72 69 76 61 74 65 20 4c 69 73 74 3c 54 72 69 67  rivate List<Trig
8730: 67 65 72 3e 20 5f 74 72 69 67 67 65 72 73 3b 0a  ger> _triggers;.
8740: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 45 64  .    internal Ed
8750: 69 74 6f 72 48 6f 6c 64 65 72 28 54 61 62 6c 65  itorHolder(Table
8760: 20 74 62 6c 29 0a 20 20 20 20 7b 0a 20 20 20 20   tbl).    {.    
8770: 20 20 5f 69 6e 64 65 78 65 73 20 3d 20 74 62 6c    _indexes = tbl
8780: 2e 49 6e 64 65 78 65 73 3b 0a 20 20 20 20 20 20  .Indexes;.      
8790: 5f 66 6b 65 79 73 20 3d 20 74 62 6c 2e 46 6f 72  _fkeys = tbl.For
87a0: 65 69 67 6e 4b 65 79 73 3b 0a 20 20 20 20 20 20  eignKeys;.      
87b0: 5f 63 68 65 63 6b 20 3d 20 74 62 6c 2e 43 68 65  _check = tbl.Che
87c0: 63 6b 3b 0a 20 20 20 20 20 20 5f 74 72 69 67 67  ck;.      _trigg
87d0: 65 72 73 20 3d 20 74 62 6c 2e 54 72 69 67 67 65  ers = tbl.Trigge
87e0: 72 73 20 61 73 20 4c 69 73 74 3c 54 72 69 67 67  rs as List<Trigg
87f0: 65 72 3e 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  er>;.    }..    
8800: 70 75 62 6c 69 63 20 4c 69 73 74 3c 49 6e 64 65  public List<Inde
8810: 78 3e 20 49 6e 64 65 78 65 73 0a 20 20 20 20 7b  x> Indexes.    {
8820: 0a 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74  .      get { ret
8830: 75 72 6e 20 5f 69 6e 64 65 78 65 73 3b 20 7d 0a  urn _indexes; }.
8840: 20 20 20 20 7d 0a 0a 20 20 20 20 70 75 62 6c 69      }..    publi
8850: 63 20 4c 69 73 74 3c 46 6f 72 65 69 67 6e 4b 65  c List<ForeignKe
8860: 79 3e 20 46 6f 72 65 69 67 6e 4b 65 79 73 0a 20  y> ForeignKeys. 
8870: 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74 20 7b     {.      get {
8880: 20 72 65 74 75 72 6e 20 5f 66 6b 65 79 73 3b 20   return _fkeys; 
8890: 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 75 62  }.    }..    pub
88a0: 6c 69 63 20 4c 69 73 74 3c 73 74 72 69 6e 67 3e  lic List<string>
88b0: 20 43 68 65 63 6b 0a 20 20 20 20 7b 0a 20 20 20   Check.    {.   
88c0: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
88d0: 5f 63 68 65 63 6b 3b 20 7d 0a 20 20 20 20 7d 0a  _check; }.    }.
88e0: 0a 20 20 20 20 70 75 62 6c 69 63 20 4c 69 73 74  .    public List
88f0: 3c 54 72 69 67 67 65 72 3e 20 54 72 69 67 67 65  <Trigger> Trigge
8900: 72 73 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67  rs.    {.      g
8910: 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 74 72 69  et { return _tri
8920: 67 67 65 72 73 3b 20 7d 0a 20 20 20 20 7d 0a 20  ggers; }.    }. 
8930: 20 7d 0a 0a 20 20 70 75 62 6c 69 63 20 63 6c 61   }..  public cla
8940: 73 73 20 44 65 73 69 67 6e 65 72 44 6f 63 42 61  ss DesignerDocBa
8950: 73 65 20 3a 20 55 73 65 72 43 6f 6e 74 72 6f 6c  se : UserControl
8960: 0a 20 20 7b 0a 20 20 20 20 70 75 62 6c 69 63 20  .  {.    public 
8970: 76 69 72 74 75 61 6c 20 73 74 72 69 6e 67 20 43  virtual string C
8980: 61 6e 6f 6e 69 63 61 6c 4e 61 6d 65 0a 20 20 20  anonicalName.   
8990: 20 7b 0a 20 20 20 20 20 20 67 65 74 0a 20 20 20   {.      get.   
89a0: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74     {.        ret
89b0: 75 72 6e 20 6e 75 6c 6c 3b 0a 20 20 20 20 20 20  urn null;.      
89c0: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 69  }.    }.  }..  i
89d0: 6e 74 65 72 6e 61 6c 20 63 6c 61 73 73 20 46 61  nternal class Fa
89e0: 6b 65 48 69 65 72 61 72 63 68 79 20 3a 20 49 56  keHierarchy : IV
89f0: 73 55 49 48 69 65 72 61 72 63 68 79 2c 20 49 56  sUIHierarchy, IV
8a00: 73 50 65 72 73 69 73 74 48 69 65 72 61 72 63 68  sPersistHierarch
8a10: 79 49 74 65 6d 32 0a 20 20 7b 0a 20 20 20 20 44  yItem2.  {.    D
8a20: 65 73 69 67 6e 65 72 44 6f 63 42 61 73 65 20 5f  esignerDocBase _
8a30: 63 6f 6e 74 72 6f 6c 3b 0a 20 20 20 20 49 56 73  control;.    IVs
8a40: 55 49 48 69 65 72 61 72 63 68 79 20 5f 6f 77 6e  UIHierarchy _own
8a50: 65 72 3b 0a 20 20 20 20 44 69 63 74 69 6f 6e 61  er;.    Dictiona
8a60: 72 79 3c 75 69 6e 74 2c 20 49 56 73 48 69 65 72  ry<uint, IVsHier
8a70: 61 72 63 68 79 45 76 65 6e 74 73 3e 20 5f 65 76  archyEvents> _ev
8a80: 65 6e 74 73 20 3d 20 6e 65 77 20 44 69 63 74 69  ents = new Dicti
8a90: 6f 6e 61 72 79 3c 75 69 6e 74 2c 20 49 56 73 48  onary<uint, IVsH
8aa0: 69 65 72 61 72 63 68 79 45 76 65 6e 74 73 3e 28  ierarchyEvents>(
8ab0: 29 3b 0a 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  );..    internal
8ac0: 20 46 61 6b 65 48 69 65 72 61 72 63 68 79 28 44   FakeHierarchy(D
8ad0: 65 73 69 67 6e 65 72 44 6f 63 42 61 73 65 20 63  esignerDocBase c
8ae0: 6f 6e 74 72 6f 6c 2c 20 49 56 73 55 49 48 69 65  ontrol, IVsUIHie
8af0: 72 61 72 63 68 79 20 6f 77 6e 65 72 29 0a 20 20  rarchy owner).  
8b00: 20 20 7b 0a 20 20 20 20 20 20 5f 63 6f 6e 74 72    {.      _contr
8b10: 6f 6c 20 3d 20 63 6f 6e 74 72 6f 6c 3b 0a 20 20  ol = control;.  
8b20: 20 20 20 20 5f 6f 77 6e 65 72 20 3d 20 6f 77 6e      _owner = own
8b30: 65 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23  er;.    }..    #
8b40: 72 65 67 69 6f 6e 20 49 56 73 55 49 48 69 65 72  region IVsUIHier
8b50: 61 72 63 68 79 20 4d 65 6d 62 65 72 73 0a 0a 20  archy Members.. 
8b60: 20 20 20 69 6e 74 20 49 56 73 55 49 48 69 65 72     int IVsUIHier
8b70: 61 72 63 68 79 2e 41 64 76 69 73 65 48 69 65 72  archy.AdviseHier
8b80: 61 72 63 68 79 45 76 65 6e 74 73 28 49 56 73 48  archyEvents(IVsH
8b90: 69 65 72 61 72 63 68 79 45 76 65 6e 74 73 20 70  ierarchyEvents p
8ba0: 45 76 65 6e 74 53 69 6e 6b 2c 20 6f 75 74 20 75  EventSink, out u
8bb0: 69 6e 74 20 70 64 77 43 6f 6f 6b 69 65 29 0a 20  int pdwCookie). 
8bc0: 20 20 20 7b 0a 20 20 20 20 20 20 70 64 77 43 6f     {.      pdwCo
8bd0: 6f 6b 69 65 20 3d 20 31 30 30 3b 0a 20 20 20 20  okie = 100;.    
8be0: 20 20 77 68 69 6c 65 20 28 5f 65 76 65 6e 74 73    while (_events
8bf0: 2e 43 6f 6e 74 61 69 6e 73 4b 65 79 28 70 64 77  .ContainsKey(pdw
8c00: 43 6f 6f 6b 69 65 29 29 0a 20 20 20 20 20 20 20  Cookie)).       
8c10: 20 70 64 77 43 6f 6f 6b 69 65 2b 2b 3b 0a 0a 20   pdwCookie++;.. 
8c20: 20 20 20 20 20 5f 65 76 65 6e 74 73 5b 70 64 77       _events[pdw
8c30: 43 6f 6f 6b 69 65 5d 20 3d 20 70 45 76 65 6e 74  Cookie] = pEvent
8c40: 53 69 6e 6b 3b 0a 0a 20 20 20 20 20 20 72 65 74  Sink;..      ret
8c50: 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74 73 2e  urn VSConstants.
8c60: 53 5f 4f 4b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  S_OK;.    }..   
8c70: 20 69 6e 74 20 49 56 73 55 49 48 69 65 72 61 72   int IVsUIHierar
8c80: 63 68 79 2e 43 6c 6f 73 65 28 29 0a 20 20 20 20  chy.Close().    
8c90: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 56  {.      return V
8ca0: 53 43 6f 6e 73 74 61 6e 74 73 2e 53 5f 4f 4b 3b  SConstants.S_OK;
8cb0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20  .    }..    int 
8cc0: 49 56 73 55 49 48 69 65 72 61 72 63 68 79 2e 45  IVsUIHierarchy.E
8cd0: 78 65 63 43 6f 6d 6d 61 6e 64 28 75 69 6e 74 20  xecCommand(uint 
8ce0: 69 74 65 6d 69 64 2c 20 72 65 66 20 47 75 69 64  itemid, ref Guid
8cf0: 20 70 67 75 69 64 43 6d 64 47 72 6f 75 70 2c 20   pguidCmdGroup, 
8d00: 75 69 6e 74 20 6e 43 6d 64 49 44 2c 20 75 69 6e  uint nCmdID, uin
8d10: 74 20 6e 43 6d 64 65 78 65 63 6f 70 74 2c 20 49  t nCmdexecopt, I
8d20: 6e 74 50 74 72 20 70 76 61 49 6e 2c 20 49 6e 74  ntPtr pvaIn, Int
8d30: 50 74 72 20 70 76 61 4f 75 74 29 0a 20 20 20 20  Ptr pvaOut).    
8d40: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 56  {.      return V
8d50: 53 43 6f 6e 73 74 61 6e 74 73 2e 45 5f 4e 4f 54  SConstants.E_NOT
8d60: 49 4d 50 4c 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  IMPL;.    }..   
8d70: 20 69 6e 74 20 49 56 73 55 49 48 69 65 72 61 72   int IVsUIHierar
8d80: 63 68 79 2e 47 65 74 43 61 6e 6f 6e 69 63 61 6c  chy.GetCanonical
8d90: 4e 61 6d 65 28 75 69 6e 74 20 69 74 65 6d 69 64  Name(uint itemid
8da0: 2c 20 6f 75 74 20 73 74 72 69 6e 67 20 70 62 73  , out string pbs
8db0: 74 72 4e 61 6d 65 29 0a 20 20 20 20 7b 0a 20 20  trName).    {.  
8dc0: 20 20 20 20 70 62 73 74 72 4e 61 6d 65 20 3d 20      pbstrName = 
8dd0: 5f 63 6f 6e 74 72 6f 6c 2e 43 61 6e 6f 6e 69 63  _control.Canonic
8de0: 61 6c 4e 61 6d 65 3b 0a 20 20 20 20 20 20 72 65  alName;.      re
8df0: 74 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74 73  turn VSConstants
8e00: 2e 53 5f 4f 4b 3b 0a 20 20 20 20 7d 0a 0a 20 20  .S_OK;.    }..  
8e10: 20 20 69 6e 74 20 49 56 73 55 49 48 69 65 72 61    int IVsUIHiera
8e20: 72 63 68 79 2e 47 65 74 47 75 69 64 50 72 6f 70  rchy.GetGuidProp
8e30: 65 72 74 79 28 75 69 6e 74 20 69 74 65 6d 69 64  erty(uint itemid
8e40: 2c 20 69 6e 74 20 70 72 6f 70 69 64 2c 20 6f 75  , int propid, ou
8e50: 74 20 47 75 69 64 20 70 67 75 69 64 29 0a 20 20  t Guid pguid).  
8e60: 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e    {.      return
8e70: 20 5f 6f 77 6e 65 72 2e 47 65 74 47 75 69 64 50   _owner.GetGuidP
8e80: 72 6f 70 65 72 74 79 28 69 74 65 6d 69 64 2c 20  roperty(itemid, 
8e90: 70 72 6f 70 69 64 2c 20 6f 75 74 20 70 67 75 69  propid, out pgui
8ea0: 64 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  d);.    }..    i
8eb0: 6e 74 20 49 56 73 55 49 48 69 65 72 61 72 63 68  nt IVsUIHierarch
8ec0: 79 2e 47 65 74 4e 65 73 74 65 64 48 69 65 72 61  y.GetNestedHiera
8ed0: 72 63 68 79 28 75 69 6e 74 20 69 74 65 6d 69 64  rchy(uint itemid
8ee0: 2c 20 72 65 66 20 47 75 69 64 20 69 69 64 48 69  , ref Guid iidHi
8ef0: 65 72 61 72 63 68 79 4e 65 73 74 65 64 2c 20 6f  erarchyNested, o
8f00: 75 74 20 49 6e 74 50 74 72 20 70 70 48 69 65 72  ut IntPtr ppHier
8f10: 61 72 63 68 79 4e 65 73 74 65 64 2c 20 6f 75 74  archyNested, out
8f20: 20 75 69 6e 74 20 70 69 74 65 6d 69 64 4e 65 73   uint pitemidNes
8f30: 74 65 64 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  ted).    {.     
8f40: 20 70 70 48 69 65 72 61 72 63 68 79 4e 65 73 74   ppHierarchyNest
8f50: 65 64 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  ed = IntPtr.Zero
8f60: 3b 0a 20 20 20 20 20 20 70 69 74 65 6d 69 64 4e  ;.      pitemidN
8f70: 65 73 74 65 64 20 3d 20 30 3b 0a 0a 20 20 20 20  ested = 0;..    
8f80: 20 20 72 65 74 75 72 6e 20 56 53 43 6f 6e 73 74    return VSConst
8f90: 61 6e 74 73 2e 45 5f 4e 4f 54 49 4d 50 4c 3b 0a  ants.E_NOTIMPL;.
8fa0: 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20 49      }..    int I
8fb0: 56 73 55 49 48 69 65 72 61 72 63 68 79 2e 47 65  VsUIHierarchy.Ge
8fc0: 74 50 72 6f 70 65 72 74 79 28 75 69 6e 74 20 69  tProperty(uint i
8fd0: 74 65 6d 69 64 2c 20 69 6e 74 20 70 72 6f 70 69  temid, int propi
8fe0: 64 2c 20 6f 75 74 20 6f 62 6a 65 63 74 20 70 76  d, out object pv
8ff0: 61 72 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  ar).    {.      
9000: 70 76 61 72 20 3d 20 6e 75 6c 6c 3b 0a 0a 20 20  pvar = null;..  
9010: 20 20 20 20 73 77 69 74 63 68 20 28 28 5f 5f 56      switch ((__V
9020: 53 48 50 52 4f 50 49 44 29 70 72 6f 70 69 64 29  SHPROPID)propid)
9030: 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  .      {.       
9040: 20 63 61 73 65 20 5f 5f 56 53 48 50 52 4f 50 49   case __VSHPROPI
9050: 44 2e 56 53 48 50 52 4f 50 49 44 5f 41 6c 6c 6f  D.VSHPROPID_Allo
9060: 77 45 64 69 74 49 6e 52 75 6e 4d 6f 64 65 3a 0a  wEditInRunMode:.
9070: 20 20 20 20 20 20 20 20 20 20 70 76 61 72 20 3d            pvar =
9080: 20 74 72 75 65 3b 0a 20 20 20 20 20 20 20 20 20   true;.         
9090: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
90a0: 63 61 73 65 20 5f 5f 56 53 48 50 52 4f 50 49 44  case __VSHPROPID
90b0: 2e 56 53 48 50 52 4f 50 49 44 5f 43 61 6e 42 75  .VSHPROPID_CanBu
90c0: 69 6c 64 46 72 6f 6d 4d 65 6d 6f 72 79 3a 0a 20  ildFromMemory:. 
90d0: 20 20 20 20 20 20 20 20 20 70 76 61 72 20 3d 20           pvar = 
90e0: 74 72 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20  true;.          
90f0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63  break;.        c
9100: 61 73 65 20 5f 5f 56 53 48 50 52 4f 50 49 44 2e  ase __VSHPROPID.
9110: 56 53 48 50 52 4f 50 49 44 5f 43 61 70 74 69 6f  VSHPROPID_Captio
9120: 6e 3a 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  n:.        case 
9130: 5f 5f 56 53 48 50 52 4f 50 49 44 2e 56 53 48 50  __VSHPROPID.VSHP
9140: 52 4f 50 49 44 5f 53 61 76 65 4e 61 6d 65 3a 0a  ROPID_SaveName:.
9150: 20 20 20 20 20 20 20 20 20 20 70 76 61 72 20 3d            pvar =
9160: 20 5f 63 6f 6e 74 72 6f 6c 2e 43 61 6e 6f 6e 69   _control.Canoni
9170: 63 61 6c 4e 61 6d 65 3b 0a 20 20 20 20 20 20 20  calName;.       
9180: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
9190: 20 20 63 61 73 65 20 5f 5f 56 53 48 50 52 4f 50    case __VSHPROP
91a0: 49 44 2e 56 53 48 50 52 4f 50 49 44 5f 49 73 48  ID.VSHPROPID_IsH
91b0: 69 64 64 65 6e 49 74 65 6d 3a 0a 20 20 20 20 20  iddenItem:.     
91c0: 20 20 20 20 20 70 76 61 72 20 3d 20 74 72 75 65       pvar = true
91d0: 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ;.          brea
91e0: 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  k;.        case 
91f0: 5f 5f 56 53 48 50 52 4f 50 49 44 2e 56 53 48 50  __VSHPROPID.VSHP
9200: 52 4f 50 49 44 5f 49 73 4e 65 77 55 6e 73 61 76  ROPID_IsNewUnsav
9210: 65 64 49 74 65 6d 3a 0a 20 20 20 20 20 20 20 20  edItem:.        
9220: 20 20 70 76 61 72 20 3d 20 74 72 75 65 3b 0a 20    pvar = true;. 
9230: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
9240: 20 20 20 20 20 20 20 20 63 61 73 65 20 5f 5f 56          case __V
9250: 53 48 50 52 4f 50 49 44 2e 56 53 48 50 52 4f 50  SHPROPID.VSHPROP
9260: 49 44 5f 53 68 6f 77 4f 6e 6c 79 49 74 65 6d 43  ID_ShowOnlyItemC
9270: 61 70 74 69 6f 6e 3a 0a 20 20 20 20 20 20 20 20  aption:.        
9280: 20 20 70 76 61 72 20 3d 20 74 72 75 65 3b 0a 20    pvar = true;. 
9290: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
92a0: 20 20 20 20 20 20 20 20 63 61 73 65 20 5f 5f 56          case __V
92b0: 53 48 50 52 4f 50 49 44 2e 56 53 48 50 52 4f 50  SHPROPID.VSHPROP
92c0: 49 44 5f 49 63 6f 6e 49 6d 67 4c 69 73 74 3a 0a  ID_IconImgList:.
92d0: 20 20 20 20 20 20 20 20 20 20 70 76 61 72 20 3d            pvar =
92e0: 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72   0;.          br
92f0: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73  eak;.        cas
9300: 65 20 5f 5f 56 53 48 50 52 4f 50 49 44 2e 56 53  e __VSHPROPID.VS
9310: 48 50 52 4f 50 49 44 5f 49 63 6f 6e 48 61 6e 64  HPROPID_IconHand
9320: 6c 65 3a 0a 20 20 20 20 20 20 20 20 20 20 70 76  le:.          pv
9330: 61 72 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20 20  ar = null;.     
9340: 20 20 20 20 20 72 65 74 75 72 6e 20 56 53 43 6f       return VSCo
9350: 6e 73 74 61 6e 74 73 2e 53 5f 4f 4b 3b 0a 20 20  nstants.S_OK;.  
9360: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66 20      }..      if 
9370: 28 70 76 61 72 20 3d 3d 20 6e 75 6c 6c 29 0a 20  (pvar == null). 
9380: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6f         return _o
9390: 77 6e 65 72 2e 47 65 74 50 72 6f 70 65 72 74 79  wner.GetProperty
93a0: 28 69 74 65 6d 69 64 2c 20 70 72 6f 70 69 64 2c  (itemid, propid,
93b0: 20 6f 75 74 20 70 76 61 72 29 3b 0a 20 20 20 20   out pvar);.    
93c0: 20 20 65 6c 73 65 0a 20 20 20 20 20 20 20 20 72    else.        r
93d0: 65 74 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74  eturn VSConstant
93e0: 73 2e 53 5f 4f 4b 3b 0a 20 20 20 20 7d 0a 0a 20  s.S_OK;.    }.. 
93f0: 20 20 20 69 6e 74 20 49 56 73 55 49 48 69 65 72     int IVsUIHier
9400: 61 72 63 68 79 2e 47 65 74 53 69 74 65 28 6f 75  archy.GetSite(ou
9410: 74 20 4d 69 63 72 6f 73 6f 66 74 2e 56 69 73 75  t Microsoft.Visu
9420: 61 6c 53 74 75 64 69 6f 2e 4f 4c 45 2e 49 6e 74  alStudio.OLE.Int
9430: 65 72 6f 70 2e 49 53 65 72 76 69 63 65 50 72 6f  erop.IServicePro
9440: 76 69 64 65 72 20 70 70 53 50 29 0a 20 20 20 20  vider ppSP).    
9450: 7b 0a 20 20 20 20 20 20 70 70 53 50 20 3d 20 6e  {.      ppSP = n
9460: 75 6c 6c 3b 0a 20 20 20 20 20 20 72 65 74 75 72  ull;.      retur
9470: 6e 20 56 53 43 6f 6e 73 74 61 6e 74 73 2e 45 5f  n VSConstants.E_
9480: 4e 4f 54 49 4d 50 4c 3b 0a 20 20 20 20 7d 0a 0a  NOTIMPL;.    }..
9490: 20 20 20 20 69 6e 74 20 49 56 73 55 49 48 69 65      int IVsUIHie
94a0: 72 61 72 63 68 79 2e 50 61 72 73 65 43 61 6e 6f  rarchy.ParseCano
94b0: 6e 69 63 61 6c 4e 61 6d 65 28 73 74 72 69 6e 67  nicalName(string
94c0: 20 70 73 7a 4e 61 6d 65 2c 20 6f 75 74 20 75 69   pszName, out ui
94d0: 6e 74 20 70 69 74 65 6d 69 64 29 0a 20 20 20 20  nt pitemid).    
94e0: 7b 0a 20 20 20 20 20 20 70 69 74 65 6d 69 64 20  {.      pitemid 
94f0: 3d 20 30 3b 0a 20 20 20 20 20 20 72 65 74 75 72  = 0;.      retur
9500: 6e 20 56 53 43 6f 6e 73 74 61 6e 74 73 2e 45 5f  n VSConstants.E_
9510: 4e 4f 54 49 4d 50 4c 3b 0a 20 20 20 20 7d 0a 0a  NOTIMPL;.    }..
9520: 20 20 20 20 69 6e 74 20 49 56 73 55 49 48 69 65      int IVsUIHie
9530: 72 61 72 63 68 79 2e 51 75 65 72 79 43 6c 6f 73  rarchy.QueryClos
9540: 65 28 6f 75 74 20 69 6e 74 20 70 66 43 61 6e 43  e(out int pfCanC
9550: 6c 6f 73 65 29 0a 20 20 20 20 7b 0a 20 20 20 20  lose).    {.    
9560: 20 20 70 66 43 61 6e 43 6c 6f 73 65 20 3d 20 31    pfCanClose = 1
9570: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 56  ;.      return V
9580: 53 43 6f 6e 73 74 61 6e 74 73 2e 53 5f 4f 4b 3b  SConstants.S_OK;
9590: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20  .    }..    int 
95a0: 49 56 73 55 49 48 69 65 72 61 72 63 68 79 2e 51  IVsUIHierarchy.Q
95b0: 75 65 72 79 53 74 61 74 75 73 43 6f 6d 6d 61 6e  ueryStatusComman
95c0: 64 28 75 69 6e 74 20 69 74 65 6d 69 64 2c 20 72  d(uint itemid, r
95d0: 65 66 20 47 75 69 64 20 70 67 75 69 64 43 6d 64  ef Guid pguidCmd
95e0: 47 72 6f 75 70 2c 20 75 69 6e 74 20 63 43 6d 64  Group, uint cCmd
95f0: 73 2c 20 4f 4c 45 43 4d 44 5b 5d 20 70 72 67 43  s, OLECMD[] prgC
9600: 6d 64 73 2c 20 49 6e 74 50 74 72 20 70 43 6d 64  mds, IntPtr pCmd
9610: 54 65 78 74 29 0a 20 20 20 20 7b 0a 20 20 20 20  Text).    {.    
9620: 20 20 72 65 74 75 72 6e 20 56 53 43 6f 6e 73 74    return VSConst
9630: 61 6e 74 73 2e 45 5f 4e 4f 54 49 4d 50 4c 3b 0a  ants.E_NOTIMPL;.
9640: 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20 49      }..    int I
9650: 56 73 55 49 48 69 65 72 61 72 63 68 79 2e 53 65  VsUIHierarchy.Se
9660: 74 47 75 69 64 50 72 6f 70 65 72 74 79 28 75 69  tGuidProperty(ui
9670: 6e 74 20 69 74 65 6d 69 64 2c 20 69 6e 74 20 70  nt itemid, int p
9680: 72 6f 70 69 64 2c 20 72 65 66 20 47 75 69 64 20  ropid, ref Guid 
9690: 72 67 75 69 64 29 0a 20 20 20 20 7b 0a 20 20 20  rguid).    {.   
96a0: 20 20 20 72 65 74 75 72 6e 20 56 53 43 6f 6e 73     return VSCons
96b0: 74 61 6e 74 73 2e 45 5f 4e 4f 54 49 4d 50 4c 3b  tants.E_NOTIMPL;
96c0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20  .    }..    int 
96d0: 49 56 73 55 49 48 69 65 72 61 72 63 68 79 2e 53  IVsUIHierarchy.S
96e0: 65 74 50 72 6f 70 65 72 74 79 28 75 69 6e 74 20  etProperty(uint 
96f0: 69 74 65 6d 69 64 2c 20 69 6e 74 20 70 72 6f 70  itemid, int prop
9700: 69 64 2c 20 6f 62 6a 65 63 74 20 76 61 72 29 0a  id, object var).
9710: 20 20 20 20 7b 0a 20 20 20 20 20 20 66 6f 72 65      {.      fore
9720: 61 63 68 28 49 56 73 48 69 65 72 61 72 63 68 79  ach(IVsHierarchy
9730: 45 76 65 6e 74 73 20 6c 69 73 74 65 6e 65 72 20  Events listener 
9740: 69 6e 20 5f 65 76 65 6e 74 73 2e 56 61 6c 75 65  in _events.Value
9750: 73 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20  s).      {.     
9760: 20 20 20 6c 69 73 74 65 6e 65 72 2e 4f 6e 50 72     listener.OnPr
9770: 6f 70 65 72 74 79 43 68 61 6e 67 65 64 28 69 74  opertyChanged(it
9780: 65 6d 69 64 2c 20 70 72 6f 70 69 64 2c 20 30 29  emid, propid, 0)
9790: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
97a0: 72 65 74 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e  return VSConstan
97b0: 74 73 2e 53 5f 4f 4b 3b 0a 20 20 20 20 7d 0a 0a  ts.S_OK;.    }..
97c0: 20 20 20 20 69 6e 74 20 49 56 73 55 49 48 69 65      int IVsUIHie
97d0: 72 61 72 63 68 79 2e 53 65 74 53 69 74 65 28 4d  rarchy.SetSite(M
97e0: 69 63 72 6f 73 6f 66 74 2e 56 69 73 75 61 6c 53  icrosoft.VisualS
97f0: 74 75 64 69 6f 2e 4f 4c 45 2e 49 6e 74 65 72 6f  tudio.OLE.Intero
9800: 70 2e 49 53 65 72 76 69 63 65 50 72 6f 76 69 64  p.IServiceProvid
9810: 65 72 20 70 73 70 29 0a 20 20 20 20 7b 0a 20 20  er psp).    {.  
9820: 20 20 20 20 72 65 74 75 72 6e 20 56 53 43 6f 6e      return VSCon
9830: 73 74 61 6e 74 73 2e 45 5f 4e 4f 54 49 4d 50 4c  stants.E_NOTIMPL
9840: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74  ;.    }..    int
9850: 20 49 56 73 55 49 48 69 65 72 61 72 63 68 79 2e   IVsUIHierarchy.
9860: 55 6e 61 64 76 69 73 65 48 69 65 72 61 72 63 68  UnadviseHierarch
9870: 79 45 76 65 6e 74 73 28 75 69 6e 74 20 64 77 43  yEvents(uint dwC
9880: 6f 6f 6b 69 65 29 0a 20 20 20 20 7b 0a 20 20 20  ookie).    {.   
9890: 20 20 20 5f 65 76 65 6e 74 73 2e 52 65 6d 6f 76     _events.Remov
98a0: 65 28 64 77 43 6f 6f 6b 69 65 29 3b 0a 20 20 20  e(dwCookie);.   
98b0: 20 20 20 72 65 74 75 72 6e 20 56 53 43 6f 6e 73     return VSCons
98c0: 74 61 6e 74 73 2e 53 5f 4f 4b 3b 0a 20 20 20 20  tants.S_OK;.    
98d0: 7d 0a 0a 20 20 20 20 69 6e 74 20 49 56 73 55 49  }..    int IVsUI
98e0: 48 69 65 72 61 72 63 68 79 2e 55 6e 75 73 65 64  Hierarchy.Unused
98f0: 30 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  0().    {.      
9900: 72 65 74 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e  return VSConstan
9910: 74 73 2e 45 5f 4e 4f 54 49 4d 50 4c 3b 0a 20 20  ts.E_NOTIMPL;.  
9920: 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20 49 56 73    }..    int IVs
9930: 55 49 48 69 65 72 61 72 63 68 79 2e 55 6e 75 73  UIHierarchy.Unus
9940: 65 64 31 28 29 0a 20 20 20 20 7b 0a 20 20 20 20  ed1().    {.    
9950: 20 20 72 65 74 75 72 6e 20 56 53 43 6f 6e 73 74    return VSConst
9960: 61 6e 74 73 2e 45 5f 4e 4f 54 49 4d 50 4c 3b 0a  ants.E_NOTIMPL;.
9970: 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20 49      }..    int I
9980: 56 73 55 49 48 69 65 72 61 72 63 68 79 2e 55 6e  VsUIHierarchy.Un
9990: 75 73 65 64 32 28 29 0a 20 20 20 20 7b 0a 20 20  used2().    {.  
99a0: 20 20 20 20 72 65 74 75 72 6e 20 56 53 43 6f 6e      return VSCon
99b0: 73 74 61 6e 74 73 2e 45 5f 4e 4f 54 49 4d 50 4c  stants.E_NOTIMPL
99c0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74  ;.    }..    int
99d0: 20 49 56 73 55 49 48 69 65 72 61 72 63 68 79 2e   IVsUIHierarchy.
99e0: 55 6e 75 73 65 64 33 28 29 0a 20 20 20 20 7b 0a  Unused3().    {.
99f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 56 53 43        return VSC
9a00: 6f 6e 73 74 61 6e 74 73 2e 45 5f 4e 4f 54 49 4d  onstants.E_NOTIM
9a10: 50 4c 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  PL;.    }..    i
9a20: 6e 74 20 49 56 73 55 49 48 69 65 72 61 72 63 68  nt IVsUIHierarch
9a30: 79 2e 55 6e 75 73 65 64 34 28 29 0a 20 20 20 20  y.Unused4().    
9a40: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 56  {.      return V
9a50: 53 43 6f 6e 73 74 61 6e 74 73 2e 45 5f 4e 4f 54  SConstants.E_NOT
9a60: 49 4d 50 4c 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  IMPL;.    }..   
9a70: 20 23 65 6e 64 72 65 67 69 6f 6e 0a 0a 20 20 20   #endregion..   
9a80: 20 23 72 65 67 69 6f 6e 20 49 56 73 48 69 65 72   #region IVsHier
9a90: 61 72 63 68 79 20 4d 65 6d 62 65 72 73 0a 0a 20  archy Members.. 
9aa0: 20 20 20 69 6e 74 20 49 56 73 48 69 65 72 61 72     int IVsHierar
9ab0: 63 68 79 2e 41 64 76 69 73 65 48 69 65 72 61 72  chy.AdviseHierar
9ac0: 63 68 79 45 76 65 6e 74 73 28 49 56 73 48 69 65  chyEvents(IVsHie
9ad0: 72 61 72 63 68 79 45 76 65 6e 74 73 20 70 45 76  rarchyEvents pEv
9ae0: 65 6e 74 53 69 6e 6b 2c 20 6f 75 74 20 75 69 6e  entSink, out uin
9af0: 74 20 70 64 77 43 6f 6f 6b 69 65 29 0a 20 20 20  t pdwCookie).   
9b00: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
9b10: 28 28 49 56 73 55 49 48 69 65 72 61 72 63 68 79  ((IVsUIHierarchy
9b20: 29 74 68 69 73 29 2e 41 64 76 69 73 65 48 69 65  )this).AdviseHie
9b30: 72 61 72 63 68 79 45 76 65 6e 74 73 28 70 45 76  rarchyEvents(pEv
9b40: 65 6e 74 53 69 6e 6b 2c 20 6f 75 74 20 70 64 77  entSink, out pdw
9b50: 43 6f 6f 6b 69 65 29 3b 0a 20 20 20 20 7d 0a 0a  Cookie);.    }..
9b60: 20 20 20 20 69 6e 74 20 49 56 73 48 69 65 72 61      int IVsHiera
9b70: 72 63 68 79 2e 43 6c 6f 73 65 28 29 0a 20 20 20  rchy.Close().   
9b80: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
9b90: 28 28 49 56 73 55 49 48 69 65 72 61 72 63 68 79  ((IVsUIHierarchy
9ba0: 29 74 68 69 73 29 2e 43 6c 6f 73 65 28 29 3b 0a  )this).Close();.
9bb0: 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20 49      }..    int I
9bc0: 56 73 48 69 65 72 61 72 63 68 79 2e 47 65 74 43  VsHierarchy.GetC
9bd0: 61 6e 6f 6e 69 63 61 6c 4e 61 6d 65 28 75 69 6e  anonicalName(uin
9be0: 74 20 69 74 65 6d 69 64 2c 20 6f 75 74 20 73 74  t itemid, out st
9bf0: 72 69 6e 67 20 70 62 73 74 72 4e 61 6d 65 29 0a  ring pbstrName).
9c00: 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75      {.      retu
9c10: 72 6e 20 28 28 49 56 73 55 49 48 69 65 72 61 72  rn ((IVsUIHierar
9c20: 63 68 79 29 74 68 69 73 29 2e 47 65 74 43 61 6e  chy)this).GetCan
9c30: 6f 6e 69 63 61 6c 4e 61 6d 65 28 69 74 65 6d 69  onicalName(itemi
9c40: 64 2c 20 6f 75 74 20 70 62 73 74 72 4e 61 6d 65  d, out pbstrName
9c50: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e  );.    }..    in
9c60: 74 20 49 56 73 48 69 65 72 61 72 63 68 79 2e 47  t IVsHierarchy.G
9c70: 65 74 47 75 69 64 50 72 6f 70 65 72 74 79 28 75  etGuidProperty(u
9c80: 69 6e 74 20 69 74 65 6d 69 64 2c 20 69 6e 74 20  int itemid, int 
9c90: 70 72 6f 70 69 64 2c 20 6f 75 74 20 47 75 69 64  propid, out Guid
9ca0: 20 70 67 75 69 64 29 0a 20 20 20 20 7b 0a 20 20   pguid).    {.  
9cb0: 20 20 20 20 72 65 74 75 72 6e 20 28 28 49 56 73      return ((IVs
9cc0: 55 49 48 69 65 72 61 72 63 68 79 29 74 68 69 73  UIHierarchy)this
9cd0: 29 2e 47 65 74 47 75 69 64 50 72 6f 70 65 72 74  ).GetGuidPropert
9ce0: 79 28 69 74 65 6d 69 64 2c 20 70 72 6f 70 69 64  y(itemid, propid
9cf0: 2c 20 6f 75 74 20 70 67 75 69 64 29 3b 0a 20 20  , out pguid);.  
9d00: 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20 49 56 73    }..    int IVs
9d10: 48 69 65 72 61 72 63 68 79 2e 47 65 74 4e 65 73  Hierarchy.GetNes
9d20: 74 65 64 48 69 65 72 61 72 63 68 79 28 75 69 6e  tedHierarchy(uin
9d30: 74 20 69 74 65 6d 69 64 2c 20 72 65 66 20 47 75  t itemid, ref Gu
9d40: 69 64 20 69 69 64 48 69 65 72 61 72 63 68 79 4e  id iidHierarchyN
9d50: 65 73 74 65 64 2c 20 6f 75 74 20 49 6e 74 50 74  ested, out IntPt
9d60: 72 20 70 70 48 69 65 72 61 72 63 68 79 4e 65 73  r ppHierarchyNes
9d70: 74 65 64 2c 20 6f 75 74 20 75 69 6e 74 20 70 69  ted, out uint pi
9d80: 74 65 6d 69 64 4e 65 73 74 65 64 29 0a 20 20 20  temidNested).   
9d90: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
9da0: 28 28 49 56 73 55 49 48 69 65 72 61 72 63 68 79  ((IVsUIHierarchy
9db0: 29 74 68 69 73 29 2e 47 65 74 4e 65 73 74 65 64  )this).GetNested
9dc0: 48 69 65 72 61 72 63 68 79 28 69 74 65 6d 69 64  Hierarchy(itemid
9dd0: 2c 20 72 65 66 20 69 69 64 48 69 65 72 61 72 63  , ref iidHierarc
9de0: 68 79 4e 65 73 74 65 64 2c 20 6f 75 74 20 70 70  hyNested, out pp
9df0: 48 69 65 72 61 72 63 68 79 4e 65 73 74 65 64 2c  HierarchyNested,
9e00: 20 6f 75 74 20 70 69 74 65 6d 69 64 4e 65 73 74   out pitemidNest
9e10: 65 64 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ed);.    }..    
9e20: 69 6e 74 20 49 56 73 48 69 65 72 61 72 63 68 79  int IVsHierarchy
9e30: 2e 47 65 74 50 72 6f 70 65 72 74 79 28 75 69 6e  .GetProperty(uin
9e40: 74 20 69 74 65 6d 69 64 2c 20 69 6e 74 20 70 72  t itemid, int pr
9e50: 6f 70 69 64 2c 20 6f 75 74 20 6f 62 6a 65 63 74  opid, out object
9e60: 20 70 76 61 72 29 0a 20 20 20 20 7b 0a 20 20 20   pvar).    {.   
9e70: 20 20 20 72 65 74 75 72 6e 20 28 28 49 56 73 55     return ((IVsU
9e80: 49 48 69 65 72 61 72 63 68 79 29 74 68 69 73 29  IHierarchy)this)
9e90: 2e 47 65 74 50 72 6f 70 65 72 74 79 28 69 74 65  .GetProperty(ite
9ea0: 6d 69 64 2c 20 70 72 6f 70 69 64 2c 20 6f 75 74  mid, propid, out
9eb0: 20 70 76 61 72 29 3b 0a 20 20 20 20 7d 0a 0a 20   pvar);.    }.. 
9ec0: 20 20 20 69 6e 74 20 49 56 73 48 69 65 72 61 72     int IVsHierar
9ed0: 63 68 79 2e 47 65 74 53 69 74 65 28 6f 75 74 20  chy.GetSite(out 
9ee0: 4d 69 63 72 6f 73 6f 66 74 2e 56 69 73 75 61 6c  Microsoft.Visual
9ef0: 53 74 75 64 69 6f 2e 4f 4c 45 2e 49 6e 74 65 72  Studio.OLE.Inter
9f00: 6f 70 2e 49 53 65 72 76 69 63 65 50 72 6f 76 69  op.IServiceProvi
9f10: 64 65 72 20 70 70 53 50 29 0a 20 20 20 20 7b 0a  der ppSP).    {.
9f20: 20 20 20 20 20 20 70 70 53 50 20 3d 20 6e 75 6c        ppSP = nul
9f30: 6c 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  l;.      return 
9f40: 56 53 43 6f 6e 73 74 61 6e 74 73 2e 45 5f 4e 4f  VSConstants.E_NO
9f50: 54 49 4d 50 4c 3b 0a 20 20 20 20 7d 0a 0a 20 20  TIMPL;.    }..  
9f60: 20 20 69 6e 74 20 49 56 73 48 69 65 72 61 72 63    int IVsHierarc
9f70: 68 79 2e 50 61 72 73 65 43 61 6e 6f 6e 69 63 61  hy.ParseCanonica
9f80: 6c 4e 61 6d 65 28 73 74 72 69 6e 67 20 70 73 7a  lName(string psz
9f90: 4e 61 6d 65 2c 20 6f 75 74 20 75 69 6e 74 20 70  Name, out uint p
9fa0: 69 74 65 6d 69 64 29 0a 20 20 20 20 7b 0a 20 20  itemid).    {.  
9fb0: 20 20 20 20 70 69 74 65 6d 69 64 20 3d 20 30 3b      pitemid = 0;
9fc0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 56 53  .      return VS
9fd0: 43 6f 6e 73 74 61 6e 74 73 2e 45 5f 4e 4f 54 49  Constants.E_NOTI
9fe0: 4d 50 4c 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  MPL;.    }..    
9ff0: 69 6e 74 20 49 56 73 48 69 65 72 61 72 63 68 79  int IVsHierarchy
a000: 2e 51 75 65 72 79 43 6c 6f 73 65 28 6f 75 74 20  .QueryClose(out 
a010: 69 6e 74 20 70 66 43 61 6e 43 6c 6f 73 65 29 0a  int pfCanClose).
a020: 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75      {.      retu
a030: 72 6e 20 28 28 49 56 73 55 49 48 69 65 72 61 72  rn ((IVsUIHierar
a040: 63 68 79 29 74 68 69 73 29 2e 51 75 65 72 79 43  chy)this).QueryC
a050: 6c 6f 73 65 28 6f 75 74 20 70 66 43 61 6e 43 6c  lose(out pfCanCl
a060: 6f 73 65 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  ose);.    }..   
a070: 20 69 6e 74 20 49 56 73 48 69 65 72 61 72 63 68   int IVsHierarch
a080: 79 2e 53 65 74 47 75 69 64 50 72 6f 70 65 72 74  y.SetGuidPropert
a090: 79 28 75 69 6e 74 20 69 74 65 6d 69 64 2c 20 69  y(uint itemid, i
a0a0: 6e 74 20 70 72 6f 70 69 64 2c 20 72 65 66 20 47  nt propid, ref G
a0b0: 75 69 64 20 72 67 75 69 64 29 0a 20 20 20 20 7b  uid rguid).    {
a0c0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 28  .      return ((
a0d0: 49 56 73 55 49 48 69 65 72 61 72 63 68 79 29 74  IVsUIHierarchy)t
a0e0: 68 69 73 29 2e 53 65 74 47 75 69 64 50 72 6f 70  his).SetGuidProp
a0f0: 65 72 74 79 28 69 74 65 6d 69 64 2c 20 70 72 6f  erty(itemid, pro
a100: 70 69 64 2c 20 72 65 66 20 72 67 75 69 64 29 3b  pid, ref rguid);
a110: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20  .    }..    int 
a120: 49 56 73 48 69 65 72 61 72 63 68 79 2e 53 65 74  IVsHierarchy.Set
a130: 50 72 6f 70 65 72 74 79 28 75 69 6e 74 20 69 74  Property(uint it
a140: 65 6d 69 64 2c 20 69 6e 74 20 70 72 6f 70 69 64  emid, int propid
a150: 2c 20 6f 62 6a 65 63 74 20 76 61 72 29 0a 20 20  , object var).  
a160: 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e    {.      return
a170: 20 28 28 49 56 73 55 49 48 69 65 72 61 72 63 68   ((IVsUIHierarch
a180: 79 29 74 68 69 73 29 2e 53 65 74 50 72 6f 70 65  y)this).SetPrope
a190: 72 74 79 28 69 74 65 6d 69 64 2c 20 70 72 6f 70  rty(itemid, prop
a1a0: 69 64 2c 20 76 61 72 29 3b 0a 20 20 20 20 7d 0a  id, var);.    }.
a1b0: 0a 20 20 20 20 69 6e 74 20 49 56 73 48 69 65 72  .    int IVsHier
a1c0: 61 72 63 68 79 2e 53 65 74 53 69 74 65 28 4d 69  archy.SetSite(Mi
a1d0: 63 72 6f 73 6f 66 74 2e 56 69 73 75 61 6c 53 74  crosoft.VisualSt
a1e0: 75 64 69 6f 2e 4f 4c 45 2e 49 6e 74 65 72 6f 70  udio.OLE.Interop
a1f0: 2e 49 53 65 72 76 69 63 65 50 72 6f 76 69 64 65  .IServiceProvide
a200: 72 20 70 73 70 29 0a 20 20 20 20 7b 0a 20 20 20  r psp).    {.   
a210: 20 20 20 72 65 74 75 72 6e 20 28 28 49 56 73 55     return ((IVsU
a220: 49 48 69 65 72 61 72 63 68 79 29 74 68 69 73 29  IHierarchy)this)
a230: 2e 53 65 74 53 69 74 65 28 70 73 70 29 3b 0a 20  .SetSite(psp);. 
a240: 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20 49 56     }..    int IV
a250: 73 48 69 65 72 61 72 63 68 79 2e 55 6e 61 64 76  sHierarchy.Unadv
a260: 69 73 65 48 69 65 72 61 72 63 68 79 45 76 65 6e  iseHierarchyEven
a270: 74 73 28 75 69 6e 74 20 64 77 43 6f 6f 6b 69 65  ts(uint dwCookie
a280: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65  ).    {.      re
a290: 74 75 72 6e 20 28 28 49 56 73 55 49 48 69 65 72  turn ((IVsUIHier
a2a0: 61 72 63 68 79 29 74 68 69 73 29 2e 55 6e 61 64  archy)this).Unad
a2b0: 76 69 73 65 48 69 65 72 61 72 63 68 79 45 76 65  viseHierarchyEve
a2c0: 6e 74 73 28 64 77 43 6f 6f 6b 69 65 29 3b 0a 20  nts(dwCookie);. 
a2d0: 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20 49 56     }..    int IV
a2e0: 73 48 69 65 72 61 72 63 68 79 2e 55 6e 75 73 65  sHierarchy.Unuse
a2f0: 64 30 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  d0().    {.     
a300: 20 72 65 74 75 72 6e 20 56 53 43 6f 6e 73 74 61   return VSConsta
a310: 6e 74 73 2e 45 5f 4e 4f 54 49 4d 50 4c 3b 0a 20  nts.E_NOTIMPL;. 
a320: 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20 49 56     }..    int IV
a330: 73 48 69 65 72 61 72 63 68 79 2e 55 6e 75 73 65  sHierarchy.Unuse
a340: 64 31 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  d1().    {.     
a350: 20 72 65 74 75 72 6e 20 56 53 43 6f 6e 73 74 61   return VSConsta
a360: 6e 74 73 2e 45 5f 4e 4f 54 49 4d 50 4c 3b 0a 20  nts.E_NOTIMPL;. 
a370: 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20 49 56     }..    int IV
a380: 73 48 69 65 72 61 72 63 68 79 2e 55 6e 75 73 65  sHierarchy.Unuse
a390: 64 32 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  d2().    {.     
a3a0: 20 72 65 74 75 72 6e 20 56 53 43 6f 6e 73 74 61   return VSConsta
a3b0: 6e 74 73 2e 45 5f 4e 4f 54 49 4d 50 4c 3b 0a 20  nts.E_NOTIMPL;. 
a3c0: 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20 49 56     }..    int IV
a3d0: 73 48 69 65 72 61 72 63 68 79 2e 55 6e 75 73 65  sHierarchy.Unuse
a3e0: 64 33 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  d3().    {.     
a3f0: 20 72 65 74 75 72 6e 20 56 53 43 6f 6e 73 74 61   return VSConsta
a400: 6e 74 73 2e 45 5f 4e 4f 54 49 4d 50 4c 3b 0a 20  nts.E_NOTIMPL;. 
a410: 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20 49 56     }..    int IV
a420: 73 48 69 65 72 61 72 63 68 79 2e 55 6e 75 73 65  sHierarchy.Unuse
a430: 64 34 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  d4().    {.     
a440: 20 72 65 74 75 72 6e 20 56 53 43 6f 6e 73 74 61   return VSConsta
a450: 6e 74 73 2e 45 5f 4e 4f 54 49 4d 50 4c 3b 0a 20  nts.E_NOTIMPL;. 
a460: 20 20 20 7d 0a 0a 20 20 20 20 23 65 6e 64 72 65     }..    #endre
a470: 67 69 6f 6e 0a 0a 20 20 20 20 23 72 65 67 69 6f  gion..    #regio
a480: 6e 20 49 56 73 50 65 72 73 69 73 74 48 69 65 72  n IVsPersistHier
a490: 61 72 63 68 79 49 74 65 6d 20 4d 65 6d 62 65 72  archyItem Member
a4a0: 73 0a 0a 20 20 20 20 69 6e 74 20 49 56 73 50 65  s..    int IVsPe
a4b0: 72 73 69 73 74 48 69 65 72 61 72 63 68 79 49 74  rsistHierarchyIt
a4c0: 65 6d 2e 49 73 49 74 65 6d 44 69 72 74 79 28 75  em.IsItemDirty(u
a4d0: 69 6e 74 20 69 74 65 6d 69 64 2c 20 49 6e 74 50  int itemid, IntP
a4e0: 74 72 20 70 75 6e 6b 44 6f 63 44 61 74 61 2c 20  tr punkDocData, 
a4f0: 6f 75 74 20 69 6e 74 20 70 66 44 69 72 74 79 29  out int pfDirty)
a500: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74  .    {.      ret
a510: 75 72 6e 20 28 28 49 56 73 50 65 72 73 69 73 74  urn ((IVsPersist
a520: 44 6f 63 44 61 74 61 29 5f 63 6f 6e 74 72 6f 6c  DocData)_control
a530: 29 2e 49 73 44 6f 63 44 61 74 61 44 69 72 74 79  ).IsDocDataDirty
a540: 28 6f 75 74 20 70 66 44 69 72 74 79 29 3b 0a 20  (out pfDirty);. 
a550: 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20 49 56     }..    int IV
a560: 73 50 65 72 73 69 73 74 48 69 65 72 61 72 63 68  sPersistHierarch
a570: 79 49 74 65 6d 2e 53 61 76 65 49 74 65 6d 28 56  yItem.SaveItem(V
a580: 53 53 41 56 45 46 4c 41 47 53 20 64 77 53 61 76  SSAVEFLAGS dwSav
a590: 65 2c 20 73 74 72 69 6e 67 20 70 73 7a 53 69 6c  e, string pszSil
a5a0: 65 6e 74 53 61 76 65 41 73 4e 61 6d 65 2c 20 75  entSaveAsName, u
a5b0: 69 6e 74 20 69 74 65 6d 69 64 2c 20 49 6e 74 50  int itemid, IntP
a5c0: 74 72 20 70 75 6e 6b 44 6f 63 44 61 74 61 2c 20  tr punkDocData, 
a5d0: 6f 75 74 20 69 6e 74 20 70 66 43 61 6e 63 65 6c  out int pfCancel
a5e0: 65 64 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  ed).    {.      
a5f0: 72 65 74 75 72 6e 20 28 28 49 56 73 50 65 72 73  return ((IVsPers
a600: 69 73 74 44 6f 63 44 61 74 61 29 5f 63 6f 6e 74  istDocData)_cont
a610: 72 6f 6c 29 2e 53 61 76 65 44 6f 63 44 61 74 61  rol).SaveDocData
a620: 28 64 77 53 61 76 65 2c 20 6f 75 74 20 70 73 7a  (dwSave, out psz
a630: 53 69 6c 65 6e 74 53 61 76 65 41 73 4e 61 6d 65  SilentSaveAsName
a640: 2c 20 6f 75 74 20 70 66 43 61 6e 63 65 6c 65 64  , out pfCanceled
a650: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 65  );.    }..    #e
a660: 6e 64 72 65 67 69 6f 6e 0a 0a 20 20 20 20 23 72  ndregion..    #r
a670: 65 67 69 6f 6e 20 49 56 73 50 65 72 73 69 73 74  egion IVsPersist
a680: 48 69 65 72 61 72 63 68 79 49 74 65 6d 32 20 4d  HierarchyItem2 M
a690: 65 6d 62 65 72 73 0a 0a 20 20 20 20 69 6e 74 20  embers..    int 
a6a0: 49 56 73 50 65 72 73 69 73 74 48 69 65 72 61 72  IVsPersistHierar
a6b0: 63 68 79 49 74 65 6d 32 2e 49 67 6e 6f 72 65 49  chyItem2.IgnoreI
a6c0: 74 65 6d 46 69 6c 65 43 68 61 6e 67 65 73 28 75  temFileChanges(u
a6d0: 69 6e 74 20 69 74 65 6d 69 64 2c 20 69 6e 74 20  int itemid, int 
a6e0: 66 49 67 6e 6f 72 65 29 0a 20 20 20 20 7b 0a 20  fIgnore).    {. 
a6f0: 20 20 20 20 20 72 65 74 75 72 6e 20 56 53 43 6f       return VSCo
a700: 6e 73 74 61 6e 74 73 2e 45 5f 4e 4f 54 49 4d 50  nstants.E_NOTIMP
a710: 4c 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e  L;.    }..    in
a720: 74 20 49 56 73 50 65 72 73 69 73 74 48 69 65 72  t IVsPersistHier
a730: 61 72 63 68 79 49 74 65 6d 32 2e 49 73 49 74 65  archyItem2.IsIte
a740: 6d 44 69 72 74 79 28 75 69 6e 74 20 69 74 65 6d  mDirty(uint item
a750: 69 64 2c 20 49 6e 74 50 74 72 20 70 75 6e 6b 44  id, IntPtr punkD
a760: 6f 63 44 61 74 61 2c 20 6f 75 74 20 69 6e 74 20  ocData, out int 
a770: 70 66 44 69 72 74 79 29 0a 20 20 20 20 7b 0a 20  pfDirty).    {. 
a780: 20 20 20 20 20 72 65 74 75 72 6e 20 28 28 49 56       return ((IV
a790: 73 50 65 72 73 69 73 74 44 6f 63 44 61 74 61 29  sPersistDocData)
a7a0: 5f 63 6f 6e 74 72 6f 6c 29 2e 49 73 44 6f 63 44  _control).IsDocD
a7b0: 61 74 61 44 69 72 74 79 28 6f 75 74 20 70 66 44  ataDirty(out pfD
a7c0: 69 72 74 79 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  irty);.    }..  
a7d0: 20 20 69 6e 74 20 49 56 73 50 65 72 73 69 73 74    int IVsPersist
a7e0: 48 69 65 72 61 72 63 68 79 49 74 65 6d 32 2e 49  HierarchyItem2.I
a7f0: 73 49 74 65 6d 52 65 6c 6f 61 64 61 62 6c 65 28  sItemReloadable(
a800: 75 69 6e 74 20 69 74 65 6d 69 64 2c 20 6f 75 74  uint itemid, out
a810: 20 69 6e 74 20 70 66 52 65 6c 6f 61 64 61 62 6c   int pfReloadabl
a820: 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72  e).    {.      r
a830: 65 74 75 72 6e 20 28 28 49 56 73 50 65 72 73 69  eturn ((IVsPersi
a840: 73 74 44 6f 63 44 61 74 61 29 5f 63 6f 6e 74 72  stDocData)_contr
a850: 6f 6c 29 2e 49 73 44 6f 63 44 61 74 61 52 65 6c  ol).IsDocDataRel
a860: 6f 61 64 61 62 6c 65 28 6f 75 74 20 70 66 52 65  oadable(out pfRe
a870: 6c 6f 61 64 61 62 6c 65 29 3b 0a 20 20 20 20 7d  loadable);.    }
a880: 0a 0a 20 20 20 20 69 6e 74 20 49 56 73 50 65 72  ..    int IVsPer
a890: 73 69 73 74 48 69 65 72 61 72 63 68 79 49 74 65  sistHierarchyIte
a8a0: 6d 32 2e 52 65 6c 6f 61 64 49 74 65 6d 28 75 69  m2.ReloadItem(ui
a8b0: 6e 74 20 69 74 65 6d 69 64 2c 20 75 69 6e 74 20  nt itemid, uint 
a8c0: 64 77 52 65 73 65 72 76 65 64 29 0a 20 20 20 20  dwReserved).    
a8d0: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 28  {.      return (
a8e0: 28 49 56 73 50 65 72 73 69 73 74 44 6f 63 44 61  (IVsPersistDocDa
a8f0: 74 61 29 5f 63 6f 6e 74 72 6f 6c 29 2e 52 65 6c  ta)_control).Rel
a900: 6f 61 64 44 6f 63 44 61 74 61 28 64 77 52 65 73  oadDocData(dwRes
a910: 65 72 76 65 64 29 3b 0a 20 20 20 20 7d 0a 0a 20  erved);.    }.. 
a920: 20 20 20 69 6e 74 20 49 56 73 50 65 72 73 69 73     int IVsPersis
a930: 74 48 69 65 72 61 72 63 68 79 49 74 65 6d 32 2e  tHierarchyItem2.
a940: 53 61 76 65 49 74 65 6d 28 56 53 53 41 56 45 46  SaveItem(VSSAVEF
a950: 4c 41 47 53 20 64 77 53 61 76 65 2c 20 73 74 72  LAGS dwSave, str
a960: 69 6e 67 20 70 73 7a 53 69 6c 65 6e 74 53 61 76  ing pszSilentSav
a970: 65 41 73 4e 61 6d 65 2c 20 75 69 6e 74 20 69 74  eAsName, uint it
a980: 65 6d 69 64 2c 20 49 6e 74 50 74 72 20 70 75 6e  emid, IntPtr pun
a990: 6b 44 6f 63 44 61 74 61 2c 20 6f 75 74 20 69 6e  kDocData, out in
a9a0: 74 20 70 66 43 61 6e 63 65 6c 65 64 29 0a 20 20  t pfCanceled).  
a9b0: 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e    {.      return
a9c0: 20 28 28 49 56 73 50 65 72 73 69 73 74 44 6f 63   ((IVsPersistDoc
a9d0: 44 61 74 61 29 5f 63 6f 6e 74 72 6f 6c 29 2e 53  Data)_control).S
a9e0: 61 76 65 44 6f 63 44 61 74 61 28 64 77 53 61 76  aveDocData(dwSav
a9f0: 65 2c 20 6f 75 74 20 70 73 7a 53 69 6c 65 6e 74  e, out pszSilent
aa00: 53 61 76 65 41 73 4e 61 6d 65 2c 20 6f 75 74 20  SaveAsName, out 
aa10: 70 66 43 61 6e 63 65 6c 65 64 29 3b 0a 20 20 20  pfCanceled);.   
aa20: 20 7d 0a 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
aa30: 6f 6e 0a 20 20 7d 0a 7d                          on.  }.}