System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact a05598d039d75975b712fabb28b3fbc541219923:


0000: 6e 61 6d 65 73 70 61 63 65 20 53 51 4c 69 74 65  namespace SQLite
0010: 2e 44 65 73 69 67 6e 65 72 2e 45 64 69 74 6f 72  .Designer.Editor
0020: 73 0a 7b 0a 20 20 75 73 69 6e 67 20 53 79 73 74  s.{.  using Syst
0030: 65 6d 3b 0a 20 20 75 73 69 6e 67 20 53 79 73 74  em;.  using Syst
0040: 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f 6e 73 2e 47  em.Collections.G
0050: 65 6e 65 72 69 63 3b 0a 20 20 75 73 69 6e 67 20  eneric;.  using 
0060: 53 79 73 74 65 6d 2e 43 6f 6d 70 6f 6e 65 6e 74  System.Component
0070: 4d 6f 64 65 6c 3b 0a 20 20 75 73 69 6e 67 20 53  Model;.  using S
0080: 79 73 74 65 6d 2e 44 61 74 61 3b 0a 20 20 75 73  ystem.Data;.  us
0090: 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ing System.Data.
00a0: 43 6f 6d 6d 6f 6e 3b 0a 20 20 75 73 69 6e 67 20  Common;.  using 
00b0: 53 79 73 74 65 6d 2e 44 72 61 77 69 6e 67 3b 0a  System.Drawing;.
00c0: 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 54    using System.T
00d0: 65 78 74 3b 0a 20 20 75 73 69 6e 67 20 53 79 73  ext;.  using Sys
00e0: 74 65 6d 2e 57 69 6e 64 6f 77 73 2e 46 6f 72 6d  tem.Windows.Form
00f0: 73 3b 0a 20 20 75 73 69 6e 67 20 4d 69 63 72 6f  s;.  using Micro
0100: 73 6f 66 74 2e 56 69 73 75 61 6c 53 74 75 64 69  soft.VisualStudi
0110: 6f 2e 53 68 65 6c 6c 2e 49 6e 74 65 72 6f 70 3b  o.Shell.Interop;
0120: 0a 20 20 75 73 69 6e 67 20 4d 69 63 72 6f 73 6f  .  using Microso
0130: 66 74 2e 56 69 73 75 61 6c 53 74 75 64 69 6f 2e  ft.VisualStudio.
0140: 4f 4c 45 2e 49 6e 74 65 72 6f 70 3b 0a 20 20 75  OLE.Interop;.  u
0150: 73 69 6e 67 20 4d 69 63 72 6f 73 6f 66 74 2e 56  sing Microsoft.V
0160: 69 73 75 61 6c 53 74 75 64 69 6f 3b 0a 20 20 75  isualStudio;.  u
0170: 73 69 6e 67 20 4d 69 63 72 6f 73 6f 66 74 2e 56  sing Microsoft.V
0180: 69 73 75 61 6c 53 74 75 64 69 6f 2e 44 61 74 61  isualStudio.Data
0190: 3b 0a 20 20 75 73 69 6e 67 20 53 51 4c 69 74 65  ;.  using SQLite
01a0: 2e 44 65 73 69 67 6e 65 72 2e 44 65 73 69 67 6e  .Designer.Design
01b0: 3b 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d  ;.  using System
01c0: 2e 43 6f 6d 70 6f 6e 65 6e 74 4d 6f 64 65 6c 2e  .ComponentModel.
01d0: 44 65 73 69 67 6e 3b 0a 0a 20 20 70 75 62 6c 69  Design;..  publi
01e0: 63 20 70 61 72 74 69 61 6c 20 63 6c 61 73 73 20  c partial class 
01f0: 54 61 62 6c 65 44 65 73 69 67 6e 65 72 44 6f 63  TableDesignerDoc
0200: 20 3a 20 44 65 73 69 67 6e 65 72 44 6f 63 42 61   : DesignerDocBa
0210: 73 65 2c 0a 20 20 20 20 49 56 73 50 65 72 73 69  se,.    IVsPersi
0220: 73 74 44 6f 63 44 61 74 61 2c 0a 20 20 20 20 49  stDocData,.    I
0230: 56 73 57 69 6e 64 6f 77 50 61 6e 65 2c 0a 20 20  VsWindowPane,.  
0240: 20 20 49 4f 6c 65 43 6f 6d 6d 61 6e 64 54 61 72    IOleCommandTar
0250: 67 65 74 2c 0a 20 20 20 20 49 53 65 6c 65 63 74  get,.    ISelect
0260: 69 6f 6e 43 6f 6e 74 61 69 6e 65 72 2c 0a 20 20  ionContainer,.  
0270: 20 20 49 56 73 57 69 6e 64 6f 77 50 61 6e 65 43    IVsWindowPaneC
0280: 6f 6d 6d 69 74 2c 0a 20 20 20 20 49 56 73 57 69  ommit,.    IVsWi
0290: 6e 64 6f 77 46 72 61 6d 65 4e 6f 74 69 66 79 0a  ndowFrameNotify.
02a0: 20 20 7b 0a 20 20 20 20 70 72 69 76 61 74 65 20    {.    private 
02b0: 73 74 61 74 69 63 20 44 69 63 74 69 6f 6e 61 72  static Dictionar
02c0: 79 3c 69 6e 74 2c 20 73 74 72 69 6e 67 3e 20 5f  y<int, string> _
02d0: 65 64 69 74 69 6e 67 54 61 62 6c 65 73 20 3d 20  editingTables = 
02e0: 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 69  new Dictionary<i
02f0: 6e 74 2c 20 73 74 72 69 6e 67 3e 28 29 3b 0a 20  nt, string>();. 
0300: 20 20 20 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c     .    internal
0310: 20 44 61 74 61 43 6f 6e 6e 65 63 74 69 6f 6e 20   DataConnection 
0320: 5f 63 6f 6e 6e 65 63 74 69 6f 6e 3b 0a 20 20 20  _connection;.   
0330: 20 69 6e 74 65 72 6e 61 6c 20 4d 69 63 72 6f 73   internal Micros
0340: 6f 66 74 2e 56 69 73 75 61 6c 53 74 75 64 69 6f  oft.VisualStudio
0350: 2e 44 61 74 61 2e 53 65 72 76 69 63 65 50 72 6f  .Data.ServicePro
0360: 76 69 64 65 72 20 5f 73 65 72 76 69 63 65 50 72  vider _servicePr
0370: 6f 76 69 64 65 72 3b 0a 20 20 20 20 69 6e 74 65  ovider;.    inte
0380: 72 6e 61 6c 20 54 61 62 6c 65 20 5f 74 61 62 6c  rnal Table _tabl
0390: 65 3b 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  e;.    internal 
03a0: 62 6f 6f 6c 20 5f 64 69 72 74 79 3b 0a 20 20 20  bool _dirty;.   
03b0: 20 69 6e 74 65 72 6e 61 6c 20 62 6f 6f 6c 20 5f   internal bool _
03c0: 69 6e 69 74 20 3d 20 66 61 6c 73 65 3b 0a 0a 20  init = false;.. 
03d0: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
03e0: 5f 77 61 72 6e 65 64 20 3d 20 66 61 6c 73 65 3b  _warned = false;
03f0: 0a 0a 20 20 20 20 70 75 62 6c 69 63 20 54 61 62  ..    public Tab
0400: 6c 65 44 65 73 69 67 6e 65 72 44 6f 63 28 44 61  leDesignerDoc(Da
0410: 74 61 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6e 6e  taConnection cnn
0420: 2c 20 73 74 72 69 6e 67 20 74 61 62 6c 65 4e 61  , string tableNa
0430: 6d 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  me).    {.      
0440: 5f 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 63 6e  _connection = cn
0450: 6e 3b 0a 20 20 20 20 20 20 5f 69 6e 69 74 20 3d  n;.      _init =
0460: 20 74 72 75 65 3b 0a 0a 20 20 20 20 20 20 49 6e   true;..      In
0470: 69 74 69 61 6c 69 7a 65 43 6f 6d 70 6f 6e 65 6e  itializeComponen
0480: 74 28 29 3b 0a 0a 20 20 20 20 20 20 53 74 72 69  t();..      Stri
0490: 6e 67 42 75 69 6c 64 65 72 20 74 61 62 6c 65 73  ngBuilder tables
04a0: 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69   = new StringBui
04b0: 6c 64 65 72 28 29 3b 0a 0a 20 20 20 20 20 20 75  lder();..      u
04c0: 73 69 6e 67 20 28 44 61 74 61 52 65 61 64 65 72  sing (DataReader
04d0: 20 72 65 61 64 65 72 20 3d 20 63 6e 6e 2e 43 6f   reader = cnn.Co
04e0: 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 28 22 53  mmand.Execute("S
04f0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c  ELECT * FROM sql
0500: 69 74 65 5f 6d 61 73 74 65 72 22 2c 20 31 2c 20  ite_master", 1, 
0510: 6e 75 6c 6c 2c 20 33 30 29 29 0a 20 20 20 20 20  null, 30)).     
0520: 20 7b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65   {.        while
0530: 20 28 72 65 61 64 65 72 2e 52 65 61 64 28 29 29   (reader.Read())
0540: 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20  .        {.     
0550: 20 20 20 20 20 74 61 62 6c 65 73 2e 41 70 70 65       tables.Appe
0560: 6e 64 28 72 65 61 64 65 72 2e 47 65 74 49 74 65  nd(reader.GetIte
0570: 6d 28 32 29 2e 54 6f 53 74 72 69 6e 67 28 29 29  m(2).ToString())
0580: 3b 0a 20 20 20 20 20 20 20 20 20 20 74 61 62 6c  ;.          tabl
0590: 65 73 2e 41 70 70 65 6e 64 28 22 2c 22 29 3b 0a  es.Append(",");.
05a0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
05b0: 7d 0a 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d  }..      int n =
05c0: 20 31 3b 0a 0a 20 20 20 20 20 20 69 66 20 28 53   1;..      if (S
05d0: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
05e0: 70 74 79 28 74 61 62 6c 65 4e 61 6d 65 29 29 0a  pty(tableName)).
05f0: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
0600: 73 74 72 69 6e 67 20 61 6c 6c 74 61 62 6c 65 73  string alltables
0610: 20 3d 20 74 61 62 6c 65 73 2e 54 6f 53 74 72 69   = tables.ToStri
0620: 6e 67 28 29 3b 0a 0a 20 20 20 20 20 20 20 20 64  ng();..        d
0630: 6f 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20  o.        {.    
0640: 20 20 20 20 20 20 74 61 62 6c 65 4e 61 6d 65 20        tableName 
0650: 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
0660: 22 54 61 62 6c 65 7b 30 7d 22 2c 20 6e 29 3b 0a  "Table{0}", n);.
0670: 20 20 20 20 20 20 20 20 20 20 6e 2b 2b 3b 0a 20            n++;. 
0680: 20 20 20 20 20 20 20 7d 20 77 68 69 6c 65 20 28         } while (
0690: 61 6c 6c 74 61 62 6c 65 73 2e 49 6e 64 65 78 4f  alltables.IndexO
06a0: 66 28 74 61 62 6c 65 4e 61 6d 65 20 2b 20 22 2c  f(tableName + ",
06b0: 22 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69  ", StringCompari
06c0: 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72  son.OrdinalIgnor
06d0: 65 43 61 73 65 29 20 3e 20 2d 31 20 7c 7c 20 5f  eCase) > -1 || _
06e0: 65 64 69 74 69 6e 67 54 61 62 6c 65 73 2e 43 6f  editingTables.Co
06f0: 6e 74 61 69 6e 73 56 61 6c 75 65 28 74 61 62 6c  ntainsValue(tabl
0700: 65 4e 61 6d 65 29 29 3b 0a 0a 20 20 20 20 20 20  eName));..      
0710: 20 20 5f 65 64 69 74 69 6e 67 54 61 62 6c 65 73    _editingTables
0720: 2e 41 64 64 28 47 65 74 48 61 73 68 43 6f 64 65  .Add(GetHashCode
0730: 28 29 2c 20 74 61 62 6c 65 4e 61 6d 65 29 3b 0a  (), tableName);.
0740: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 5f 74        }.      _t
0750: 61 62 6c 65 20 3d 20 6e 65 77 20 54 61 62 6c 65  able = new Table
0760: 28 74 61 62 6c 65 4e 61 6d 65 2c 20 5f 63 6f 6e  (tableName, _con
0770: 6e 65 63 74 69 6f 6e 2e 43 6f 6e 6e 65 63 74 69  nection.Connecti
0780: 6f 6e 53 75 70 70 6f 72 74 2e 50 72 6f 76 69 64  onSupport.Provid
0790: 65 72 4f 62 6a 65 63 74 20 61 73 20 44 62 43 6f  erObject as DbCo
07a0: 6e 6e 65 63 74 69 6f 6e 2c 20 74 68 69 73 29 3b  nnection, this);
07b0: 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 28 43  .      foreach(C
07c0: 6f 6c 75 6d 6e 20 63 20 69 6e 20 5f 74 61 62 6c  olumn c in _tabl
07d0: 65 2e 43 6f 6c 75 6d 6e 73 29 0a 20 20 20 20 20  e.Columns).     
07e0: 20 7b 0a 20 20 20 20 20 20 20 20 6e 20 3d 20 5f   {.        n = _
07f0: 64 61 74 61 47 72 69 64 2e 52 6f 77 73 2e 41 64  dataGrid.Rows.Ad
0800: 64 28 29 3b 0a 20 20 20 20 20 20 20 20 5f 64 61  d();.        _da
0810: 74 61 47 72 69 64 2e 52 6f 77 73 5b 6e 5d 2e 54  taGrid.Rows[n].T
0820: 61 67 20 3d 20 63 3b 0a 20 20 20 20 20 20 20 20  ag = c;.        
0830: 63 2e 50 61 72 65 6e 74 20 3d 20 5f 64 61 74 61  c.Parent = _data
0840: 47 72 69 64 2e 52 6f 77 73 5b 6e 5d 3b 0a 20 20  Grid.Rows[n];.  
0850: 20 20 20 20 7d 0a 20 20 20 20 20 20 5f 69 6e 69      }.      _ini
0860: 74 20 3d 20 66 61 6c 73 65 3b 0a 0a 20 20 20 20  t = false;..    
0870: 20 20 69 66 20 28 5f 64 61 74 61 47 72 69 64 2e    if (_dataGrid.
0880: 52 6f 77 73 2e 43 6f 75 6e 74 20 3e 20 30 29 0a  Rows.Count > 0).
0890: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
08a0: 5f 64 61 74 61 47 72 69 64 2e 45 6e 64 45 64 69  _dataGrid.EndEdi
08b0: 74 28 29 3b 0a 20 20 20 20 20 20 20 20 5f 73 71  t();.        _sq
08c0: 6c 54 65 78 74 2e 54 65 78 74 20 3d 20 5f 74 61  lText.Text = _ta
08d0: 62 6c 65 2e 4f 72 69 67 69 6e 61 6c 53 71 6c 3b  ble.OriginalSql;
08e0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a  .      }.    }..
08f0: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
0900: 69 64 65 20 73 74 72 69 6e 67 20 43 61 6e 6f 6e  ide string Canon
0910: 69 63 61 6c 4e 61 6d 65 0a 20 20 20 20 7b 0a 20  icalName.    {. 
0920: 20 20 20 20 20 67 65 74 0a 20 20 20 20 20 20 7b       get.      {
0930: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
0940: 5f 74 61 62 6c 65 2e 4e 61 6d 65 3b 0a 20 20 20  _table.Name;.   
0950: 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20     }.    }..    
0960: 76 6f 69 64 20 53 65 74 50 72 6f 70 65 72 74 79  void SetProperty
0970: 57 69 6e 64 6f 77 28 29 0a 20 20 20 20 7b 0a 20  Window().    {. 
0980: 20 20 20 20 20 49 56 73 54 72 61 63 6b 53 65 6c       IVsTrackSel
0990: 65 63 74 69 6f 6e 45 78 20 74 72 61 63 6b 20 3d  ectionEx track =
09a0: 20 5f 73 65 72 76 69 63 65 50 72 6f 76 69 64 65   _serviceProvide
09b0: 72 2e 47 65 74 53 65 72 76 69 63 65 28 74 79 70  r.GetService(typ
09c0: 65 6f 66 28 53 56 73 54 72 61 63 6b 53 65 6c 65  eof(SVsTrackSele
09d0: 63 74 69 6f 6e 45 78 29 29 20 61 73 20 49 56 73  ctionEx)) as IVs
09e0: 54 72 61 63 6b 53 65 6c 65 63 74 69 6f 6e 45 78  TrackSelectionEx
09f0: 3b 0a 20 20 20 20 20 20 69 66 20 28 74 72 61 63  ;.      if (trac
0a00: 6b 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20  k != null).     
0a10: 20 7b 0a 20 20 20 20 20 20 20 20 74 72 61 63 6b   {.        track
0a20: 2e 4f 6e 53 65 6c 65 63 74 43 68 61 6e 67 65 28  .OnSelectChange(
0a30: 74 68 69 73 29 3b 0a 20 20 20 20 20 20 7d 0a 20  this);.      }. 
0a40: 20 20 20 7d 0a 0a 20 20 20 20 70 75 62 6c 69 63     }..    public
0a50: 20 73 74 72 69 6e 67 20 43 61 70 74 69 6f 6e 0a   string Caption.
0a60: 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74 0a      {.      get.
0a70: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
0a80: 73 74 72 69 6e 67 20 63 61 74 61 6c 6f 67 20 3d  string catalog =
0a90: 20 22 6d 61 69 6e 22 3b 0a 20 20 20 20 20 20 20   "main";.       
0aa0: 20 69 66 20 28 5f 74 61 62 6c 65 20 21 3d 20 6e   if (_table != n
0ab0: 75 6c 6c 29 20 63 61 74 61 6c 6f 67 20 3d 20 5f  ull) catalog = _
0ac0: 74 61 62 6c 65 2e 43 61 74 61 6c 6f 67 3b 0a 0a  table.Catalog;..
0ad0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
0ae0: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30  tring.Format("{0
0af0: 7d 2e 7b 31 7d 20 54 61 62 6c 65 20 28 53 51 4c  }.{1} Table (SQL
0b00: 69 74 65 20 5b 7b 32 7d 5d 29 22 2c 20 63 61 74  ite [{2}])", cat
0b10: 61 6c 6f 67 2c 20 62 61 73 65 2e 4e 61 6d 65 2c  alog, base.Name,
0b20: 20 28 28 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 29   ((DbConnection)
0b30: 5f 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6f 6e 6e  _connection.Conn
0b40: 65 63 74 69 6f 6e 53 75 70 70 6f 72 74 2e 50 72  ectionSupport.Pr
0b50: 6f 76 69 64 65 72 4f 62 6a 65 63 74 29 2e 44 61  oviderObject).Da
0b60: 74 61 53 6f 75 72 63 65 29 3b 0a 20 20 20 20 20  taSource);.     
0b70: 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 75   }.    }..    pu
0b80: 62 6c 69 63 20 6e 65 77 20 73 74 72 69 6e 67 20  blic new string 
0b90: 4e 61 6d 65 0a 20 20 20 20 7b 0a 20 20 20 20 20  Name.    {.     
0ba0: 20 67 65 74 0a 20 20 20 20 20 20 7b 0a 20 20 20   get.      {.   
0bb0: 20 20 20 20 20 69 66 20 28 5f 74 61 62 6c 65 20       if (_table 
0bc0: 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20  != null).       
0bd0: 20 20 20 72 65 74 75 72 6e 20 5f 74 61 62 6c 65     return _table
0be0: 2e 4e 61 6d 65 3b 0a 20 20 20 20 20 20 20 20 65  .Name;.        e
0bf0: 6c 73 65 20 72 65 74 75 72 6e 20 62 61 73 65 2e  lse return base.
0c00: 4e 61 6d 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Name;.      }.  
0c10: 20 20 20 20 73 65 74 0a 20 20 20 20 20 20 7b 0a      set.      {.
0c20: 20 20 20 20 20 20 20 20 62 61 73 65 2e 4e 61 6d          base.Nam
0c30: 65 20 3d 20 76 61 6c 75 65 3b 0a 0a 20 20 20 20  e = value;..    
0c40: 20 20 20 20 69 66 20 28 5f 73 65 72 76 69 63 65      if (_service
0c50: 50 72 6f 76 69 64 65 72 20 21 3d 20 6e 75 6c 6c  Provider != null
0c60: 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20  ).        {.    
0c70: 20 20 20 20 20 20 49 56 73 57 69 6e 64 6f 77 46        IVsWindowF
0c80: 72 61 6d 65 20 66 72 61 6d 65 20 3d 20 5f 73 65  rame frame = _se
0c90: 72 76 69 63 65 50 72 6f 76 69 64 65 72 2e 47 65  rviceProvider.Ge
0ca0: 74 53 65 72 76 69 63 65 28 74 79 70 65 6f 66 28  tService(typeof(
0cb0: 49 56 73 57 69 6e 64 6f 77 46 72 61 6d 65 29 29  IVsWindowFrame))
0cc0: 20 61 73 20 49 56 73 57 69 6e 64 6f 77 46 72 61   as IVsWindowFra
0cd0: 6d 65 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  me;.          if
0ce0: 20 28 66 72 61 6d 65 20 21 3d 20 6e 75 6c 6c 29   (frame != null)
0cf0: 0a 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20  .          {.   
0d00: 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 2e 53           frame.S
0d10: 65 74 50 72 6f 70 65 72 74 79 28 28 69 6e 74 29  etProperty((int)
0d20: 5f 5f 56 53 46 50 52 4f 50 49 44 2e 56 53 46 50  __VSFPROPID.VSFP
0d30: 52 4f 50 49 44 5f 45 64 69 74 6f 72 43 61 70 74  ROPID_EditorCapt
0d40: 69 6f 6e 2c 20 43 61 70 74 69 6f 6e 29 3b 0a 20  ion, Caption);. 
0d50: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
0d60: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
0d70: 20 7d 0a 0a 20 20 20 20 70 75 62 6c 69 63 20 76   }..    public v
0d80: 6f 69 64 20 4e 6f 74 69 66 79 43 68 61 6e 67 65  oid NotifyChange
0d90: 73 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  s().    {.      
0da0: 69 66 20 28 5f 73 65 72 76 69 63 65 50 72 6f 76  if (_serviceProv
0db0: 69 64 65 72 20 3d 3d 20 6e 75 6c 6c 29 20 72 65  ider == null) re
0dc0: 74 75 72 6e 3b 0a 0a 20 20 20 20 20 20 5f 73 71  turn;..      _sq
0dd0: 6c 54 65 78 74 2e 54 65 78 74 20 3d 20 5f 74 61  lText.Text = _ta
0de0: 62 6c 65 2e 47 65 74 53 71 6c 28 29 3b 0a 0a 20  ble.GetSql();.. 
0df0: 20 20 20 20 20 2f 2f 20 47 65 74 20 61 20 72 65       // Get a re
0e00: 66 65 72 65 6e 63 65 20 74 6f 20 74 68 65 20 52  ference to the R
0e10: 75 6e 6e 69 6e 67 20 44 6f 63 75 6d 65 6e 74 20  unning Document 
0e20: 54 61 62 6c 65 0a 20 20 20 20 20 20 49 56 73 52  Table.      IVsR
0e30: 75 6e 6e 69 6e 67 44 6f 63 75 6d 65 6e 74 54 61  unningDocumentTa
0e40: 62 6c 65 20 72 75 6e 6e 69 6e 67 44 6f 63 54 61  ble runningDocTa
0e50: 62 6c 65 20 3d 20 28 49 56 73 52 75 6e 6e 69 6e  ble = (IVsRunnin
0e60: 67 44 6f 63 75 6d 65 6e 74 54 61 62 6c 65 29 5f  gDocumentTable)_
0e70: 73 65 72 76 69 63 65 50 72 6f 76 69 64 65 72 2e  serviceProvider.
0e80: 47 65 74 53 65 72 76 69 63 65 28 74 79 70 65 6f  GetService(typeo
0e90: 66 28 53 56 73 52 75 6e 6e 69 6e 67 44 6f 63 75  f(SVsRunningDocu
0ea0: 6d 65 6e 74 54 61 62 6c 65 29 29 3b 0a 0a 20 20  mentTable));..  
0eb0: 20 20 20 20 2f 2f 20 4c 6f 63 6b 20 74 68 65 20      // Lock the 
0ec0: 64 6f 63 75 6d 65 6e 74 0a 20 20 20 20 20 20 75  document.      u
0ed0: 69 6e 74 20 64 6f 63 43 6f 6f 6b 69 65 3b 0a 20  int docCookie;. 
0ee0: 20 20 20 20 20 49 56 73 48 69 65 72 61 72 63 68       IVsHierarch
0ef0: 79 20 68 69 65 72 61 72 63 68 79 3b 0a 20 20 20  y hierarchy;.   
0f00: 20 20 20 75 69 6e 74 20 69 74 65 6d 49 44 3b 0a     uint itemID;.
0f10: 20 20 20 20 20 20 49 6e 74 50 74 72 20 64 6f 63        IntPtr doc
0f20: 44 61 74 61 3b 0a 20 20 20 20 20 20 69 6e 74 20  Data;.      int 
0f30: 68 72 20 3d 20 72 75 6e 6e 69 6e 67 44 6f 63 54  hr = runningDocT
0f40: 61 62 6c 65 2e 46 69 6e 64 41 6e 64 4c 6f 63 6b  able.FindAndLock
0f50: 44 6f 63 75 6d 65 6e 74 28 0a 20 20 20 20 20 20  Document(.      
0f60: 20 20 20 20 28 75 69 6e 74 29 5f 56 53 52 44 54      (uint)_VSRDT
0f70: 46 4c 41 47 53 2e 52 44 54 5f 52 65 61 64 4c 6f  FLAGS.RDT_ReadLo
0f80: 63 6b 2c 0a 20 20 20 20 20 20 20 20 20 20 62 61  ck,.          ba
0f90: 73 65 2e 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20  se.Name,.       
0fa0: 20 20 20 6f 75 74 20 68 69 65 72 61 72 63 68 79     out hierarchy
0fb0: 2c 0a 20 20 20 20 20 20 20 20 20 20 6f 75 74 20  ,.          out 
0fc0: 69 74 65 6d 49 44 2c 0a 20 20 20 20 20 20 20 20  itemID,.        
0fd0: 20 20 6f 75 74 20 64 6f 63 44 61 74 61 2c 0a 20    out docData,. 
0fe0: 20 20 20 20 20 20 20 20 20 6f 75 74 20 64 6f 63           out doc
0ff0: 43 6f 6f 6b 69 65 0a 20 20 20 20 20 20 29 3b 0a  Cookie.      );.
1000: 20 20 20 20 20 20 45 72 72 6f 72 48 61 6e 64 6c        ErrorHandl
1010: 65 72 2e 54 68 72 6f 77 4f 6e 46 61 69 6c 75 72  er.ThrowOnFailur
1020: 65 28 68 72 29 3b 0a 0a 20 20 20 20 20 20 49 56  e(hr);..      IV
1030: 73 55 49 53 68 65 6c 6c 20 73 68 65 6c 6c 20 3d  sUIShell shell =
1040: 20 5f 73 65 72 76 69 63 65 50 72 6f 76 69 64 65   _serviceProvide
1050: 72 2e 47 65 74 53 65 72 76 69 63 65 28 74 79 70  r.GetService(typ
1060: 65 6f 66 28 49 56 73 55 49 53 68 65 6c 6c 29 29  eof(IVsUIShell))
1070: 20 61 73 20 49 56 73 55 49 53 68 65 6c 6c 3b 0a   as IVsUIShell;.
1080: 20 20 20 20 20 20 69 66 20 28 73 68 65 6c 6c 20        if (shell 
1090: 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 7b  != null).      {
10a0: 0a 20 20 20 20 20 20 20 20 73 68 65 6c 6c 2e 55  .        shell.U
10b0: 70 64 61 74 65 44 6f 63 44 61 74 61 49 73 44 69  pdateDocDataIsDi
10c0: 72 74 79 46 65 65 64 62 61 63 6b 28 64 6f 63 43  rtyFeedback(docC
10d0: 6f 6f 6b 69 65 2c 20 28 5f 64 69 72 74 79 20 3d  ookie, (_dirty =
10e0: 3d 20 74 72 75 65 29 20 3f 20 31 20 3a 20 30 29  = true) ? 1 : 0)
10f0: 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
1100: 20 2f 2f 20 55 6e 6c 6f 63 6b 20 74 68 65 20 64   // Unlock the d
1110: 6f 63 75 6d 65 6e 74 2e 0a 20 20 20 20 20 20 2f  ocument..      /
1120: 2f 20 4e 6f 74 65 20 74 68 61 74 20 77 65 20 68  / Note that we h
1130: 61 76 65 20 74 6f 20 75 6e 6c 6f 63 6b 20 74 68  ave to unlock th
1140: 65 20 64 6f 63 75 6d 65 6e 74 20 65 76 65 6e 20  e document even 
1150: 69 66 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  if the previous 
1160: 63 61 6c 6c 20 66 61 69 6c 65 64 2e 0a 20 20 20  call failed..   
1170: 20 20 20 72 75 6e 6e 69 6e 67 44 6f 63 54 61 62     runningDocTab
1180: 6c 65 2e 55 6e 6c 6f 63 6b 44 6f 63 75 6d 65 6e  le.UnlockDocumen
1190: 74 28 28 75 69 6e 74 29 5f 56 53 52 44 54 46 4c  t((uint)_VSRDTFL
11a0: 41 47 53 2e 52 44 54 5f 52 65 61 64 4c 6f 63 6b  AGS.RDT_ReadLock
11b0: 2c 20 64 6f 63 43 6f 6f 6b 69 65 29 3b 0a 0a 0a  , docCookie);...
11c0: 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 20 66        // Check f
11d0: 66 20 74 68 65 20 63 61 6c 6c 20 74 6f 20 4e 6f  f the call to No
11e0: 74 69 66 79 44 6f 63 43 68 61 6e 67 65 64 20 66  tifyDocChanged f
11f0: 61 69 6c 65 64 2e 0a 20 20 20 20 20 20 2f 2f 45  ailed..      //E
1200: 72 72 6f 72 48 61 6e 64 6c 65 72 2e 54 68 72 6f  rrorHandler.Thro
1210: 77 4f 6e 46 61 69 6c 75 72 65 28 68 72 29 3b 0a  wOnFailure(hr);.
1220: 20 20 20 20 7d 0a 0a 20 20 20 20 23 72 65 67 69      }..    #regi
1230: 6f 6e 20 49 56 73 50 65 72 73 69 73 74 44 6f 63  on IVsPersistDoc
1240: 44 61 74 61 20 4d 65 6d 62 65 72 73 0a 0a 20 20  Data Members..  
1250: 20 20 69 6e 74 20 49 56 73 50 65 72 73 69 73 74    int IVsPersist
1260: 44 6f 63 44 61 74 61 2e 43 6c 6f 73 65 28 29 0a  DocData.Close().
1270: 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75      {.      retu
1280: 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74 73 2e 53  rn VSConstants.S
1290: 5f 4f 4b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  _OK;.    }..    
12a0: 70 75 62 6c 69 63 20 69 6e 74 20 47 65 74 47 75  public int GetGu
12b0: 69 64 45 64 69 74 6f 72 54 79 70 65 28 6f 75 74  idEditorType(out
12c0: 20 47 75 69 64 20 70 43 6c 61 73 73 49 44 29 0a   Guid pClassID).
12d0: 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75      {.      retu
12e0: 72 6e 20 28 28 49 50 65 72 73 69 73 74 46 69 6c  rn ((IPersistFil
12f0: 65 46 6f 72 6d 61 74 29 74 68 69 73 29 2e 47 65  eFormat)this).Ge
1300: 74 43 6c 61 73 73 49 44 28 6f 75 74 20 70 43 6c  tClassID(out pCl
1310: 61 73 73 49 44 29 3b 0a 20 20 20 20 7d 0a 0a 20  assID);.    }.. 
1320: 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 49 73     public int Is
1330: 44 6f 63 44 61 74 61 44 69 72 74 79 28 6f 75 74  DocDataDirty(out
1340: 20 69 6e 74 20 70 66 44 69 72 74 79 29 0a 20 20   int pfDirty).  
1350: 20 20 7b 0a 20 20 20 20 20 20 70 66 44 69 72 74    {.      pfDirt
1360: 79 20 3d 20 5f 64 69 72 74 79 20 3d 3d 20 74 72  y = _dirty == tr
1370: 75 65 20 3f 20 31 20 3a 20 30 3b 0a 20 20 20 20  ue ? 1 : 0;.    
1380: 20 20 72 65 74 75 72 6e 20 56 53 43 6f 6e 73 74    return VSConst
1390: 61 6e 74 73 2e 53 5f 4f 4b 3b 0a 20 20 20 20 7d  ants.S_OK;.    }
13a0: 0a 0a 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74  ..    public int
13b0: 20 49 73 44 6f 63 44 61 74 61 52 65 6c 6f 61 64   IsDocDataReload
13c0: 61 62 6c 65 28 6f 75 74 20 69 6e 74 20 70 66 52  able(out int pfR
13d0: 65 6c 6f 61 64 61 62 6c 65 29 0a 20 20 20 20 7b  eloadable).    {
13e0: 0a 20 20 20 20 20 20 70 66 52 65 6c 6f 61 64 61  .      pfReloada
13f0: 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 72  ble = 0;.      r
1400: 65 74 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74  eturn VSConstant
1410: 73 2e 53 5f 4f 4b 3b 0a 20 20 20 20 7d 0a 0a 20  s.S_OK;.    }.. 
1420: 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 4c 6f     public int Lo
1430: 61 64 44 6f 63 44 61 74 61 28 73 74 72 69 6e 67  adDocData(string
1440: 20 70 73 7a 4d 6b 44 6f 63 75 6d 65 6e 74 29 0a   pszMkDocument).
1450: 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75      {.      retu
1460: 72 6e 20 28 28 49 50 65 72 73 69 73 74 46 69 6c  rn ((IPersistFil
1470: 65 46 6f 72 6d 61 74 29 74 68 69 73 29 2e 4c 6f  eFormat)this).Lo
1480: 61 64 28 70 73 7a 4d 6b 44 6f 63 75 6d 65 6e 74  ad(pszMkDocument
1490: 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 0a  , 0, 0);.    }..
14a0: 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 4f      public int O
14b0: 6e 52 65 67 69 73 74 65 72 44 6f 63 44 61 74 61  nRegisterDocData
14c0: 28 75 69 6e 74 20 64 6f 63 43 6f 6f 6b 69 65 2c  (uint docCookie,
14d0: 20 49 56 73 48 69 65 72 61 72 63 68 79 20 70 48   IVsHierarchy pH
14e0: 69 65 72 4e 65 77 2c 20 75 69 6e 74 20 69 74 65  ierNew, uint ite
14f0: 6d 69 64 4e 65 77 29 0a 20 20 20 20 7b 0a 20 20  midNew).    {.  
1500: 20 20 20 20 72 65 74 75 72 6e 20 56 53 43 6f 6e      return VSCon
1510: 73 74 61 6e 74 73 2e 53 5f 4f 4b 3b 0a 20 20 20  stants.S_OK;.   
1520: 20 7d 0a 0a 20 20 20 20 70 75 62 6c 69 63 20 69   }..    public i
1530: 6e 74 20 52 65 6c 6f 61 64 44 6f 63 44 61 74 61  nt ReloadDocData
1540: 28 75 69 6e 74 20 67 72 66 46 6c 61 67 73 29 0a  (uint grfFlags).
1550: 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75      {.      retu
1560: 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74 73 2e 45  rn VSConstants.E
1570: 5f 4e 4f 54 49 4d 50 4c 3b 0a 20 20 20 20 7d 0a  _NOTIMPL;.    }.
1580: 0a 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20  .    public int 
1590: 52 65 6e 61 6d 65 44 6f 63 44 61 74 61 28 75 69  RenameDocData(ui
15a0: 6e 74 20 67 72 66 41 74 74 72 69 62 73 2c 20 49  nt grfAttribs, I
15b0: 56 73 48 69 65 72 61 72 63 68 79 20 70 48 69 65  VsHierarchy pHie
15c0: 72 4e 65 77 2c 20 75 69 6e 74 20 69 74 65 6d 69  rNew, uint itemi
15d0: 64 4e 65 77 2c 20 73 74 72 69 6e 67 20 70 73 7a  dNew, string psz
15e0: 4d 6b 44 6f 63 75 6d 65 6e 74 4e 65 77 29 0a 20  MkDocumentNew). 
15f0: 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72     {.      retur
1600: 6e 20 56 53 43 6f 6e 73 74 61 6e 74 73 2e 45 5f  n VSConstants.E_
1610: 4e 4f 54 49 4d 50 4c 3b 0a 20 20 20 20 7d 0a 0a  NOTIMPL;.    }..
1620: 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 53      public int S
1630: 61 76 65 44 6f 63 44 61 74 61 28 56 53 53 41 56  aveDocData(VSSAV
1640: 45 46 4c 41 47 53 20 64 77 53 61 76 65 2c 20 6f  EFLAGS dwSave, o
1650: 75 74 20 73 74 72 69 6e 67 20 70 62 73 74 72 4d  ut string pbstrM
1660: 6b 44 6f 63 75 6d 65 6e 74 4e 65 77 2c 20 6f 75  kDocumentNew, ou
1670: 74 20 69 6e 74 20 70 66 53 61 76 65 43 61 6e 63  t int pfSaveCanc
1680: 65 6c 65 64 29 0a 20 20 20 20 7b 0a 20 20 20 20  eled).    {.    
1690: 20 20 70 62 73 74 72 4d 6b 44 6f 63 75 6d 65 6e    pbstrMkDocumen
16a0: 74 4e 65 77 20 3d 20 5f 74 61 62 6c 65 2e 4e 61  tNew = _table.Na
16b0: 6d 65 3b 0a 20 20 20 20 20 20 70 66 53 61 76 65  me;.      pfSave
16c0: 43 61 6e 63 65 6c 65 64 20 3d 20 30 3b 0a 0a 20  Canceled = 0;.. 
16d0: 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
16e0: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 5f 74  IsNullOrEmpty(_t
16f0: 61 62 6c 65 2e 4f 72 69 67 69 6e 61 6c 53 71 6c  able.OriginalSql
1700: 29 20 3d 3d 20 74 72 75 65 29 0a 20 20 20 20 20  ) == true).     
1710: 20 7b 0a 20 20 20 20 20 20 20 20 75 73 69 6e 67   {.        using
1720: 20 28 54 61 62 6c 65 4e 61 6d 65 44 69 61 6c 6f   (TableNameDialo
1730: 67 20 64 6c 67 20 3d 20 6e 65 77 20 54 61 62 6c  g dlg = new Tabl
1740: 65 4e 61 6d 65 44 69 61 6c 6f 67 28 22 54 61 62  eNameDialog("Tab
1750: 6c 65 22 2c 20 5f 74 61 62 6c 65 2e 4e 61 6d 65  le", _table.Name
1760: 29 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20  )).        {.   
1770: 20 20 20 20 20 20 20 69 66 20 28 64 6c 67 2e 53         if (dlg.S
1780: 68 6f 77 44 69 61 6c 6f 67 28 74 68 69 73 29 20  howDialog(this) 
1790: 3d 3d 20 44 69 61 6c 6f 67 52 65 73 75 6c 74 2e  == DialogResult.
17a0: 43 61 6e 63 65 6c 29 0a 20 20 20 20 20 20 20 20  Cancel).        
17b0: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
17c0: 70 66 53 61 76 65 43 61 6e 63 65 6c 65 64 20 3d  pfSaveCanceled =
17d0: 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20   1;.            
17e0: 72 65 74 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e  return VSConstan
17f0: 74 73 2e 53 5f 4f 4b 3b 0a 20 20 20 20 20 20 20  ts.S_OK;.       
1800: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 5f     }.          _
1810: 74 61 62 6c 65 2e 4e 61 6d 65 20 3d 20 64 6c 67  table.Name = dlg
1820: 2e 54 61 62 6c 65 4e 61 6d 65 3b 0a 20 20 20 20  .TableName;.    
1830: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 20      }.      }.. 
1840: 20 20 20 20 20 5f 69 6e 69 74 20 3d 20 74 72 75       _init = tru
1850: 65 3b 0a 20 20 20 20 20 20 66 6f 72 20 28 69 6e  e;.      for (in
1860: 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 5f 74 61  t n = 0; n < _ta
1870: 62 6c 65 2e 43 6f 6c 75 6d 6e 73 2e 43 6f 75 6e  ble.Columns.Coun
1880: 74 3b 20 6e 2b 2b 29 0a 20 20 20 20 20 20 7b 0a  t; n++).      {.
1890: 20 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20 63          Column c
18a0: 20 3d 20 5f 74 61 62 6c 65 2e 43 6f 6c 75 6d 6e   = _table.Column
18b0: 73 5b 6e 5d 3b 0a 20 20 20 20 20 20 20 20 69 66  s[n];.        if
18c0: 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
18d0: 72 45 6d 70 74 79 28 63 2e 43 6f 6c 75 6d 6e 4e  rEmpty(c.ColumnN
18e0: 61 6d 65 29 20 3d 3d 20 74 72 75 65 29 0a 20 20  ame) == true).  
18f0: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
1900: 20 20 5f 64 61 74 61 47 72 69 64 2e 52 6f 77 73    _dataGrid.Rows
1910: 2e 52 65 6d 6f 76 65 28 63 2e 50 61 72 65 6e 74  .Remove(c.Parent
1920: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 5f 74 61  );.          _ta
1930: 62 6c 65 2e 43 6f 6c 75 6d 6e 73 2e 52 65 6d 6f  ble.Columns.Remo
1940: 76 65 28 63 29 3b 0a 20 20 20 20 20 20 20 20 20  ve(c);.         
1950: 20 6e 2d 2d 3b 0a 20 20 20 20 20 20 20 20 20 20   n--;.          
1960: 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
1970: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20    }.      }..   
1980: 20 20 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20     for (int n = 
1990: 30 3b 20 6e 20 3c 20 5f 64 61 74 61 47 72 69 64  0; n < _dataGrid
19a0: 2e 52 6f 77 73 2e 43 6f 75 6e 74 3b 20 6e 2b 2b  .Rows.Count; n++
19b0: 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20  ).      {.      
19c0: 20 20 69 66 20 28 28 5f 64 61 74 61 47 72 69 64    if ((_dataGrid
19d0: 2e 52 6f 77 73 5b 6e 5d 2e 54 61 67 20 69 73 20  .Rows[n].Tag is 
19e0: 43 6f 6c 75 6d 6e 29 20 3d 3d 20 66 61 6c 73 65  Column) == false
19f0: 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20  ).        {.    
1a00: 20 20 20 20 20 20 74 72 79 0a 20 20 20 20 20 20        try.      
1a10: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
1a20: 20 20 5f 64 61 74 61 47 72 69 64 2e 52 6f 77 73    _dataGrid.Rows
1a30: 2e 52 65 6d 6f 76 65 41 74 28 6e 29 3b 0a 20 20  .RemoveAt(n);.  
1a40: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1a50: 20 20 20 20 63 61 74 63 68 0a 20 20 20 20 20 20      catch.      
1a60: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
1a70: 20 20 69 66 20 28 6e 20 3d 3d 20 5f 64 61 74 61    if (n == _data
1a80: 47 72 69 64 2e 52 6f 77 73 2e 43 6f 75 6e 74 20  Grid.Rows.Count 
1a90: 2d 20 31 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  - 1) break;.    
1aa0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1ab0: 20 20 6e 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d    n--;.        }
1ac0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 5f  .      }.      _
1ad0: 69 6e 69 74 20 3d 20 66 61 6c 73 65 3b 0a 0a 20  init = false;.. 
1ae0: 20 20 20 20 20 75 73 69 6e 67 20 28 44 62 54 72       using (DbTr
1af0: 61 6e 73 61 63 74 69 6f 6e 20 74 72 61 6e 73 20  ansaction trans 
1b00: 3d 20 5f 74 61 62 6c 65 2e 47 65 74 43 6f 6e 6e  = _table.GetConn
1b10: 65 63 74 69 6f 6e 28 29 2e 42 65 67 69 6e 54 72  ection().BeginTr
1b20: 61 6e 73 61 63 74 69 6f 6e 28 29 29 0a 20 20 20  ansaction()).   
1b30: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 74 72 79     {.        try
1b40: 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20  .        {.     
1b50: 20 20 20 20 20 75 73 69 6e 67 20 28 44 62 43 6f       using (DbCo
1b60: 6d 6d 61 6e 64 20 63 6d 64 20 3d 20 5f 74 61 62  mmand cmd = _tab
1b70: 6c 65 2e 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e  le.GetConnection
1b80: 28 29 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64  ().CreateCommand
1b90: 28 29 29 0a 20 20 20 20 20 20 20 20 20 20 7b 0a  ()).          {.
1ba0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6d 64 2e              cmd.
1bb0: 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 5f 74  CommandText = _t
1bc0: 61 62 6c 65 2e 47 65 74 53 71 6c 28 29 3b 0a 20  able.GetSql();. 
1bd0: 20 20 20 20 20 20 20 20 20 20 20 63 6d 64 2e 45             cmd.E
1be0: 78 65 63 75 74 65 4e 6f 6e 51 75 65 72 79 28 29  xecuteNonQuery()
1bf0: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
1c00: 20 20 20 20 20 20 20 20 74 72 61 6e 73 2e 43 6f          trans.Co
1c10: 6d 6d 69 74 28 29 3b 0a 20 20 20 20 20 20 20 20  mmit();.        
1c20: 7d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20  }.        catch 
1c30: 28 45 78 63 65 70 74 69 6f 6e 29 0a 20 20 20 20  (Exception).    
1c40: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
1c50: 74 72 61 6e 73 2e 52 6f 6c 6c 62 61 63 6b 28 29  trans.Rollback()
1c60: 3b 0a 20 20 20 20 20 20 20 20 20 20 74 68 72 6f  ;.          thro
1c70: 77 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  w;.        }.   
1c80: 20 20 20 7d 0a 0a 20 20 20 20 20 20 5f 64 69 72     }..      _dir
1c90: 74 79 20 3d 20 66 61 6c 73 65 3b 0a 20 20 20 20  ty = false;.    
1ca0: 20 20 5f 74 61 62 6c 65 2e 43 6f 6d 6d 69 74 74    _table.Committ
1cb0: 65 64 28 29 3b 0a 20 20 20 20 20 20 4e 6f 74 69  ed();.      Noti
1cc0: 66 79 43 68 61 6e 67 65 73 28 29 3b 0a 20 20 20  fyChanges();.   
1cd0: 20 20 20 5f 73 71 6c 54 65 78 74 2e 54 65 78 74     _sqlText.Text
1ce0: 20 3d 20 5f 74 61 62 6c 65 2e 4f 72 69 67 69 6e   = _table.Origin
1cf0: 61 6c 53 71 6c 3b 0a 0a 20 20 20 20 20 20 72 65  alSql;..      re
1d00: 74 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74 73  turn VSConstants
1d10: 2e 53 5f 4f 4b 3b 0a 20 20 20 20 7d 0a 0a 20 20  .S_OK;.    }..  
1d20: 20 20 70 75 62 6c 69 63 20 69 6e 74 20 53 65 74    public int Set
1d30: 55 6e 74 69 74 6c 65 64 44 6f 63 50 61 74 68 28  UntitledDocPath(
1d40: 73 74 72 69 6e 67 20 70 73 7a 44 6f 63 44 61 74  string pszDocDat
1d50: 61 50 61 74 68 29 0a 20 20 20 20 7b 0a 20 20 20  aPath).    {.   
1d60: 20 20 20 72 65 74 75 72 6e 20 28 28 49 50 65 72     return ((IPer
1d70: 73 69 73 74 46 69 6c 65 46 6f 72 6d 61 74 29 74  sistFileFormat)t
1d80: 68 69 73 29 2e 49 6e 69 74 4e 65 77 28 30 29 3b  his).InitNew(0);
1d90: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 65 6e 64  .    }..    #end
1da0: 72 65 67 69 6f 6e 0a 0a 20 20 20 20 23 72 65 67  region..    #reg
1db0: 69 6f 6e 20 49 56 73 57 69 6e 64 6f 77 50 61 6e  ion IVsWindowPan
1dc0: 65 20 4d 65 6d 62 65 72 73 0a 0a 20 20 20 20 70  e Members..    p
1dd0: 75 62 6c 69 63 20 69 6e 74 20 43 6c 6f 73 65 50  ublic int CloseP
1de0: 61 6e 65 28 29 0a 20 20 20 20 7b 0a 20 20 20 20  ane().    {.    
1df0: 20 20 69 66 20 28 5f 73 65 72 76 69 63 65 50 72    if (_servicePr
1e00: 6f 76 69 64 65 72 20 21 3d 20 6e 75 6c 6c 29 0a  ovider != null).
1e10: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
1e20: 45 6e 76 44 54 45 2e 44 54 45 20 64 74 65 20 3d  EnvDTE.DTE dte =
1e30: 20 28 45 6e 76 44 54 45 2e 44 54 45 29 5f 73 65   (EnvDTE.DTE)_se
1e40: 72 76 69 63 65 50 72 6f 76 69 64 65 72 2e 47 65  rviceProvider.Ge
1e50: 74 53 65 72 76 69 63 65 28 74 79 70 65 6f 66 28  tService(typeof(
1e60: 45 6e 76 44 54 45 2e 44 54 45 29 29 3b 0a 0a 20  EnvDTE.DTE));.. 
1e70: 20 20 20 20 20 20 20 2f 2f 53 68 6f 77 20 74 6f         //Show to
1e80: 6f 6c 62 61 72 0a 20 20 20 20 20 20 20 20 69 66  olbar.        if
1e90: 20 28 64 74 65 20 21 3d 20 6e 75 6c 6c 29 0a 20   (dte != null). 
1ea0: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
1eb0: 20 20 20 4d 69 63 72 6f 73 6f 66 74 2e 56 69 73     Microsoft.Vis
1ec0: 75 61 6c 53 74 75 64 69 6f 2e 43 6f 6d 6d 61 6e  ualStudio.Comman
1ed0: 64 42 61 72 73 2e 43 6f 6d 6d 61 6e 64 42 61 72  dBars.CommandBar
1ee0: 73 20 63 6f 6d 6d 61 6e 64 42 61 72 73 20 3d 20  s commandBars = 
1ef0: 28 4d 69 63 72 6f 73 6f 66 74 2e 56 69 73 75 61  (Microsoft.Visua
1f00: 6c 53 74 75 64 69 6f 2e 43 6f 6d 6d 61 6e 64 42  lStudio.CommandB
1f10: 61 72 73 2e 43 6f 6d 6d 61 6e 64 42 61 72 73 29  ars.CommandBars)
1f20: 64 74 65 2e 43 6f 6d 6d 61 6e 64 42 61 72 73 3b  dte.CommandBars;
1f30: 0a 20 20 20 20 20 20 20 20 20 20 4d 69 63 72 6f  .          Micro
1f40: 73 6f 66 74 2e 56 69 73 75 61 6c 53 74 75 64 69  soft.VisualStudi
1f50: 6f 2e 43 6f 6d 6d 61 6e 64 42 61 72 73 2e 43 6f  o.CommandBars.Co
1f60: 6d 6d 61 6e 64 42 61 72 20 62 61 72 20 3d 20 63  mmandBar bar = c
1f70: 6f 6d 6d 61 6e 64 42 61 72 73 5b 22 54 61 62 6c  ommandBars["Tabl
1f80: 65 20 44 65 73 69 67 6e 65 72 22 5d 3b 0a 20 20  e Designer"];.  
1f90: 20 20 20 20 20 20 20 20 62 61 72 2e 56 69 73 69          bar.Visi
1fa0: 62 6c 65 20 3d 20 66 61 6c 73 65 3b 0a 20 20 20  ble = false;.   
1fb0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
1fc0: 20 20 20 20 20 74 68 69 73 2e 44 69 73 70 6f 73       this.Dispos
1fd0: 65 28 74 72 75 65 29 3b 0a 20 20 20 20 20 20 72  e(true);.      r
1fe0: 65 74 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74  eturn VSConstant
1ff0: 73 2e 53 5f 4f 4b 3b 0a 20 20 20 20 7d 0a 0a 20  s.S_OK;.    }.. 
2000: 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 43 72     public int Cr
2010: 65 61 74 65 50 61 6e 65 57 69 6e 64 6f 77 28 49  eatePaneWindow(I
2020: 6e 74 50 74 72 20 68 77 6e 64 50 61 72 65 6e 74  ntPtr hwndParent
2030: 2c 20 69 6e 74 20 78 2c 20 69 6e 74 20 79 2c 20  , int x, int y, 
2040: 69 6e 74 20 63 78 2c 20 69 6e 74 20 63 79 2c 20  int cx, int cy, 
2050: 6f 75 74 20 49 6e 74 50 74 72 20 68 77 6e 64 29  out IntPtr hwnd)
2060: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 57 69 6e  .    {.      Win
2070: 33 32 4d 65 74 68 6f 64 73 2e 53 65 74 50 61 72  32Methods.SetPar
2080: 65 6e 74 28 48 61 6e 64 6c 65 2c 20 68 77 6e 64  ent(Handle, hwnd
2090: 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 20 20 68  Parent);.      h
20a0: 77 6e 64 20 3d 20 48 61 6e 64 6c 65 3b 0a 0a 20  wnd = Handle;.. 
20b0: 20 20 20 20 20 53 69 7a 65 20 3d 20 6e 65 77 20       Size = new 
20c0: 53 79 73 74 65 6d 2e 44 72 61 77 69 6e 67 2e 53  System.Drawing.S
20d0: 69 7a 65 28 63 78 20 2d 20 78 2c 20 63 79 20 2d  ize(cx - x, cy -
20e0: 20 79 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72   y);.      retur
20f0: 6e 20 56 53 43 6f 6e 73 74 61 6e 74 73 2e 53 5f  n VSConstants.S_
2100: 4f 4b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70  OK;.    }..    p
2110: 75 62 6c 69 63 20 69 6e 74 20 47 65 74 44 65 66  ublic int GetDef
2120: 61 75 6c 74 53 69 7a 65 28 4d 69 63 72 6f 73 6f  aultSize(Microso
2130: 66 74 2e 56 69 73 75 61 6c 53 74 75 64 69 6f 2e  ft.VisualStudio.
2140: 4f 4c 45 2e 49 6e 74 65 72 6f 70 2e 53 49 5a 45  OLE.Interop.SIZE
2150: 5b 5d 20 73 69 7a 65 29 0a 20 20 20 20 7b 0a 20  [] size).    {. 
2160: 20 20 20 20 20 69 66 20 28 73 69 7a 65 2e 4c 65       if (size.Le
2170: 6e 67 74 68 20 3e 3d 20 31 29 0a 20 20 20 20 20  ngth >= 1).     
2180: 20 7b 0a 20 20 20 20 20 20 20 20 73 69 7a 65 5b   {.        size[
2190: 30 5d 2e 63 78 20 3d 20 53 69 7a 65 2e 57 69 64  0].cx = Size.Wid
21a0: 74 68 3b 0a 20 20 20 20 20 20 20 20 73 69 7a 65  th;.        size
21b0: 5b 30 5d 2e 63 79 20 3d 20 53 69 7a 65 2e 48 65  [0].cy = Size.He
21c0: 69 67 68 74 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  ight;.      }.. 
21d0: 20 20 20 20 20 72 65 74 75 72 6e 20 56 53 43 6f       return VSCo
21e0: 6e 73 74 61 6e 74 73 2e 53 5f 4f 4b 3b 0a 20 20  nstants.S_OK;.  
21f0: 20 20 7d 0a 0a 20 20 20 20 70 75 62 6c 69 63 20    }..    public 
2200: 69 6e 74 20 4c 6f 61 64 56 69 65 77 53 74 61 74  int LoadViewStat
2210: 65 28 4d 69 63 72 6f 73 6f 66 74 2e 56 69 73 75  e(Microsoft.Visu
2220: 61 6c 53 74 75 64 69 6f 2e 4f 4c 45 2e 49 6e 74  alStudio.OLE.Int
2230: 65 72 6f 70 2e 49 53 74 72 65 61 6d 20 70 53 74  erop.IStream pSt
2240: 72 65 61 6d 29 0a 20 20 20 20 7b 0a 20 20 20 20  ream).    {.    
2250: 20 20 72 65 74 75 72 6e 20 56 53 43 6f 6e 73 74    return VSConst
2260: 61 6e 74 73 2e 53 5f 4f 4b 3b 0a 20 20 20 20 7d  ants.S_OK;.    }
2270: 0a 0a 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74  ..    public int
2280: 20 53 61 76 65 56 69 65 77 53 74 61 74 65 28 4d   SaveViewState(M
2290: 69 63 72 6f 73 6f 66 74 2e 56 69 73 75 61 6c 53  icrosoft.VisualS
22a0: 74 75 64 69 6f 2e 4f 4c 45 2e 49 6e 74 65 72 6f  tudio.OLE.Intero
22b0: 70 2e 49 53 74 72 65 61 6d 20 70 53 74 72 65 61  p.IStream pStrea
22c0: 6d 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72  m).    {.      r
22d0: 65 74 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74  eturn VSConstant
22e0: 73 2e 53 5f 4f 4b 3b 0a 20 20 20 20 7d 0a 0a 20  s.S_OK;.    }.. 
22f0: 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 52     public void R
2300: 65 66 72 65 73 68 54 6f 6f 6c 62 61 72 73 28 29  efreshToolbars()
2310: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 69 66 20  .    {.      if 
2320: 28 5f 73 65 72 76 69 63 65 50 72 6f 76 69 64 65  (_serviceProvide
2330: 72 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72  r == null) retur
2340: 6e 3b 0a 0a 20 20 20 20 20 20 49 56 73 55 49 53  n;..      IVsUIS
2350: 68 65 6c 6c 20 73 68 65 6c 6c 20 3d 20 5f 73 65  hell shell = _se
2360: 72 76 69 63 65 50 72 6f 76 69 64 65 72 2e 47 65  rviceProvider.Ge
2370: 74 53 65 72 76 69 63 65 28 74 79 70 65 6f 66 28  tService(typeof(
2380: 49 56 73 55 49 53 68 65 6c 6c 29 29 20 61 73 20  IVsUIShell)) as 
2390: 49 56 73 55 49 53 68 65 6c 6c 3b 0a 0a 20 20 20  IVsUIShell;..   
23a0: 20 20 20 69 66 20 28 73 68 65 6c 6c 20 21 3d 20     if (shell != 
23b0: 6e 75 6c 6c 29 0a 20 20 20 20 20 20 7b 0a 20 20  null).      {.  
23c0: 20 20 20 20 20 20 73 68 65 6c 6c 2e 55 70 64 61        shell.Upda
23d0: 74 65 43 6f 6d 6d 61 6e 64 55 49 28 31 29 3b 0a  teCommandUI(1);.
23e0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20        }.    }.. 
23f0: 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 53 65     public int Se
2400: 74 53 69 74 65 28 4d 69 63 72 6f 73 6f 66 74 2e  tSite(Microsoft.
2410: 56 69 73 75 61 6c 53 74 75 64 69 6f 2e 4f 4c 45  VisualStudio.OLE
2420: 2e 49 6e 74 65 72 6f 70 2e 49 53 65 72 76 69 63  .Interop.IServic
2430: 65 50 72 6f 76 69 64 65 72 20 70 73 70 29 0a 20  eProvider psp). 
2440: 20 20 20 7b 0a 20 20 20 20 20 20 5f 73 65 72 76     {.      _serv
2450: 69 63 65 50 72 6f 76 69 64 65 72 20 3d 20 6e 65  iceProvider = ne
2460: 77 20 53 65 72 76 69 63 65 50 72 6f 76 69 64 65  w ServiceProvide
2470: 72 28 70 73 70 29 3b 0a 20 20 20 20 20 20 72 65  r(psp);.      re
2480: 74 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74 73  turn VSConstants
2490: 2e 53 5f 4f 4b 3b 0a 20 20 20 20 7d 0a 0a 20 20  .S_OK;.    }..  
24a0: 20 20 70 75 62 6c 69 63 20 69 6e 74 20 54 72 61    public int Tra
24b0: 6e 73 6c 61 74 65 41 63 63 65 6c 65 72 61 74 6f  nslateAccelerato
24c0: 72 28 4d 69 63 72 6f 73 6f 66 74 2e 56 69 73 75  r(Microsoft.Visu
24d0: 61 6c 53 74 75 64 69 6f 2e 4f 4c 45 2e 49 6e 74  alStudio.OLE.Int
24e0: 65 72 6f 70 2e 4d 53 47 5b 5d 20 6c 70 6d 73 67  erop.MSG[] lpmsg
24f0: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65  ).    {.      re
2500: 74 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74 73  turn VSConstants
2510: 2e 53 5f 46 41 4c 53 45 3b 0a 20 20 20 20 7d 0a  .S_FALSE;.    }.
2520: 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0a  .    #endregion.
2530: 0a 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64  .    public void
2540: 20 4d 61 6b 65 44 69 72 74 79 28 29 0a 20 20 20   MakeDirty().   
2550: 20 7b 0a 20 20 20 20 20 20 5f 64 69 72 74 79 20   {.      _dirty 
2560: 3d 20 74 72 75 65 3b 0a 20 20 20 20 20 20 4e 6f  = true;.      No
2570: 74 69 66 79 43 68 61 6e 67 65 73 28 29 3b 0a 20  tifyChanges();. 
2580: 20 20 20 7d 0a 0a 20 20 20 20 70 72 69 76 61 74     }..    privat
2590: 65 20 62 6f 6f 6c 20 49 73 50 6b 53 65 6c 65 63  e bool IsPkSelec
25a0: 74 65 64 28 29 0a 20 20 20 20 7b 0a 20 20 20 20  ted().    {.    
25b0: 20 20 62 6f 6f 6c 20 6e 65 77 56 61 6c 20 3d 20    bool newVal = 
25c0: 66 61 6c 73 65 3b 0a 20 20 20 20 20 20 66 6f 72  false;.      for
25d0: 65 61 63 68 20 28 43 6f 6c 75 6d 6e 20 63 20 69  each (Column c i
25e0: 6e 20 5f 70 72 6f 70 65 72 74 79 47 72 69 64 2e  n _propertyGrid.
25f0: 53 65 6c 65 63 74 65 64 4f 62 6a 65 63 74 73 29  SelectedObjects)
2600: 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  .      {.       
2610: 20 66 6f 72 65 61 63 68 20 28 49 6e 64 65 78 43   foreach (IndexC
2620: 6f 6c 75 6d 6e 20 69 63 20 69 6e 20 5f 74 61 62  olumn ic in _tab
2630: 6c 65 2e 50 72 69 6d 61 72 79 4b 65 79 2e 43 6f  le.PrimaryKey.Co
2640: 6c 75 6d 6e 73 29 0a 20 20 20 20 20 20 20 20 7b  lumns).        {
2650: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53  .          if (S
2660: 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 63 2e  tring.Compare(c.
2670: 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 69 63 2e 43  ColumnName, ic.C
2680: 6f 6c 75 6d 6e 2c 20 53 74 72 69 6e 67 43 6f 6d  olumn, StringCom
2690: 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49  parison.OrdinalI
26a0: 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29  gnoreCase) == 0)
26b0: 0a 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20  .          {.   
26c0: 20 20 20 20 20 20 20 20 20 6e 65 77 56 61 6c 20           newVal 
26d0: 3d 20 74 72 75 65 3b 0a 20 20 20 20 20 20 20 20  = true;.        
26e0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
26f0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
2700: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72  .      }.      r
2710: 65 74 75 72 6e 20 6e 65 77 56 61 6c 3b 0a 20 20  eturn newVal;.  
2720: 20 20 7d 0a 0a 20 20 20 20 23 72 65 67 69 6f 6e    }..    #region
2730: 20 49 4f 6c 65 43 6f 6d 6d 61 6e 64 54 61 72 67   IOleCommandTarg
2740: 65 74 20 4d 65 6d 62 65 72 73 0a 0a 20 20 20 20  et Members..    
2750: 70 75 62 6c 69 63 20 69 6e 74 20 45 78 65 63 28  public int Exec(
2760: 72 65 66 20 47 75 69 64 20 70 67 75 69 64 43 6d  ref Guid pguidCm
2770: 64 47 72 6f 75 70 2c 20 75 69 6e 74 20 6e 43 6d  dGroup, uint nCm
2780: 64 49 44 2c 20 75 69 6e 74 20 6e 43 6d 64 65 78  dID, uint nCmdex
2790: 65 63 6f 70 74 2c 20 49 6e 74 50 74 72 20 70 76  ecopt, IntPtr pv
27a0: 61 49 6e 2c 20 49 6e 74 50 74 72 20 70 76 61 4f  aIn, IntPtr pvaO
27b0: 75 74 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  ut).    {.      
27c0: 69 66 20 28 70 67 75 69 64 43 6d 64 47 72 6f 75  if (pguidCmdGrou
27d0: 70 20 3d 3d 20 56 53 43 6f 6e 73 74 61 6e 74 73  p == VSConstants
27e0: 2e 47 55 49 44 5f 56 53 53 74 61 6e 64 61 72 64  .GUID_VSStandard
27f0: 43 6f 6d 6d 61 6e 64 53 65 74 39 37 29 0a 20 20  CommandSet97).  
2800: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 73 77      {.        sw
2810: 69 74 63 68 20 28 28 56 53 43 6f 6e 73 74 61 6e  itch ((VSConstan
2820: 74 73 2e 56 53 53 74 64 39 37 43 6d 64 49 44 29  ts.VSStd97CmdID)
2830: 6e 43 6d 64 49 44 29 0a 20 20 20 20 20 20 20 20  nCmdID).        
2840: 7b 0a 20 20 20 20 20 20 20 20 20 20 63 61 73 65  {.          case
2850: 20 56 53 43 6f 6e 73 74 61 6e 74 73 2e 56 53 53   VSConstants.VSS
2860: 74 64 39 37 43 6d 64 49 44 2e 50 72 69 6d 61 72  td97CmdID.Primar
2870: 79 4b 65 79 3a 0a 20 20 20 20 20 20 20 20 20 20  yKey:.          
2880: 20 20 62 6f 6f 6c 20 6e 65 77 56 61 6c 20 3d 20    bool newVal = 
2890: 49 73 50 6b 53 65 6c 65 63 74 65 64 28 29 3b 0a  IsPkSelected();.
28a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
28b0: 28 6e 65 77 56 61 6c 20 3d 3d 20 66 61 6c 73 65  (newVal == false
28c0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a  ).            {.
28d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 74                _t
28e0: 61 62 6c 65 2e 50 72 69 6d 61 72 79 4b 65 79 2e  able.PrimaryKey.
28f0: 43 6f 6c 75 6d 6e 73 2e 43 6c 65 61 72 28 29 3b  Columns.Clear();
2900: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66  .              f
2910: 6f 72 65 61 63 68 20 28 43 6f 6c 75 6d 6e 20 63  oreach (Column c
2920: 20 69 6e 20 5f 70 72 6f 70 65 72 74 79 47 72 69   in _propertyGri
2930: 64 2e 53 65 6c 65 63 74 65 64 4f 62 6a 65 63 74  d.SelectedObject
2940: 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s).             
2950: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
2960: 20 20 20 49 6e 64 65 78 43 6f 6c 75 6d 6e 20 6e     IndexColumn n
2970: 65 77 63 6f 6c 20 3d 20 6e 65 77 20 49 6e 64 65  ewcol = new Inde
2980: 78 43 6f 6c 75 6d 6e 28 5f 74 61 62 6c 65 2e 50  xColumn(_table.P
2990: 72 69 6d 61 72 79 4b 65 79 2c 20 6e 75 6c 6c 29  rimaryKey, null)
29a0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
29b0: 20 20 6e 65 77 63 6f 6c 2e 43 6f 6c 75 6d 6e 20    newcol.Column 
29c0: 3d 20 63 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 3b 0a  = c.ColumnName;.
29d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e0: 5f 74 61 62 6c 65 2e 50 72 69 6d 61 72 79 4b 65  _table.PrimaryKe
29f0: 79 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 6e 65  y.Columns.Add(ne
2a00: 77 63 6f 6c 29 3b 0a 20 20 20 20 20 20 20 20 20  wcol);.         
2a10: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
2a20: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
2a30: 20 65 6c 73 65 0a 20 20 20 20 20 20 20 20 20 20   else.          
2a40: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
2a50: 20 20 66 6f 72 65 61 63 68 20 28 43 6f 6c 75 6d    foreach (Colum
2a60: 6e 20 63 20 69 6e 20 5f 70 72 6f 70 65 72 74 79  n c in _property
2a70: 47 72 69 64 2e 53 65 6c 65 63 74 65 64 4f 62 6a  Grid.SelectedObj
2a80: 65 63 74 73 29 0a 20 20 20 20 20 20 20 20 20 20  ects).          
2a90: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
2aa0: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 49        foreach (I
2ab0: 6e 64 65 78 43 6f 6c 75 6d 6e 20 69 63 20 69 6e  ndexColumn ic in
2ac0: 20 5f 74 61 62 6c 65 2e 50 72 69 6d 61 72 79 4b   _table.PrimaryK
2ad0: 65 79 2e 43 6f 6c 75 6d 6e 73 29 0a 20 20 20 20  ey.Columns).    
2ae0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20              {.  
2af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b00: 69 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61  if (String.Compa
2b10: 72 65 28 63 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 2c  re(c.ColumnName,
2b20: 20 69 63 2e 43 6f 6c 75 6d 6e 2c 20 53 74 72 69   ic.Column, Stri
2b30: 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
2b40: 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20  inalIgnoreCase) 
2b50: 3d 3d 20 30 29 0a 20 20 20 20 20 20 20 20 20 20  == 0).          
2b60: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
2b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 74                _t
2b80: 61 62 6c 65 2e 50 72 69 6d 61 72 79 4b 65 79 2e  able.PrimaryKey.
2b90: 43 6f 6c 75 6d 6e 73 2e 52 65 6d 6f 76 65 28 69  Columns.Remove(i
2ba0: 63 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  c);.            
2bb0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
2bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd0: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
2be0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
2bf0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
2c00: 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2c10: 5f 64 61 74 61 47 72 69 64 5f 53 65 6c 65 63 74  _dataGrid_Select
2c20: 69 6f 6e 43 68 61 6e 67 65 64 28 74 68 69 73 2c  ionChanged(this,
2c30: 20 45 76 65 6e 74 41 72 67 73 2e 45 6d 70 74 79   EventArgs.Empty
2c40: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  );.            _
2c50: 64 61 74 61 47 72 69 64 2e 49 6e 76 61 6c 69 64  dataGrid.Invalid
2c60: 61 74 65 28 29 3b 0a 20 20 20 20 20 20 20 20 20  ate();.         
2c70: 20 20 20 4d 61 6b 65 44 69 72 74 79 28 29 3b 0a     MakeDirty();.
2c80: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2c90: 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74 73 2e 53  rn VSConstants.S
2ca0: 5f 4f 4b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  _OK;.        }. 
2cb0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 65 6c 73       }.      els
2cc0: 65 20 69 66 20 28 70 67 75 69 64 43 6d 64 47 72  e if (pguidCmdGr
2cd0: 6f 75 70 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6d  oup == SQLiteCom
2ce0: 6d 61 6e 64 48 61 6e 64 6c 65 72 2e 67 75 69 64  mandHandler.guid
2cf0: 44 61 76 69 6e 63 69 29 0a 20 20 20 20 20 20 7b  Davinci).      {
2d00: 0a 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20  .        switch 
2d10: 28 28 56 53 43 6f 6e 73 74 61 6e 74 73 2e 56 53  ((VSConstants.VS
2d20: 53 74 64 39 37 43 6d 64 49 44 29 6e 43 6d 64 49  Std97CmdID)nCmdI
2d30: 44 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20  D).        {.   
2d40: 20 20 20 20 20 20 20 63 61 73 65 20 56 53 43 6f         case VSCo
2d50: 6e 73 74 61 6e 74 73 2e 56 53 53 74 64 39 37 43  nstants.VSStd97C
2d60: 6d 64 49 44 2e 4d 61 6e 61 67 65 49 6e 64 65 78  mdID.ManageIndex
2d70: 65 73 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20  es:.            
2d80: 49 6e 64 65 78 48 6f 6c 64 65 72 20 68 6f 6c 64  IndexHolder hold
2d90: 65 72 20 3d 20 6e 65 77 20 49 6e 64 65 78 48 6f  er = new IndexHo
2da0: 6c 64 65 72 28 5f 74 61 62 6c 65 2e 49 6e 64 65  lder(_table.Inde
2db0: 78 65 73 2c 20 5f 74 61 62 6c 65 2e 46 6f 72 65  xes, _table.Fore
2dc0: 69 67 6e 4b 65 79 73 29 3b 0a 20 20 20 20 20 20  ignKeys);.      
2dd0: 20 20 20 20 20 20 5f 70 67 2e 53 65 6c 65 63 74        _pg.Select
2de0: 65 64 4f 62 6a 65 63 74 20 3d 20 68 6f 6c 64 65  edObject = holde
2df0: 72 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  r;.            _
2e00: 70 67 2e 53 65 6c 65 63 74 65 64 47 72 69 64 49  pg.SelectedGridI
2e10: 74 65 6d 20 3d 20 5f 70 67 2e 53 65 6c 65 63 74  tem = _pg.Select
2e20: 65 64 47 72 69 64 49 74 65 6d 2e 50 61 72 65 6e  edGridItem.Paren
2e30: 74 2e 47 72 69 64 49 74 65 6d 73 5b 30 5d 3b 0a  t.GridItems[0];.
2e40: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 64 65              Inde
2e50: 78 45 64 69 74 6f 72 20 65 64 20 3d 20 6e 65 77  xEditor ed = new
2e60: 20 49 6e 64 65 78 45 64 69 74 6f 72 28 5f 74 61   IndexEditor(_ta
2e70: 62 6c 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ble);.          
2e80: 20 20 65 64 2e 45 64 69 74 56 61 6c 75 65 28 28    ed.EditValue((
2e90: 49 54 79 70 65 44 65 73 63 72 69 70 74 6f 72 43  ITypeDescriptorC
2ea0: 6f 6e 74 65 78 74 29 5f 70 67 2e 53 65 6c 65 63  ontext)_pg.Selec
2eb0: 74 65 64 47 72 69 64 49 74 65 6d 2c 20 28 53 79  tedGridItem, (Sy
2ec0: 73 74 65 6d 2e 49 53 65 72 76 69 63 65 50 72 6f  stem.IServicePro
2ed0: 76 69 64 65 72 29 5f 70 67 2e 53 65 6c 65 63 74  vider)_pg.Select
2ee0: 65 64 47 72 69 64 49 74 65 6d 2c 20 5f 70 67 2e  edGridItem, _pg.
2ef0: 53 65 6c 65 63 74 65 64 47 72 69 64 49 74 65 6d  SelectedGridItem
2f00: 2e 56 61 6c 75 65 29 3b 0a 20 20 20 20 20 20 20  .Value);.       
2f10: 20 20 20 20 20 72 65 74 75 72 6e 20 56 53 43 6f       return VSCo
2f20: 6e 73 74 61 6e 74 73 2e 53 5f 4f 4b 3b 0a 20 20  nstants.S_OK;.  
2f30: 20 20 20 20 20 20 20 20 63 61 73 65 20 56 53 43          case VSC
2f40: 6f 6e 73 74 61 6e 74 73 2e 56 53 53 74 64 39 37  onstants.VSStd97
2f50: 43 6d 64 49 44 2e 4d 61 6e 61 67 65 52 65 6c 61  CmdID.ManageRela
2f60: 74 69 6f 6e 73 68 69 70 73 3a 0a 20 20 20 20 20  tionships:.     
2f70: 20 20 20 20 20 20 20 68 6f 6c 64 65 72 20 3d 20         holder = 
2f80: 6e 65 77 20 49 6e 64 65 78 48 6f 6c 64 65 72 28  new IndexHolder(
2f90: 5f 74 61 62 6c 65 2e 49 6e 64 65 78 65 73 2c 20  _table.Indexes, 
2fa0: 5f 74 61 62 6c 65 2e 46 6f 72 65 69 67 6e 4b 65  _table.ForeignKe
2fb0: 79 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  ys);.           
2fc0: 20 5f 70 67 2e 53 65 6c 65 63 74 65 64 4f 62 6a   _pg.SelectedObj
2fd0: 65 63 74 20 3d 20 68 6f 6c 64 65 72 3b 0a 20 20  ect = holder;.  
2fe0: 20 20 20 20 20 20 20 20 20 20 5f 70 67 2e 53 65            _pg.Se
2ff0: 6c 65 63 74 65 64 47 72 69 64 49 74 65 6d 20 3d  lectedGridItem =
3000: 20 5f 70 67 2e 53 65 6c 65 63 74 65 64 47 72 69   _pg.SelectedGri
3010: 64 49 74 65 6d 2e 50 61 72 65 6e 74 2e 47 72 69  dItem.Parent.Gri
3020: 64 49 74 65 6d 73 5b 31 5d 3b 0a 20 20 20 20 20  dItems[1];.     
3030: 20 20 20 20 20 20 20 46 6f 72 65 69 67 6e 4b 65         ForeignKe
3040: 79 45 64 69 74 6f 72 20 66 65 64 20 3d 20 6e 65  yEditor fed = ne
3050: 77 20 46 6f 72 65 69 67 6e 4b 65 79 45 64 69 74  w ForeignKeyEdit
3060: 6f 72 28 5f 74 61 62 6c 65 29 3b 0a 20 20 20 20  or(_table);.    
3070: 20 20 20 20 20 20 20 20 66 65 64 2e 45 64 69 74          fed.Edit
3080: 56 61 6c 75 65 28 28 49 54 79 70 65 44 65 73 63  Value((ITypeDesc
3090: 72 69 70 74 6f 72 43 6f 6e 74 65 78 74 29 5f 70  riptorContext)_p
30a0: 67 2e 53 65 6c 65 63 74 65 64 47 72 69 64 49 74  g.SelectedGridIt
30b0: 65 6d 2c 20 28 53 79 73 74 65 6d 2e 49 53 65 72  em, (System.ISer
30c0: 76 69 63 65 50 72 6f 76 69 64 65 72 29 5f 70 67  viceProvider)_pg
30d0: 2e 53 65 6c 65 63 74 65 64 47 72 69 64 49 74 65  .SelectedGridIte
30e0: 6d 2c 20 5f 70 67 2e 53 65 6c 65 63 74 65 64 47  m, _pg.SelectedG
30f0: 72 69 64 49 74 65 6d 2e 56 61 6c 75 65 29 3b 0a  ridItem.Value);.
3100: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
3110: 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74 73 2e 53  rn VSConstants.S
3120: 5f 4f 4b 3b 0a 20 20 20 20 20 20 20 20 20 20 63  _OK;.          c
3130: 61 73 65 20 56 53 43 6f 6e 73 74 61 6e 74 73 2e  ase VSConstants.
3140: 56 53 53 74 64 39 37 43 6d 64 49 44 2e 41 6c 69  VSStd97CmdID.Ali
3150: 67 6e 52 69 67 68 74 3a 20 2f 2f 20 49 6e 73 65  gnRight: // Inse
3160: 72 74 20 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20  rt Column.      
3170: 20 20 20 20 20 20 5f 64 61 74 61 47 72 69 64 2e        _dataGrid.
3180: 52 6f 77 73 2e 49 6e 73 65 72 74 28 5f 64 61 74  Rows.Insert(_dat
3190: 61 47 72 69 64 2e 53 65 6c 65 63 74 65 64 52 6f  aGrid.SelectedRo
31a0: 77 73 5b 30 5d 2e 49 6e 64 65 78 2c 20 31 29 3b  ws[0].Index, 1);
31b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
31c0: 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74 73 2e  urn VSConstants.
31d0: 53 5f 4f 4b 3b 0a 20 20 20 20 20 20 20 20 20 20  S_OK;.          
31e0: 63 61 73 65 20 56 53 43 6f 6e 73 74 61 6e 74 73  case VSConstants
31f0: 2e 56 53 53 74 64 39 37 43 6d 64 49 44 2e 41 6c  .VSStd97CmdID.Al
3200: 69 67 6e 54 6f 47 72 69 64 3a 20 2f 2f 20 44 65  ignToGrid: // De
3210: 6c 65 74 65 20 43 6f 6c 75 6d 6e 0a 20 20 20 20  lete Column.    
3220: 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 5f          while (_
3230: 64 61 74 61 47 72 69 64 2e 53 65 6c 65 63 74 65  dataGrid.Selecte
3240: 64 52 6f 77 73 2e 43 6f 75 6e 74 20 3e 20 30 29  dRows.Count > 0)
3250: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20  .            {. 
3260: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
3270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
3280: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3290: 20 44 61 74 61 47 72 69 64 56 69 65 77 52 6f 77   DataGridViewRow
32a0: 20 72 6f 77 20 3d 20 5f 64 61 74 61 47 72 69 64   row = _dataGrid
32b0: 2e 53 65 6c 65 63 74 65 64 52 6f 77 73 5b 30 5d  .SelectedRows[0]
32c0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
32d0: 20 20 43 6f 6c 75 6d 6e 20 63 20 3d 20 72 6f 77    Column c = row
32e0: 2e 54 61 67 20 61 73 20 43 6f 6c 75 6d 6e 3b 0a  .Tag as Column;.
32f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3300: 72 6f 77 2e 53 65 6c 65 63 74 65 64 20 3d 20 66  row.Selected = f
3310: 61 6c 73 65 3b 0a 20 20 20 20 20 20 20 20 20 20  alse;.          
3320: 20 20 20 20 20 20 69 66 20 28 63 20 21 3d 20 6e        if (c != n
3330: 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 20 20 20  ull).           
3340: 20 20 20 20 20 20 20 5f 74 61 62 6c 65 2e 43 6f         _table.Co
3350: 6c 75 6d 6e 73 2e 52 65 6d 6f 76 65 28 63 29 3b  lumns.Remove(c);
3360: 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3370: 20 20 5f 64 61 74 61 47 72 69 64 2e 52 6f 77 73    _dataGrid.Rows
3380: 2e 52 65 6d 6f 76 65 28 72 6f 77 29 3b 0a 20 20  .Remove(row);.  
3390: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
33a0: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
33b0: 68 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h.              
33c0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
33d0: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  }.            }.
33e0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
33f0: 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74 73 2e 53  rn VSConstants.S
3400: 5f 4f 4b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  _OK;.        }. 
3410: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 72 65       }..      re
3420: 74 75 72 6e 20 28 69 6e 74 29 28 4d 69 63 72 6f  turn (int)(Micro
3430: 73 6f 66 74 2e 56 69 73 75 61 6c 53 74 75 64 69  soft.VisualStudi
3440: 6f 2e 4f 4c 45 2e 49 6e 74 65 72 6f 70 2e 43 6f  o.OLE.Interop.Co
3450: 6e 73 74 61 6e 74 73 2e 4f 4c 45 43 4d 44 45 52  nstants.OLECMDER
3460: 52 5f 45 5f 4e 4f 54 53 55 50 50 4f 52 54 45 44  R_E_NOTSUPPORTED
3470: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 75  );.    }..    pu
3480: 62 6c 69 63 20 69 6e 74 20 51 75 65 72 79 53 74  blic int QuerySt
3490: 61 74 75 73 28 72 65 66 20 47 75 69 64 20 70 67  atus(ref Guid pg
34a0: 75 69 64 43 6d 64 47 72 6f 75 70 2c 20 75 69 6e  uidCmdGroup, uin
34b0: 74 20 63 43 6d 64 73 2c 20 4f 4c 45 43 4d 44 5b  t cCmds, OLECMD[
34c0: 5d 20 70 72 67 43 6d 64 73 2c 20 49 6e 74 50 74  ] prgCmds, IntPt
34d0: 72 20 70 43 6d 64 54 65 78 74 29 0a 20 20 20 20  r pCmdText).    
34e0: 7b 0a 20 20 20 20 20 20 69 66 20 28 70 67 75 69  {.      if (pgui
34f0: 64 43 6d 64 47 72 6f 75 70 20 3d 3d 20 56 53 43  dCmdGroup == VSC
3500: 6f 6e 73 74 61 6e 74 73 2e 47 55 49 44 5f 56 53  onstants.GUID_VS
3510: 53 74 61 6e 64 61 72 64 43 6f 6d 6d 61 6e 64 53  StandardCommandS
3520: 65 74 39 37 29 0a 20 20 20 20 20 20 7b 0a 20 20  et97).      {.  
3530: 20 20 20 20 20 20 73 77 69 74 63 68 20 28 28 56        switch ((V
3540: 53 43 6f 6e 73 74 61 6e 74 73 2e 56 53 53 74 64  SConstants.VSStd
3550: 39 37 43 6d 64 49 44 29 70 72 67 43 6d 64 73 5b  97CmdID)prgCmds[
3560: 30 5d 2e 63 6d 64 49 44 29 0a 20 20 20 20 20 20  0].cmdID).      
3570: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 63 61    {.          ca
3580: 73 65 20 56 53 43 6f 6e 73 74 61 6e 74 73 2e 56  se VSConstants.V
3590: 53 53 74 64 39 37 43 6d 64 49 44 2e 50 72 69 6d  SStd97CmdID.Prim
35a0: 61 72 79 4b 65 79 3a 0a 20 20 20 20 20 20 20 20  aryKey:.        
35b0: 20 20 20 20 70 72 67 43 6d 64 73 5b 30 5d 2e 63      prgCmds[0].c
35c0: 6d 64 66 20 3d 20 28 75 69 6e 74 29 28 4f 4c 45  mdf = (uint)(OLE
35d0: 43 4d 44 46 2e 4f 4c 45 43 4d 44 46 5f 53 55 50  CMDF.OLECMDF_SUP
35e0: 50 4f 52 54 45 44 20 7c 20 4f 4c 45 43 4d 44 46  PORTED | OLECMDF
35f0: 2e 4f 4c 45 43 4d 44 46 5f 45 4e 41 42 4c 45 44  .OLECMDF_ENABLED
3600: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  );.            i
3610: 66 20 28 49 73 50 6b 53 65 6c 65 63 74 65 64 28  f (IsPkSelected(
3620: 29 20 3d 3d 20 74 72 75 65 29 0a 20 20 20 20 20  ) == true).     
3630: 20 20 20 20 20 20 20 20 20 70 72 67 43 6d 64 73           prgCmds
3640: 5b 30 5d 2e 63 6d 64 66 20 7c 3d 20 28 75 69 6e  [0].cmdf |= (uin
3650: 74 29 28 4f 4c 45 43 4d 44 46 2e 4f 4c 45 43 4d  t)(OLECMDF.OLECM
3660: 44 46 5f 4c 41 54 43 48 45 44 29 3b 0a 0a 20 20  DF_LATCHED);..  
3670: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
3680: 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 63 61 73  .          //cas
3690: 65 20 56 53 43 6f 6e 73 74 61 6e 74 73 2e 56 53  e VSConstants.VS
36a0: 53 74 64 39 37 43 6d 64 49 44 2e 47 65 6e 65 72  Std97CmdID.Gener
36b0: 61 74 65 43 68 61 6e 67 65 53 63 72 69 70 74 3a  ateChangeScript:
36c0: 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 70  .          //  p
36d0: 72 67 43 6d 64 73 5b 30 5d 2e 63 6d 64 66 20 3d  rgCmds[0].cmdf =
36e0: 20 28 75 69 6e 74 29 28 4f 4c 45 43 4d 44 46 2e   (uint)(OLECMDF.
36f0: 4f 4c 45 43 4d 44 46 5f 53 55 50 50 4f 52 54 45  OLECMDF_SUPPORTE
3700: 44 20 7c 20 4f 4c 45 43 4d 44 46 2e 4f 4c 45 43  D | OLECMDF.OLEC
3710: 4d 44 46 5f 45 4e 41 42 4c 45 44 29 3b 0a 20 20  MDF_ENABLED);.  
3720: 20 20 20 20 20 20 20 20 2f 2f 20 20 62 72 65 61          //  brea
3730: 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 64 65 66  k;.          def
3740: 61 75 6c 74 3a 0a 20 20 20 20 20 20 20 20 20 20  ault:.          
3750: 20 20 72 65 74 75 72 6e 20 28 69 6e 74 29 28 4d    return (int)(M
3760: 69 63 72 6f 73 6f 66 74 2e 56 69 73 75 61 6c 53  icrosoft.VisualS
3770: 74 75 64 69 6f 2e 4f 4c 45 2e 49 6e 74 65 72 6f  tudio.OLE.Intero
3780: 70 2e 43 6f 6e 73 74 61 6e 74 73 2e 4f 4c 45 43  p.Constants.OLEC
3790: 4d 44 45 52 52 5f 45 5f 4e 4f 54 53 55 50 50 4f  MDERR_E_NOTSUPPO
37a0: 52 54 45 44 29 3b 0a 20 20 20 20 20 20 20 20 7d  RTED);.        }
37b0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
37c0: 56 53 43 6f 6e 73 74 61 6e 74 73 2e 53 5f 4f 4b  VSConstants.S_OK
37d0: 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
37e0: 20 69 66 20 28 70 67 75 69 64 43 6d 64 47 72 6f   if (pguidCmdGro
37f0: 75 70 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6d 6d  up == SQLiteComm
3800: 61 6e 64 48 61 6e 64 6c 65 72 2e 67 75 69 64 44  andHandler.guidD
3810: 61 76 69 6e 63 69 29 0a 20 20 20 20 20 20 7b 0a  avinci).      {.
3820: 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20 28          switch (
3830: 70 72 67 43 6d 64 73 5b 30 5d 2e 63 6d 64 49 44  prgCmds[0].cmdID
3840: 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20  ).        {.    
3850: 20 20 20 20 20 20 63 61 73 65 20 28 75 69 6e 74        case (uint
3860: 29 56 53 43 6f 6e 73 74 61 6e 74 73 2e 56 53 53  )VSConstants.VSS
3870: 74 64 39 37 43 6d 64 49 44 2e 4d 61 6e 61 67 65  td97CmdID.Manage
3880: 52 65 6c 61 74 69 6f 6e 73 68 69 70 73 3a 0a 20  Relationships:. 
3890: 20 20 20 20 20 20 20 20 20 63 61 73 65 20 28 75           case (u
38a0: 69 6e 74 29 56 53 43 6f 6e 73 74 61 6e 74 73 2e  int)VSConstants.
38b0: 56 53 53 74 64 39 37 43 6d 64 49 44 2e 4d 61 6e  VSStd97CmdID.Man
38c0: 61 67 65 49 6e 64 65 78 65 73 3a 0a 20 20 20 20  ageIndexes:.    
38d0: 20 20 20 20 20 20 2f 2f 63 61 73 65 20 28 75 69        //case (ui
38e0: 6e 74 29 56 53 43 6f 6e 73 74 61 6e 74 73 2e 56  nt)VSConstants.V
38f0: 53 53 74 64 39 37 43 6d 64 49 44 2e 4d 61 6e 61  SStd97CmdID.Mana
3900: 67 65 43 6f 6e 73 74 72 61 69 6e 74 73 3a 0a 20  geConstraints:. 
3910: 20 20 20 20 20 20 20 20 20 2f 2f 63 61 73 65 20           //case 
3920: 31 30 3a 20 2f 2f 20 54 61 62 6c 65 20 56 69 65  10: // Table Vie
3930: 77 20 2d 3e 20 43 75 73 74 6f 6d 0a 20 20 20 20  w -> Custom.    
3940: 20 20 20 20 20 20 2f 2f 63 61 73 65 20 31 34 3a        //case 14:
3950: 20 2f 2f 20 54 61 62 6c 65 20 56 69 65 77 20 2d   // Table View -
3960: 3e 20 4d 6f 64 69 66 79 20 43 75 73 74 6f 6d 0a  > Modify Custom.
3970: 20 20 20 20 20 20 20 20 20 20 2f 2f 63 61 73 65            //case
3980: 20 33 33 3a 20 2f 2f 20 44 61 74 61 62 61 73 65   33: // Database
3990: 20 44 69 61 67 72 61 6d 20 2d 3e 20 41 64 64 20   Diagram -> Add 
39a0: 54 61 62 6c 65 0a 20 20 20 20 20 20 20 20 20 20  Table.          
39b0: 2f 2f 63 61 73 65 20 31 3a 20 2f 2f 20 44 61 74  //case 1: // Dat
39c0: 61 62 61 73 65 20 44 69 61 67 72 61 6d 20 2d 3e  abase Diagram ->
39d0: 20 41 64 64 20 52 65 6c 61 74 65 64 20 54 61 62   Add Related Tab
39e0: 6c 65 73 0a 20 20 20 20 20 20 20 20 20 20 2f 2f  les.          //
39f0: 63 61 73 65 20 31 32 3a 20 2f 2f 20 44 61 74 61  case 12: // Data
3a00: 62 61 73 65 20 44 69 61 67 72 61 6d 20 2d 3e 20  base Diagram -> 
3a10: 44 65 6c 65 74 65 20 46 72 6f 6d 20 44 61 74 61  Delete From Data
3a20: 62 61 73 65 0a 20 20 20 20 20 20 20 20 20 20 2f  base.          /
3a30: 2f 63 61 73 65 20 35 31 3a 20 2f 2f 20 44 61 74  /case 51: // Dat
3a40: 61 62 61 73 65 20 44 69 61 67 72 61 6d 20 2d 3e  abase Diagram ->
3a50: 20 52 65 6d 6f 76 65 20 46 72 6f 6d 20 44 69 61   Remove From Dia
3a60: 67 72 61 6d 0a 20 20 20 20 20 20 20 20 20 20 2f  gram.          /
3a70: 2f 63 61 73 65 20 31 33 3a 20 2f 2f 20 44 61 74  /case 13: // Dat
3a80: 61 62 61 73 65 20 44 69 61 67 72 61 6d 20 2d 3e  abase Diagram ->
3a90: 20 41 75 74 6f 73 69 7a 65 20 53 65 6c 65 63 74   Autosize Select
3aa0: 65 64 20 54 61 62 6c 65 73 0a 20 20 20 20 20 20  ed Tables.      
3ab0: 20 20 20 20 2f 2f 63 61 73 65 20 33 3a 20 2f 2f      //case 3: //
3ac0: 20 44 61 74 61 62 61 73 65 20 44 69 61 67 72 61   Database Diagra
3ad0: 6d 20 2d 3e 20 41 72 72 61 6e 67 65 20 53 65 6c  m -> Arrange Sel
3ae0: 65 63 74 69 6f 6e 0a 20 20 20 20 20 20 20 20 20  ection.         
3af0: 20 2f 2f 63 61 73 65 20 32 3a 20 2f 2f 20 44 61   //case 2: // Da
3b00: 74 61 62 61 73 65 20 44 69 61 67 72 61 6d 20 2d  tabase Diagram -
3b10: 3e 20 41 72 72 61 6e 67 65 20 54 61 62 6c 65 73  > Arrange Tables
3b20: 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 63 61 73  .          //cas
3b30: 65 20 31 36 3a 20 2f 2f 20 44 61 74 61 62 61 73  e 16: // Databas
3b40: 65 20 44 69 61 67 72 61 6d 20 2d 3e 20 5a 6f 6f  e Diagram -> Zoo
3b50: 6d 20 2d 3e 20 32 30 30 25 0a 20 20 20 20 20 20  m -> 200%.      
3b60: 20 20 20 20 2f 2f 63 61 73 65 20 31 37 3a 20 2f      //case 17: /
3b70: 2f 20 44 61 74 61 62 61 73 65 20 44 69 61 67 72  / Database Diagr
3b80: 61 6d 20 2d 3e 20 5a 6f 6f 6d 20 2d 3e 20 31 35  am -> Zoom -> 15
3b90: 30 25 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 63  0%.          //c
3ba0: 61 73 65 20 31 38 3a 20 2f 2f 20 44 61 74 61 62  ase 18: // Datab
3bb0: 61 73 65 20 44 69 61 67 72 61 6d 20 2d 3e 20 5a  ase Diagram -> Z
3bc0: 6f 6f 6d 20 2d 3e 20 31 30 30 25 0a 20 20 20 20  oom -> 100%.    
3bd0: 20 20 20 20 20 20 2f 2f 63 61 73 65 20 31 39 3a        //case 19:
3be0: 20 2f 2f 20 44 61 74 61 62 61 73 65 20 44 69 61   // Database Dia
3bf0: 67 72 61 6d 20 2d 3e 20 5a 6f 6f 6d 20 2d 3e 20  gram -> Zoom -> 
3c00: 37 35 25 0a 20 20 20 20 20 20 20 20 20 20 2f 2f  75%.          //
3c10: 63 61 73 65 20 32 30 3a 20 2f 2f 20 44 61 74 61  case 20: // Data
3c20: 62 61 73 65 20 44 69 61 67 72 61 6d 20 2d 3e 20  base Diagram -> 
3c30: 5a 6f 6f 6d 20 2d 3e 20 35 30 25 0a 20 20 20 20  Zoom -> 50%.    
3c40: 20 20 20 20 20 20 2f 2f 63 61 73 65 20 32 31 3a        //case 21:
3c50: 20 2f 2f 20 44 61 74 61 62 61 73 65 20 44 69 61   // Database Dia
3c60: 67 72 61 6d 20 2d 3e 20 5a 6f 6f 6d 20 2d 3e 20  gram -> Zoom -> 
3c70: 32 35 25 0a 20 20 20 20 20 20 20 20 20 20 2f 2f  25%.          //
3c80: 63 61 73 65 20 32 32 3a 20 2f 2f 20 44 61 74 61  case 22: // Data
3c90: 62 61 73 65 20 44 69 61 67 72 61 6d 20 2d 3e 20  base Diagram -> 
3ca0: 5a 6f 6f 6d 20 2d 3e 20 31 30 25 0a 20 20 20 20  Zoom -> 10%.    
3cb0: 20 20 20 20 20 20 2f 2f 63 61 73 65 20 32 34 3a        //case 24:
3cc0: 20 2f 2f 20 44 61 74 61 62 61 73 65 20 44 69 61   // Database Dia
3cd0: 67 72 61 6d 20 2d 3e 20 5a 6f 6f 6d 20 2d 3e 20  gram -> Zoom -> 
3ce0: 54 6f 20 46 69 74 0a 20 20 20 20 20 20 20 20 20  To Fit.         
3cf0: 20 2f 2f 63 61 73 65 20 36 3a 20 2f 2f 20 44 61   //case 6: // Da
3d00: 74 61 62 61 73 65 20 44 69 61 67 72 61 6d 20 2d  tabase Diagram -
3d10: 3e 20 4e 65 77 20 54 65 78 74 20 41 6e 6e 6f 74  > New Text Annot
3d20: 61 74 69 6f 6e 0a 20 20 20 20 20 20 20 20 20 20  ation.          
3d30: 2f 2f 63 61 73 65 20 31 35 3a 20 2f 2f 20 44 61  //case 15: // Da
3d40: 74 61 62 61 73 65 20 44 69 61 67 72 61 6d 20 2d  tabase Diagram -
3d50: 3e 20 53 65 74 20 54 65 78 74 20 41 6e 6e 6f 74  > Set Text Annot
3d60: 61 74 69 6f 6e 20 46 6f 6e 74 0a 20 20 20 20 20  ation Font.     
3d70: 20 20 20 20 20 2f 2f 63 61 73 65 20 37 3a 20 2f       //case 7: /
3d80: 2f 20 44 61 74 61 62 61 73 65 20 44 69 61 67 72  / Database Diagr
3d90: 61 6d 20 2d 3e 20 53 68 6f 77 20 52 65 6c 61 74  am -> Show Relat
3da0: 69 6f 6e 73 68 69 70 20 4c 61 62 65 6c 73 0a 20  ionship Labels. 
3db0: 20 20 20 20 20 20 20 20 20 2f 2f 63 61 73 65 20           //case 
3dc0: 38 3a 20 2f 2f 20 44 61 74 61 62 61 73 65 20 44  8: // Database D
3dd0: 69 61 67 72 61 6d 20 2d 3e 20 56 69 65 77 20 50  iagram -> View P
3de0: 61 67 65 20 42 72 65 61 6b 73 0a 20 20 20 20 20  age Breaks.     
3df0: 20 20 20 20 20 2f 2f 63 61 73 65 20 39 3a 20 2f       //case 9: /
3e00: 2f 20 44 61 74 61 62 61 73 65 20 44 69 61 67 72  / Database Diagr
3e10: 61 6d 20 2d 3e 20 52 65 63 61 6c 63 75 6c 61 74  am -> Recalculat
3e20: 65 20 50 61 67 65 20 42 72 65 61 6b 73 0a 20 20  e Page Breaks.  
3e30: 20 20 20 20 20 20 20 20 2f 2f 63 61 73 65 20 34          //case 4
3e40: 33 3a 20 2f 2f 20 44 61 74 61 62 61 73 65 20 44  3: // Database D
3e50: 69 61 67 72 61 6d 20 2d 3e 20 43 6f 70 79 20 44  iagram -> Copy D
3e60: 69 61 67 72 61 6d 20 74 6f 20 43 6c 69 70 62 6f  iagram to Clipbo
3e70: 61 72 64 0a 20 20 20 20 20 20 20 20 20 20 2f 2f  ard.          //
3e80: 63 61 73 65 20 34 31 3a 20 2f 2f 20 51 75 65 72  case 41: // Quer
3e90: 79 20 44 65 73 69 67 6e 65 72 20 2d 3e 20 54 61  y Designer -> Ta
3ea0: 62 6c 65 20 44 69 73 70 6c 61 79 20 2d 3e 20 43  ble Display -> C
3eb0: 6f 6c 75 6d 6e 20 4e 61 6d 65 73 0a 20 20 20 20  olumn Names.    
3ec0: 20 20 20 20 20 20 2f 2f 63 61 73 65 20 34 32 3a        //case 42:
3ed0: 20 2f 2f 20 51 75 65 72 79 20 44 65 73 69 67 6e   // Query Design
3ee0: 65 72 20 2d 3e 20 54 61 62 6c 65 20 44 69 73 70  er -> Table Disp
3ef0: 6c 61 79 20 2d 3e 20 4e 61 6d 65 20 4f 6e 6c 79  lay -> Name Only
3f00: 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 63 61 73  .          //cas
3f10: 65 20 33 39 3a 20 2f 2f 20 51 75 65 72 79 20 44  e 39: // Query D
3f20: 65 73 69 67 6e 65 72 20 2d 3e 20 41 64 64 20 54  esigner -> Add T
3f30: 61 62 6c 65 0a 20 20 20 20 20 20 20 20 20 20 63  able.          c
3f40: 61 73 65 20 34 3a 20 2f 2f 20 49 6e 73 65 72 74  ase 4: // Insert
3f50: 20 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20   Column.        
3f60: 20 20 63 61 73 65 20 35 3a 20 2f 2f 20 44 65 6c    case 5: // Del
3f70: 65 74 65 20 43 6f 6c 75 6d 6e 0a 20 20 20 20 20  ete Column.     
3f80: 20 20 20 20 20 20 20 70 72 67 43 6d 64 73 5b 30         prgCmds[0
3f90: 5d 2e 63 6d 64 66 20 3d 20 28 75 69 6e 74 29 28  ].cmdf = (uint)(
3fa0: 4f 4c 45 43 4d 44 46 2e 4f 4c 45 43 4d 44 46 5f  OLECMDF.OLECMDF_
3fb0: 53 55 50 50 4f 52 54 45 44 20 7c 20 4f 4c 45 43  SUPPORTED | OLEC
3fc0: 4d 44 46 2e 4f 4c 45 43 4d 44 46 5f 45 4e 41 42  MDF.OLECMDF_ENAB
3fd0: 4c 45 44 29 3b 0a 20 20 20 20 20 20 20 20 20 20  LED);.          
3fe0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
3ff0: 20 20 20 64 65 66 61 75 6c 74 3a 0a 20 20 20 20     default:.    
4000: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
4010: 69 6e 74 29 28 4d 69 63 72 6f 73 6f 66 74 2e 56  int)(Microsoft.V
4020: 69 73 75 61 6c 53 74 75 64 69 6f 2e 4f 4c 45 2e  isualStudio.OLE.
4030: 49 6e 74 65 72 6f 70 2e 43 6f 6e 73 74 61 6e 74  Interop.Constant
4040: 73 2e 4f 4c 45 43 4d 44 45 52 52 5f 45 5f 4e 4f  s.OLECMDERR_E_NO
4050: 54 53 55 50 50 4f 52 54 45 44 29 3b 0a 20 20 20  TSUPPORTED);.   
4060: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72       }.        r
4070: 65 74 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74  eturn VSConstant
4080: 73 2e 53 5f 4f 4b 3b 0a 20 20 20 20 20 20 7d 0a  s.S_OK;.      }.
4090: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 69  .      return (i
40a0: 6e 74 29 28 4d 69 63 72 6f 73 6f 66 74 2e 56 69  nt)(Microsoft.Vi
40b0: 73 75 61 6c 53 74 75 64 69 6f 2e 4f 4c 45 2e 49  sualStudio.OLE.I
40c0: 6e 74 65 72 6f 70 2e 43 6f 6e 73 74 61 6e 74 73  nterop.Constants
40d0: 2e 4f 4c 45 43 4d 44 45 52 52 5f 45 5f 4e 4f 54  .OLECMDERR_E_NOT
40e0: 53 55 50 50 4f 52 54 45 44 29 3b 0a 20 20 20 20  SUPPORTED);.    
40f0: 7d 0a 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f  }..    #endregio
4100: 6e 0a 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 49  n..    #region I
4110: 53 65 6c 65 63 74 69 6f 6e 43 6f 6e 74 61 69 6e  SelectionContain
4120: 65 72 20 4d 65 6d 62 65 72 73 0a 0a 20 20 20 20  er Members..    
4130: 69 6e 74 20 49 53 65 6c 65 63 74 69 6f 6e 43 6f  int ISelectionCo
4140: 6e 74 61 69 6e 65 72 2e 43 6f 75 6e 74 4f 62 6a  ntainer.CountObj
4150: 65 63 74 73 28 75 69 6e 74 20 64 77 46 6c 61 67  ects(uint dwFlag
4160: 73 2c 20 6f 75 74 20 75 69 6e 74 20 70 63 29 0a  s, out uint pc).
4170: 20 20 20 20 7b 0a 20 20 20 20 20 20 70 63 20 3d      {.      pc =
4180: 20 31 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   1;.      return
4190: 20 56 53 43 6f 6e 73 74 61 6e 74 73 2e 53 5f 4f   VSConstants.S_O
41a0: 4b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e  K;.    }..    in
41b0: 74 20 49 53 65 6c 65 63 74 69 6f 6e 43 6f 6e 74  t ISelectionCont
41c0: 61 69 6e 65 72 2e 47 65 74 4f 62 6a 65 63 74 73  ainer.GetObjects
41d0: 28 75 69 6e 74 20 64 77 46 6c 61 67 73 2c 20 75  (uint dwFlags, u
41e0: 69 6e 74 20 63 4f 62 6a 65 63 74 73 2c 20 6f 62  int cObjects, ob
41f0: 6a 65 63 74 5b 5d 20 61 70 55 6e 6b 4f 62 6a 65  ject[] apUnkObje
4200: 63 74 73 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  cts).    {.     
4210: 20 61 70 55 6e 6b 4f 62 6a 65 63 74 73 5b 30 5d   apUnkObjects[0]
4220: 20 3d 20 5f 74 61 62 6c 65 3b 0a 20 20 20 20 20   = _table;.     
4230: 20 72 65 74 75 72 6e 20 56 53 43 6f 6e 73 74 61   return VSConsta
4240: 6e 74 73 2e 53 5f 4f 4b 3b 0a 20 20 20 20 7d 0a  nts.S_OK;.    }.
4250: 0a 20 20 20 20 69 6e 74 20 49 53 65 6c 65 63 74  .    int ISelect
4260: 69 6f 6e 43 6f 6e 74 61 69 6e 65 72 2e 53 65 6c  ionContainer.Sel
4270: 65 63 74 4f 62 6a 65 63 74 73 28 75 69 6e 74 20  ectObjects(uint 
4280: 63 53 65 6c 65 63 74 2c 20 6f 62 6a 65 63 74 5b  cSelect, object[
4290: 5d 20 61 70 55 6e 6b 53 65 6c 65 63 74 2c 20 75  ] apUnkSelect, u
42a0: 69 6e 74 20 64 77 46 6c 61 67 73 29 0a 20 20 20  int dwFlags).   
42b0: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
42c0: 56 53 43 6f 6e 73 74 61 6e 74 73 2e 53 5f 4f 4b  VSConstants.S_OK
42d0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 65 6e  ;.    }..    #en
42e0: 64 72 65 67 69 6f 6e 0a 0a 20 20 20 20 23 72 65  dregion..    #re
42f0: 67 69 6f 6e 20 49 56 73 57 69 6e 64 6f 77 50 61  gion IVsWindowPa
4300: 6e 65 43 6f 6d 6d 69 74 20 4d 65 6d 62 65 72 73  neCommit Members
4310: 0a 0a 20 20 20 20 69 6e 74 20 49 56 73 57 69 6e  ..    int IVsWin
4320: 64 6f 77 50 61 6e 65 43 6f 6d 6d 69 74 2e 43 6f  dowPaneCommit.Co
4330: 6d 6d 69 74 50 65 6e 64 69 6e 67 45 64 69 74 28  mmitPendingEdit(
4340: 6f 75 74 20 69 6e 74 20 70 66 43 6f 6d 6d 69 74  out int pfCommit
4350: 46 61 69 6c 65 64 29 0a 20 20 20 20 7b 0a 20 20  Failed).    {.  
4360: 20 20 20 20 70 66 43 6f 6d 6d 69 74 46 61 69 6c      pfCommitFail
4370: 65 64 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 65  ed = 0;.      re
4380: 74 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74 73  turn VSConstants
4390: 2e 53 5f 4f 4b 3b 0a 20 20 20 20 7d 0a 0a 20 20  .S_OK;.    }..  
43a0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0a 0a 20 20    #endregion..  
43b0: 20 20 23 72 65 67 69 6f 6e 20 49 56 73 57 69 6e    #region IVsWin
43c0: 64 6f 77 46 72 61 6d 65 4e 6f 74 69 66 79 20 4d  dowFrameNotify M
43d0: 65 6d 62 65 72 73 0a 0a 20 20 20 20 69 6e 74 20  embers..    int 
43e0: 49 56 73 57 69 6e 64 6f 77 46 72 61 6d 65 4e 6f  IVsWindowFrameNo
43f0: 74 69 66 79 2e 4f 6e 44 6f 63 6b 61 62 6c 65 43  tify.OnDockableC
4400: 68 61 6e 67 65 28 69 6e 74 20 66 44 6f 63 6b 61  hange(int fDocka
4410: 62 6c 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  ble).    {.     
4420: 20 72 65 74 75 72 6e 20 56 53 43 6f 6e 73 74 61   return VSConsta
4430: 6e 74 73 2e 53 5f 4f 4b 3b 0a 20 20 20 20 7d 0a  nts.S_OK;.    }.
4440: 0a 20 20 20 20 69 6e 74 20 49 56 73 57 69 6e 64  .    int IVsWind
4450: 6f 77 46 72 61 6d 65 4e 6f 74 69 66 79 2e 4f 6e  owFrameNotify.On
4460: 4d 6f 76 65 28 29 0a 20 20 20 20 7b 0a 20 20 20  Move().    {.   
4470: 20 20 20 72 65 74 75 72 6e 20 56 53 43 6f 6e 73     return VSCons
4480: 74 61 6e 74 73 2e 53 5f 4f 4b 3b 0a 20 20 20 20  tants.S_OK;.    
4490: 7d 0a 0a 20 20 20 20 70 72 69 76 61 74 65 20 76  }..    private v
44a0: 6f 69 64 20 5f 74 69 6d 65 72 5f 54 69 63 6b 28  oid _timer_Tick(
44b0: 6f 62 6a 65 63 74 20 73 65 6e 64 65 72 2c 20 45  object sender, E
44c0: 76 65 6e 74 41 72 67 73 20 65 29 0a 20 20 20 20  ventArgs e).    
44d0: 7b 0a 20 20 20 20 20 20 5f 74 69 6d 65 72 2e 45  {.      _timer.E
44e0: 6e 61 62 6c 65 64 20 3d 20 66 61 6c 73 65 3b 0a  nabled = false;.
44f0: 20 20 20 20 20 20 69 66 20 28 5f 73 65 72 76 69        if (_servi
4500: 63 65 50 72 6f 76 69 64 65 72 20 21 3d 20 6e 75  ceProvider != nu
4510: 6c 6c 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20  ll).      {.    
4520: 20 20 20 20 45 6e 76 44 54 45 2e 44 54 45 20 64      EnvDTE.DTE d
4530: 74 65 20 3d 20 28 45 6e 76 44 54 45 2e 44 54 45  te = (EnvDTE.DTE
4540: 29 5f 73 65 72 76 69 63 65 50 72 6f 76 69 64 65  )_serviceProvide
4550: 72 2e 47 65 74 53 65 72 76 69 63 65 28 74 79 70  r.GetService(typ
4560: 65 6f 66 28 45 6e 76 44 54 45 2e 44 54 45 29 29  eof(EnvDTE.DTE))
4570: 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2f 53 68 6f  ;..        //Sho
4580: 77 20 74 6f 6f 6c 62 61 72 0a 20 20 20 20 20 20  w toolbar.      
4590: 20 20 69 66 20 28 64 74 65 20 21 3d 20 6e 75 6c    if (dte != nul
45a0: 6c 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20  l).        {.   
45b0: 20 20 20 20 20 20 20 4d 69 63 72 6f 73 6f 66 74         Microsoft
45c0: 2e 56 69 73 75 61 6c 53 74 75 64 69 6f 2e 43 6f  .VisualStudio.Co
45d0: 6d 6d 61 6e 64 42 61 72 73 2e 43 6f 6d 6d 61 6e  mmandBars.Comman
45e0: 64 42 61 72 73 20 63 6f 6d 6d 61 6e 64 42 61 72  dBars commandBar
45f0: 73 20 3d 20 28 4d 69 63 72 6f 73 6f 66 74 2e 56  s = (Microsoft.V
4600: 69 73 75 61 6c 53 74 75 64 69 6f 2e 43 6f 6d 6d  isualStudio.Comm
4610: 61 6e 64 42 61 72 73 2e 43 6f 6d 6d 61 6e 64 42  andBars.CommandB
4620: 61 72 73 29 64 74 65 2e 43 6f 6d 6d 61 6e 64 42  ars)dte.CommandB
4630: 61 72 73 3b 0a 20 20 20 20 20 20 20 20 20 20 4d  ars;.          M
4640: 69 63 72 6f 73 6f 66 74 2e 56 69 73 75 61 6c 53  icrosoft.VisualS
4650: 74 75 64 69 6f 2e 43 6f 6d 6d 61 6e 64 42 61 72  tudio.CommandBar
4660: 73 2e 43 6f 6d 6d 61 6e 64 42 61 72 20 62 61 72  s.CommandBar bar
4670: 20 3d 20 63 6f 6d 6d 61 6e 64 42 61 72 73 5b 22   = commandBars["
4680: 54 61 62 6c 65 20 44 65 73 69 67 6e 65 72 22 5d  Table Designer"]
4690: 3b 0a 20 20 20 20 20 20 20 20 20 20 62 61 72 2e  ;.          bar.
46a0: 56 69 73 69 62 6c 65 20 3d 20 74 72 75 65 3b 0a  Visible = true;.
46b0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
46c0: 7d 0a 0a 20 20 20 20 20 20 69 66 20 28 5f 77 61  }..      if (_wa
46d0: 72 6e 65 64 20 3d 3d 20 66 61 6c 73 65 29 0a 20  rned == false). 
46e0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 5f       {.        _
46f0: 77 61 72 6e 65 64 20 3d 20 74 72 75 65 3b 0a 20  warned = true;. 
4700: 20 20 20 20 20 20 20 69 66 20 28 5f 74 61 62 6c         if (_tabl
4710: 65 2e 48 61 73 43 68 65 63 6b 20 3d 3d 20 74 72  e.HasCheck == tr
4720: 75 65 29 0a 20 20 20 20 20 20 20 20 20 20 4d 65  ue).          Me
4730: 73 73 61 67 65 42 6f 78 2e 53 68 6f 77 28 74 68  ssageBox.Show(th
4740: 69 73 2c 20 22 54 68 69 73 20 74 61 62 6c 65 20  is, "This table 
4750: 68 61 73 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  has CHECK constr
4760: 61 69 6e 74 73 20 74 68 61 74 20 63 6f 75 6c 64  aints that could
4770: 20 6e 6f 74 20 62 65 20 70 61 72 73 65 64 2e 20   not be parsed. 
4780: 20 42 65 66 6f 72 65 20 6d 61 6b 69 6e 67 20 61   Before making a
4790: 6e 79 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68  ny changes to th
47a0: 69 73 20 74 61 62 6c 65 2c 20 6d 61 6b 65 20 73  is table, make s
47b0: 75 72 65 20 79 6f 75 20 6e 6f 74 65 20 74 68 65  ure you note the
47c0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 69 6e 20   constraints in 
47d0: 74 68 65 20 53 51 4c 20 77 69 6e 64 6f 77 20 66  the SQL window f
47e0: 69 72 73 74 22 2c 20 22 50 61 72 73 65 72 20 45  irst", "Parser E
47f0: 72 72 6f 72 22 29 3b 0a 20 20 20 20 20 20 7d 0a  rror");.      }.
4800: 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20 49      }..    int I
4810: 56 73 57 69 6e 64 6f 77 46 72 61 6d 65 4e 6f 74  VsWindowFrameNot
4820: 69 66 79 2e 4f 6e 53 68 6f 77 28 69 6e 74 20 66  ify.OnShow(int f
4830: 53 68 6f 77 29 0a 20 20 20 20 7b 0a 20 20 20 20  Show).    {.    
4840: 20 20 73 77 69 74 63 68 20 28 28 5f 5f 46 52 41    switch ((__FRA
4850: 4d 45 53 48 4f 57 29 66 53 68 6f 77 29 0a 20 20  MESHOW)fShow).  
4860: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 63 61      {.        ca
4870: 73 65 20 5f 5f 46 52 41 4d 45 53 48 4f 57 2e 46  se __FRAMESHOW.F
4880: 52 41 4d 45 53 48 4f 57 5f 57 69 6e 53 68 6f 77  RAMESHOW_WinShow
4890: 6e 3a 0a 20 20 20 20 20 20 20 20 20 20 53 65 74  n:.          Set
48a0: 50 72 6f 70 65 72 74 79 57 69 6e 64 6f 77 28 29  PropertyWindow()
48b0: 3b 0a 20 20 20 20 20 20 20 20 20 20 5f 74 69 6d  ;.          _tim
48c0: 65 72 2e 45 6e 61 62 6c 65 64 20 3d 20 74 72 75  er.Enabled = tru
48d0: 65 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  e;.          bre
48e0: 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65  ak;.        case
48f0: 20 5f 5f 46 52 41 4d 45 53 48 4f 57 2e 46 52 41   __FRAMESHOW.FRA
4900: 4d 45 53 48 4f 57 5f 57 69 6e 48 69 64 64 65 6e  MESHOW_WinHidden
4910: 3a 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  :.          brea
4920: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
4930: 20 72 65 74 75 72 6e 20 56 53 43 6f 6e 73 74 61   return VSConsta
4940: 6e 74 73 2e 53 5f 4f 4b 3b 0a 20 20 20 20 7d 0a  nts.S_OK;.    }.
4950: 0a 20 20 20 20 69 6e 74 20 49 56 73 57 69 6e 64  .    int IVsWind
4960: 6f 77 46 72 61 6d 65 4e 6f 74 69 66 79 2e 4f 6e  owFrameNotify.On
4970: 53 69 7a 65 28 29 0a 20 20 20 20 7b 0a 20 20 20  Size().    {.   
4980: 20 20 20 72 65 74 75 72 6e 20 56 53 43 6f 6e 73     return VSCons
4990: 74 61 6e 74 73 2e 53 5f 4f 4b 3b 0a 20 20 20 20  tants.S_OK;.    
49a0: 7d 0a 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f  }..    #endregio
49b0: 6e 0a 0a 20 20 20 20 70 72 69 76 61 74 65 20 76  n..    private v
49c0: 6f 69 64 20 5f 64 61 74 61 47 72 69 64 5f 43 65  oid _dataGrid_Ce
49d0: 6c 6c 45 6e 74 65 72 28 6f 62 6a 65 63 74 20 73  llEnter(object s
49e0: 65 6e 64 65 72 2c 20 44 61 74 61 47 72 69 64 56  ender, DataGridV
49f0: 69 65 77 43 65 6c 6c 45 76 65 6e 74 41 72 67 73  iewCellEventArgs
4a00: 20 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20   e).    {.      
4a10: 69 66 20 28 65 2e 43 6f 6c 75 6d 6e 49 6e 64 65  if (e.ColumnInde
4a20: 78 20 3e 20 2d 31 29 0a 20 20 20 20 20 20 7b 0a  x > -1).      {.
4a30: 20 20 20 20 20 20 20 20 5f 64 61 74 61 47 72 69          _dataGri
4a40: 64 2e 42 65 67 69 6e 45 64 69 74 28 74 72 75 65  d.BeginEdit(true
4a50: 29 3b 0a 20 20 20 20 20 20 20 20 5f 64 61 74 61  );.        _data
4a60: 47 72 69 64 5f 53 65 6c 65 63 74 69 6f 6e 43 68  Grid_SelectionCh
4a70: 61 6e 67 65 64 28 73 65 6e 64 65 72 2c 20 65 29  anged(sender, e)
4a80: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
4a90: 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69  .    private voi
4aa0: 64 20 5f 64 61 74 61 47 72 69 64 5f 52 6f 77 48  d _dataGrid_RowH
4ab0: 65 61 64 65 72 4d 6f 75 73 65 43 6c 69 63 6b 28  eaderMouseClick(
4ac0: 6f 62 6a 65 63 74 20 73 65 6e 64 65 72 2c 20 44  object sender, D
4ad0: 61 74 61 47 72 69 64 56 69 65 77 43 65 6c 6c 4d  ataGridViewCellM
4ae0: 6f 75 73 65 45 76 65 6e 74 41 72 67 73 20 65 29  ouseEventArgs e)
4af0: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 5f 64 61  .    {.      _da
4b00: 74 61 47 72 69 64 2e 45 6e 64 45 64 69 74 28 29  taGrid.EndEdit()
4b10: 3b 0a 20 20 20 20 20 20 69 66 20 28 65 2e 42 75  ;.      if (e.Bu
4b20: 74 74 6f 6e 20 3d 3d 20 4d 6f 75 73 65 42 75 74  tton == MouseBut
4b30: 74 6f 6e 73 2e 52 69 67 68 74 29 0a 20 20 20 20  tons.Right).    
4b40: 20 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28    {.        if (
4b50: 5f 64 61 74 61 47 72 69 64 2e 52 6f 77 73 5b 65  _dataGrid.Rows[e
4b60: 2e 52 6f 77 49 6e 64 65 78 5d 2e 53 65 6c 65 63  .RowIndex].Selec
4b70: 74 65 64 20 3d 3d 20 66 61 6c 73 65 29 0a 20 20  ted == false).  
4b80: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
4b90: 20 20 73 77 69 74 63 68 20 28 43 6f 6e 74 72 6f    switch (Contro
4ba0: 6c 2e 4d 6f 64 69 66 69 65 72 4b 65 79 73 29 0a  l.ModifierKeys).
4bb0: 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20            {.    
4bc0: 20 20 20 20 20 20 20 20 63 61 73 65 20 4b 65 79          case Key
4bd0: 73 2e 43 6f 6e 74 72 6f 6c 3a 0a 20 20 20 20 20  s.Control:.     
4be0: 20 20 20 20 20 20 20 20 20 5f 64 61 74 61 47 72           _dataGr
4bf0: 69 64 2e 52 6f 77 73 5b 65 2e 52 6f 77 49 6e 64  id.Rows[e.RowInd
4c00: 65 78 5d 2e 53 65 6c 65 63 74 65 64 20 3d 20 74  ex].Selected = t
4c10: 72 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20  rue;.           
4c20: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
4c30: 20 20 20 20 20 20 63 61 73 65 20 4b 65 79 73 2e        case Keys.
4c40: 53 68 69 66 74 3a 0a 20 20 20 20 20 20 20 20 20  Shift:.         
4c50: 20 20 20 20 20 69 6e 74 20 6d 69 6e 20 3d 20 4d       int min = M
4c60: 61 74 68 2e 4d 69 6e 28 5f 64 61 74 61 47 72 69  ath.Min(_dataGri
4c70: 64 2e 43 75 72 72 65 6e 74 52 6f 77 2e 49 6e 64  d.CurrentRow.Ind
4c80: 65 78 2c 20 65 2e 52 6f 77 49 6e 64 65 78 29 3b  ex, e.RowIndex);
4c90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
4ca0: 6e 74 20 6d 61 78 20 3d 20 4d 61 74 68 2e 4d 61  nt max = Math.Ma
4cb0: 78 28 5f 64 61 74 61 47 72 69 64 2e 43 75 72 72  x(_dataGrid.Curr
4cc0: 65 6e 74 52 6f 77 2e 49 6e 64 65 78 2c 20 65 2e  entRow.Index, e.
4cd0: 52 6f 77 49 6e 64 65 78 29 3b 0a 20 20 20 20 20  RowIndex);.     
4ce0: 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e           for (in
4cf0: 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 5f 64 61  t n = 0; n < _da
4d00: 74 61 47 72 69 64 2e 52 6f 77 73 2e 43 6f 75 6e  taGrid.Rows.Coun
4d10: 74 3b 20 6e 2b 2b 29 0a 20 20 20 20 20 20 20 20  t; n++).        
4d20: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
4d30: 20 20 20 20 20 20 20 20 5f 64 61 74 61 47 72 69          _dataGri
4d40: 64 2e 52 6f 77 73 5b 6e 5d 2e 53 65 6c 65 63 74  d.Rows[n].Select
4d50: 65 64 20 3d 20 28 5f 64 61 74 61 47 72 69 64 2e  ed = (_dataGrid.
4d60: 52 6f 77 73 5b 6e 5d 2e 49 6e 64 65 78 20 3c 3d  Rows[n].Index <=
4d70: 20 6d 69 6e 20 7c 7c 20 5f 64 61 74 61 47 72 69   min || _dataGri
4d80: 64 2e 52 6f 77 73 5b 6e 5d 2e 49 6e 64 65 78 20  d.Rows[n].Index 
4d90: 3c 3d 20 6d 61 78 29 3b 0a 20 20 20 20 20 20 20  <= max);.       
4da0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
4db0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
4dc0: 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c            defaul
4dd0: 74 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t:.             
4de0: 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b   for (int n = 0;
4df0: 20 6e 20 3c 20 5f 64 61 74 61 47 72 69 64 2e 52   n < _dataGrid.R
4e00: 6f 77 73 2e 43 6f 75 6e 74 3b 20 6e 2b 2b 29 0a  ows.Count; n++).
4e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a                {.
4e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e30: 5f 64 61 74 61 47 72 69 64 2e 52 6f 77 73 5b 6e  _dataGrid.Rows[n
4e40: 5d 2e 53 65 6c 65 63 74 65 64 20 3d 20 28 65 2e  ].Selected = (e.
4e50: 52 6f 77 49 6e 64 65 78 20 3d 3d 20 6e 29 3b 0a  RowIndex == n);.
4e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
4e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
4e80: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  eak;.          }
4e90: 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  .        }..    
4ea0: 20 20 20 20 49 56 73 55 49 53 68 65 6c 6c 20 73      IVsUIShell s
4eb0: 68 65 6c 6c 20 3d 20 5f 73 65 72 76 69 63 65 50  hell = _serviceP
4ec0: 72 6f 76 69 64 65 72 2e 47 65 74 53 65 72 76 69  rovider.GetServi
4ed0: 63 65 28 74 79 70 65 6f 66 28 49 56 73 55 49 53  ce(typeof(IVsUIS
4ee0: 68 65 6c 6c 29 29 20 61 73 20 49 56 73 55 49 53  hell)) as IVsUIS
4ef0: 68 65 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66  hell;.        if
4f00: 20 28 73 68 65 6c 6c 20 21 3d 20 6e 75 6c 6c 29   (shell != null)
4f10: 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20  .        {.     
4f20: 20 20 20 20 20 47 75 69 64 20 67 75 69 64 3b 0a       Guid guid;.
4f30: 20 20 20 20 20 20 20 20 20 20 50 4f 49 4e 54 53            POINTS
4f40: 5b 5d 20 70 20 3d 20 6e 65 77 20 50 4f 49 4e 54  [] p = new POINT
4f50: 53 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20 20 20  S[1];.          
4f60: 69 6e 74 20 72 65 74 3b 0a 0a 20 20 20 20 20 20  int ret;..      
4f70: 20 20 20 20 70 5b 30 5d 2e 78 20 3d 20 28 73 68      p[0].x = (sh
4f80: 6f 72 74 29 43 6f 6e 74 72 6f 6c 2e 4d 6f 75 73  ort)Control.Mous
4f90: 65 50 6f 73 69 74 69 6f 6e 2e 58 3b 0a 20 20 20  ePosition.X;.   
4fa0: 20 20 20 20 20 20 20 70 5b 30 5d 2e 79 20 3d 20         p[0].y = 
4fb0: 28 73 68 6f 72 74 29 43 6f 6e 74 72 6f 6c 2e 4d  (short)Control.M
4fc0: 6f 75 73 65 50 6f 73 69 74 69 6f 6e 2e 59 3b 0a  ousePosition.Y;.
4fd0: 0a 20 20 20 20 20 20 20 20 20 20 67 75 69 64 20  .          guid 
4fe0: 3d 20 6e 65 77 20 47 75 69 64 28 22 37 33 32 61  = new Guid("732a
4ff0: 62 65 37 34 2d 63 64 38 30 2d 31 31 64 30 2d 61  be74-cd80-11d0-a
5000: 32 64 62 2d 30 30 61 61 30 30 61 33 65 66 66 66  2db-00aa00a3efff
5010: 22 29 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 72  ");..          r
5020: 65 74 20 3d 20 73 68 65 6c 6c 2e 53 68 6f 77 43  et = shell.ShowC
5030: 6f 6e 74 65 78 74 4d 65 6e 75 28 30 2c 20 72 65  ontextMenu(0, re
5040: 66 20 67 75 69 64 2c 20 32 35 39 2c 20 70 2c 20  f guid, 259, p, 
5050: 74 68 69 73 29 3b 0a 20 20 20 20 20 20 20 20 7d  this);.        }
5060: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a  .      }.    }..
5070: 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64      private void
5080: 20 5f 64 61 74 61 47 72 69 64 5f 43 65 6c 6c 43   _dataGrid_CellC
5090: 6c 69 63 6b 28 6f 62 6a 65 63 74 20 73 65 6e 64  lick(object send
50a0: 65 72 2c 20 44 61 74 61 47 72 69 64 56 69 65 77  er, DataGridView
50b0: 43 65 6c 6c 45 76 65 6e 74 41 72 67 73 20 65 29  CellEventArgs e)
50c0: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 69 66 20  .    {.      if 
50d0: 28 5f 69 6e 69 74 20 3d 3d 20 74 72 75 65 29 20  (_init == true) 
50e0: 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 69 66  return;.      if
50f0: 20 28 65 2e 43 6f 6c 75 6d 6e 49 6e 64 65 78 20   (e.ColumnIndex 
5100: 3d 3d 20 2d 31 20 26 26 20 65 2e 52 6f 77 49 6e  == -1 && e.RowIn
5110: 64 65 78 20 3d 3d 20 2d 31 29 0a 20 20 20 20 20  dex == -1).     
5120: 20 7b 0a 20 20 20 20 20 20 20 20 5f 64 61 74 61   {.        _data
5130: 47 72 69 64 2e 45 6e 64 45 64 69 74 28 29 3b 0a  Grid.EndEdit();.
5140: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 5f 64        }.      _d
5150: 61 74 61 47 72 69 64 5f 53 65 6c 65 63 74 69 6f  ataGrid_Selectio
5160: 6e 43 68 61 6e 67 65 64 28 73 65 6e 64 65 72 2c  nChanged(sender,
5170: 20 65 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20   e);.    }..    
5180: 70 72 69 76 61 74 65 20 76 6f 69 64 20 5f 64 61  private void _da
5190: 74 61 47 72 69 64 5f 43 65 6c 6c 50 61 69 6e 74  taGrid_CellPaint
51a0: 69 6e 67 28 6f 62 6a 65 63 74 20 73 65 6e 64 65  ing(object sende
51b0: 72 2c 20 44 61 74 61 47 72 69 64 56 69 65 77 43  r, DataGridViewC
51c0: 65 6c 6c 50 61 69 6e 74 69 6e 67 45 76 65 6e 74  ellPaintingEvent
51d0: 41 72 67 73 20 65 29 0a 20 20 20 20 7b 0a 20 20  Args e).    {.  
51e0: 20 20 20 20 69 66 20 28 5f 69 6e 69 74 20 3d 3d      if (_init ==
51f0: 20 74 72 75 65 29 20 72 65 74 75 72 6e 3b 0a 20   true) return;. 
5200: 20 20 20 20 20 69 66 20 28 65 2e 43 6f 6c 75 6d       if (e.Colum
5210: 6e 49 6e 64 65 78 20 3e 20 2d 31 20 7c 7c 20 65  nIndex > -1 || e
5220: 2e 52 6f 77 49 6e 64 65 78 20 3c 20 30 29 20 72  .RowIndex < 0) r
5230: 65 74 75 72 6e 3b 0a 0a 20 20 20 20 20 20 43 6f  eturn;..      Co
5240: 6c 75 6d 6e 20 63 6f 6c 20 3d 20 5f 64 61 74 61  lumn col = _data
5250: 47 72 69 64 2e 52 6f 77 73 5b 65 2e 52 6f 77 49  Grid.Rows[e.RowI
5260: 6e 64 65 78 5d 2e 54 61 67 20 61 73 20 43 6f 6c  ndex].Tag as Col
5270: 75 6d 6e 3b 0a 0a 20 20 20 20 20 20 69 66 20 28  umn;..      if (
5280: 63 6f 6c 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74  col == null) ret
5290: 75 72 6e 3b 0a 0a 20 20 20 20 20 20 62 6f 6f 6c  urn;..      bool
52a0: 20 69 73 70 6b 20 3d 20 66 61 6c 73 65 3b 0a 20   ispk = false;. 
52b0: 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 49 6e       foreach (In
52c0: 64 65 78 43 6f 6c 75 6d 6e 20 69 63 20 69 6e 20  dexColumn ic in 
52d0: 5f 74 61 62 6c 65 2e 50 72 69 6d 61 72 79 4b 65  _table.PrimaryKe
52e0: 79 2e 43 6f 6c 75 6d 6e 73 29 0a 20 20 20 20 20  y.Columns).     
52f0: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 53   {.        if (S
5300: 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 69 63  tring.Compare(ic
5310: 2e 43 6f 6c 75 6d 6e 2c 20 63 6f 6c 2e 43 6f 6c  .Column, col.Col
5320: 75 6d 6e 4e 61 6d 65 2c 20 53 74 72 69 6e 67 43  umnName, StringC
5330: 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61  omparison.Ordina
5340: 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20  lIgnoreCase) == 
5350: 30 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20  0).        {.   
5360: 20 20 20 20 20 20 20 69 73 70 6b 20 3d 20 74 72         ispk = tr
5370: 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72  ue;.          br
5380: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  eak;.        }. 
5390: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 20       }.      if 
53a0: 28 69 73 70 6b 20 3d 3d 20 74 72 75 65 29 0a 20  (ispk == true). 
53b0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 65       {.        e
53c0: 2e 50 61 69 6e 74 28 65 2e 43 6c 69 70 42 6f 75  .Paint(e.ClipBou
53d0: 6e 64 73 2c 20 44 61 74 61 47 72 69 64 56 69 65  nds, DataGridVie
53e0: 77 50 61 69 6e 74 50 61 72 74 73 2e 41 6c 6c 29  wPaintParts.All)
53f0: 3b 0a 20 20 20 20 20 20 20 20 5f 69 6d 61 67 65  ;.        _image
5400: 4c 69 73 74 2e 44 72 61 77 28 65 2e 47 72 61 70  List.Draw(e.Grap
5410: 68 69 63 73 2c 20 65 2e 43 65 6c 6c 42 6f 75 6e  hics, e.CellBoun
5420: 64 73 2e 4c 65 66 74 2c 20 65 2e 43 65 6c 6c 42  ds.Left, e.CellB
5430: 6f 75 6e 64 73 2e 54 6f 70 20 2b 20 28 28 65 2e  ounds.Top + ((e.
5440: 43 65 6c 6c 42 6f 75 6e 64 73 2e 42 6f 74 74 6f  CellBounds.Botto
5450: 6d 20 2d 20 65 2e 43 65 6c 6c 42 6f 75 6e 64 73  m - e.CellBounds
5460: 2e 54 6f 70 29 20 2d 20 5f 69 6d 61 67 65 4c 69  .Top) - _imageLi
5470: 73 74 2e 49 6d 61 67 65 53 69 7a 65 2e 48 65 69  st.ImageSize.Hei
5480: 67 68 74 29 20 2f 20 32 2c 20 30 29 3b 0a 20 20  ght) / 2, 0);.  
5490: 20 20 20 20 20 20 65 2e 48 61 6e 64 6c 65 64 20        e.Handled 
54a0: 3d 20 74 72 75 65 3b 0a 20 20 20 20 20 20 7d 0a  = true;.      }.
54b0: 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 69 76 61      }..    priva
54c0: 74 65 20 76 6f 69 64 20 5f 64 61 74 61 47 72 69  te void _dataGri
54d0: 64 5f 53 65 6c 65 63 74 69 6f 6e 43 68 61 6e 67  d_SelectionChang
54e0: 65 64 28 6f 62 6a 65 63 74 20 73 65 6e 64 65 72  ed(object sender
54f0: 2c 20 45 76 65 6e 74 41 72 67 73 20 65 29 0a 20  , EventArgs e). 
5500: 20 20 20 7b 0a 20 20 20 20 20 20 69 66 20 28 5f     {.      if (_
5510: 69 6e 69 74 20 3d 3d 20 74 72 75 65 29 20 72 65  init == true) re
5520: 74 75 72 6e 3b 0a 20 20 20 20 20 20 4c 69 73 74  turn;.      List
5530: 3c 6f 62 6a 65 63 74 3e 20 69 74 65 6d 73 20 3d  <object> items =
5540: 20 6e 65 77 20 4c 69 73 74 3c 6f 62 6a 65 63 74   new List<object
5550: 3e 28 29 3b 0a 0a 20 20 20 20 20 20 66 6f 72 20  >();..      for 
5560: 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20  (int n = 0; n < 
5570: 5f 64 61 74 61 47 72 69 64 2e 52 6f 77 73 2e 43  _dataGrid.Rows.C
5580: 6f 75 6e 74 3b 20 6e 2b 2b 29 0a 20 20 20 20 20  ount; n++).     
5590: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f   {.        if (_
55a0: 64 61 74 61 47 72 69 64 2e 52 6f 77 73 5b 6e 5d  dataGrid.Rows[n]
55b0: 2e 53 65 6c 65 63 74 65 64 20 7c 7c 20 28 5f 64  .Selected || (_d
55c0: 61 74 61 47 72 69 64 2e 43 75 72 72 65 6e 74 43  ataGrid.CurrentC
55d0: 65 6c 6c 2e 52 6f 77 49 6e 64 65 78 20 3d 3d 20  ell.RowIndex == 
55e0: 6e 20 26 26 20 5f 64 61 74 61 47 72 69 64 2e 49  n && _dataGrid.I
55f0: 73 43 75 72 72 65 6e 74 43 65 6c 6c 49 6e 45 64  sCurrentCellInEd
5600: 69 74 4d 6f 64 65 20 3d 3d 20 74 72 75 65 29 29  itMode == true))
5610: 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20  .        {.     
5620: 20 20 20 20 20 69 66 20 28 5f 64 61 74 61 47 72       if (_dataGr
5630: 69 64 2e 52 6f 77 73 5b 6e 5d 2e 54 61 67 20 21  id.Rows[n].Tag !
5640: 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20  = null).        
5650: 20 20 20 20 69 74 65 6d 73 2e 41 64 64 28 5f 64      items.Add(_d
5660: 61 74 61 47 72 69 64 2e 52 6f 77 73 5b 6e 5d 2e  ataGrid.Rows[n].
5670: 54 61 67 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  Tag);.        }.
5680: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 6f        }..      o
5690: 62 6a 65 63 74 5b 5d 20 6f 62 6a 73 20 3d 20 6e  bject[] objs = n
56a0: 65 77 20 6f 62 6a 65 63 74 5b 69 74 65 6d 73 2e  ew object[items.
56b0: 43 6f 75 6e 74 5d 3b 0a 20 20 20 20 20 20 69 74  Count];.      it
56c0: 65 6d 73 2e 43 6f 70 79 54 6f 28 6f 62 6a 73 29  ems.CopyTo(objs)
56d0: 3b 0a 0a 20 20 20 20 20 20 5f 70 72 6f 70 65 72  ;..      _proper
56e0: 74 79 47 72 69 64 2e 53 65 6c 65 63 74 65 64 4f  tyGrid.SelectedO
56f0: 62 6a 65 63 74 73 20 3d 20 6f 62 6a 73 3b 0a 0a  bjects = objs;..
5700: 20 20 20 20 20 20 49 56 73 55 49 53 68 65 6c 6c        IVsUIShell
5710: 20 73 68 65 6c 6c 20 3d 20 5f 73 65 72 76 69 63   shell = _servic
5720: 65 50 72 6f 76 69 64 65 72 2e 47 65 74 53 65 72  eProvider.GetSer
5730: 76 69 63 65 28 74 79 70 65 6f 66 28 49 56 73 55  vice(typeof(IVsU
5740: 49 53 68 65 6c 6c 29 29 20 61 73 20 49 56 73 55  IShell)) as IVsU
5750: 49 53 68 65 6c 6c 3b 0a 20 20 20 20 20 20 69 66  IShell;.      if
5760: 20 28 73 68 65 6c 6c 20 21 3d 20 6e 75 6c 6c 29   (shell != null)
5770: 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  .      {.       
5780: 20 73 68 65 6c 6c 2e 55 70 64 61 74 65 43 6f 6d   shell.UpdateCom
5790: 6d 61 6e 64 55 49 28 30 29 3b 0a 20 20 20 20 20  mandUI(0);.     
57a0: 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72   }.    }..    pr
57b0: 69 76 61 74 65 20 76 6f 69 64 20 5f 64 61 74 61  ivate void _data
57c0: 47 72 69 64 5f 43 65 6c 6c 56 61 6c 75 65 43 68  Grid_CellValueCh
57d0: 61 6e 67 65 64 28 6f 62 6a 65 63 74 20 73 65 6e  anged(object sen
57e0: 64 65 72 2c 20 44 61 74 61 47 72 69 64 56 69 65  der, DataGridVie
57f0: 77 43 65 6c 6c 45 76 65 6e 74 41 72 67 73 20 65  wCellEventArgs e
5800: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 69 66  ).    {.      if
5810: 20 28 5f 69 6e 69 74 20 3d 3d 20 74 72 75 65 29   (_init == true)
5820: 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 69   return;.      i
5830: 66 20 28 65 2e 52 6f 77 49 6e 64 65 78 20 3e 20  f (e.RowIndex > 
5840: 2d 31 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20  -1).      {.    
5850: 20 20 20 20 4d 61 6b 65 44 69 72 74 79 28 29 3b      MakeDirty();
5860: 0a 20 20 20 20 20 20 20 20 5f 70 72 6f 70 65 72  .        _proper
5870: 74 79 47 72 69 64 2e 53 65 6c 65 63 74 65 64 4f  tyGrid.SelectedO
5880: 62 6a 65 63 74 73 20 3d 20 5f 70 72 6f 70 65 72  bjects = _proper
5890: 74 79 47 72 69 64 2e 53 65 6c 65 63 74 65 64 4f  tyGrid.SelectedO
58a0: 62 6a 65 63 74 73 3b 0a 20 20 20 20 20 20 7d 0a  bjects;.      }.
58b0: 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 69 76 61      }..    priva
58c0: 74 65 20 76 6f 69 64 20 5f 64 61 74 61 47 72 69  te void _dataGri
58d0: 64 5f 55 73 65 72 44 65 6c 65 74 65 64 52 6f 77  d_UserDeletedRow
58e0: 28 6f 62 6a 65 63 74 20 73 65 6e 64 65 72 2c 20  (object sender, 
58f0: 44 61 74 61 47 72 69 64 56 69 65 77 52 6f 77 45  DataGridViewRowE
5900: 76 65 6e 74 41 72 67 73 20 65 29 0a 20 20 20 20  ventArgs e).    
5910: 7b 0a 20 20 20 20 20 20 69 66 20 28 5f 69 6e 69  {.      if (_ini
5920: 74 20 3d 3d 20 74 72 75 65 29 20 72 65 74 75 72  t == true) retur
5930: 6e 3b 0a 20 20 20 20 20 20 5f 64 61 74 61 47 72  n;.      _dataGr
5940: 69 64 5f 53 65 6c 65 63 74 69 6f 6e 43 68 61 6e  id_SelectionChan
5950: 67 65 64 28 73 65 6e 64 65 72 2c 20 65 29 3b 0a  ged(sender, e);.
5960: 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 69 76 61      }..    priva
5970: 74 65 20 76 6f 69 64 20 5f 64 61 74 61 47 72 69  te void _dataGri
5980: 64 5f 52 6f 77 73 41 64 64 65 64 28 6f 62 6a 65  d_RowsAdded(obje
5990: 63 74 20 73 65 6e 64 65 72 2c 20 44 61 74 61 47  ct sender, DataG
59a0: 72 69 64 56 69 65 77 52 6f 77 73 41 64 64 65 64  ridViewRowsAdded
59b0: 45 76 65 6e 74 41 72 67 73 20 65 29 0a 20 20 20  EventArgs e).   
59c0: 20 7b 0a 20 20 20 20 20 20 69 66 20 28 5f 69 6e   {.      if (_in
59d0: 69 74 20 3d 3d 20 74 72 75 65 29 20 72 65 74 75  it == true) retu
59e0: 72 6e 3b 0a 20 20 20 20 20 20 4d 61 6b 65 44 69  rn;.      MakeDi
59f0: 72 74 79 28 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  rty();.    }..  
5a00: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 5f    private void _
5a10: 64 61 74 61 47 72 69 64 5f 52 6f 77 73 52 65 6d  dataGrid_RowsRem
5a20: 6f 76 65 64 28 6f 62 6a 65 63 74 20 73 65 6e 64  oved(object send
5a30: 65 72 2c 20 44 61 74 61 47 72 69 64 56 69 65 77  er, DataGridView
5a40: 52 6f 77 73 52 65 6d 6f 76 65 64 45 76 65 6e 74  RowsRemovedEvent
5a50: 41 72 67 73 20 65 29 0a 20 20 20 20 7b 0a 20 20  Args e).    {.  
5a60: 20 20 20 20 69 66 20 28 5f 69 6e 69 74 20 3d 3d      if (_init ==
5a70: 20 74 72 75 65 29 20 72 65 74 75 72 6e 3b 0a 20   true) return;. 
5a80: 20 20 20 20 20 4d 61 6b 65 44 69 72 74 79 28 29       MakeDirty()
5a90: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 69  ;.    }..    pri
5aa0: 76 61 74 65 20 76 6f 69 64 20 54 61 62 6c 65 44  vate void TableD
5ab0: 65 73 69 67 6e 65 72 44 6f 63 5f 56 69 73 69 62  esignerDoc_Visib
5ac0: 6c 65 43 68 61 6e 67 65 64 28 6f 62 6a 65 63 74  leChanged(object
5ad0: 20 73 65 6e 64 65 72 2c 20 45 76 65 6e 74 41 72   sender, EventAr
5ae0: 67 73 20 65 29 0a 20 20 20 20 7b 0a 20 20 20 20  gs e).    {.    
5af0: 7d 0a 20 20 7d 0a 0a 20 20 69 6e 74 65 72 6e 61  }.  }..  interna
5b00: 6c 20 63 6c 61 73 73 20 49 6e 64 65 78 48 6f 6c  l class IndexHol
5b10: 64 65 72 0a 20 20 7b 0a 20 20 20 20 70 72 69 76  der.  {.    priv
5b20: 61 74 65 20 4c 69 73 74 3c 49 6e 64 65 78 3e 20  ate List<Index> 
5b30: 5f 69 6e 64 65 78 65 73 3b 0a 20 20 20 20 70 72  _indexes;.    pr
5b40: 69 76 61 74 65 20 4c 69 73 74 3c 46 6f 72 65 69  ivate List<Forei
5b50: 67 6e 4b 65 79 3e 20 5f 66 6b 65 79 73 3b 0a 0a  gnKey> _fkeys;..
5b60: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 49 6e 64      internal Ind
5b70: 65 78 48 6f 6c 64 65 72 28 4c 69 73 74 3c 49 6e  exHolder(List<In
5b80: 64 65 78 3e 20 69 64 78 2c 20 4c 69 73 74 3c 46  dex> idx, List<F
5b90: 6f 72 65 69 67 6e 4b 65 79 3e 20 66 6b 29 0a 20  oreignKey> fk). 
5ba0: 20 20 20 7b 0a 20 20 20 20 20 20 5f 69 6e 64 65     {.      _inde
5bb0: 78 65 73 20 3d 20 69 64 78 3b 0a 20 20 20 20 20  xes = idx;.     
5bc0: 20 5f 66 6b 65 79 73 20 3d 20 66 6b 3b 0a 20 20   _fkeys = fk;.  
5bd0: 20 20 7d 0a 0a 20 20 20 20 70 75 62 6c 69 63 20    }..    public 
5be0: 4c 69 73 74 3c 49 6e 64 65 78 3e 20 49 6e 64 65  List<Index> Inde
5bf0: 78 65 73 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  xes.    {.      
5c00: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 69 6e  get { return _in
5c10: 64 65 78 65 73 3b 20 7d 0a 20 20 20 20 7d 0a 0a  dexes; }.    }..
5c20: 20 20 20 20 70 75 62 6c 69 63 20 4c 69 73 74 3c      public List<
5c30: 46 6f 72 65 69 67 6e 4b 65 79 3e 20 46 6f 72 65  ForeignKey> Fore
5c40: 69 67 6e 4b 65 79 73 0a 20 20 20 20 7b 0a 20 20  ignKeys.    {.  
5c50: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
5c60: 20 5f 66 6b 65 79 73 3b 20 7d 0a 20 20 20 20 7d   _fkeys; }.    }
5c70: 0a 20 20 7d 0a 0a 20 20 70 75 62 6c 69 63 20 63  .  }..  public c
5c80: 6c 61 73 73 20 44 65 73 69 67 6e 65 72 44 6f 63  lass DesignerDoc
5c90: 42 61 73 65 20 3a 20 55 73 65 72 43 6f 6e 74 72  Base : UserContr
5ca0: 6f 6c 0a 20 20 7b 0a 20 20 20 20 70 75 62 6c 69  ol.  {.    publi
5cb0: 63 20 76 69 72 74 75 61 6c 20 73 74 72 69 6e 67  c virtual string
5cc0: 20 43 61 6e 6f 6e 69 63 61 6c 4e 61 6d 65 0a 20   CanonicalName. 
5cd0: 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74 0a 20     {.      get. 
5ce0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 72       {.        r
5cf0: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0a 20 20 20 20  eturn null;.    
5d00: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20    }.    }.  }.. 
5d10: 20 69 6e 74 65 72 6e 61 6c 20 63 6c 61 73 73 20   internal class 
5d20: 46 61 6b 65 48 69 65 72 61 72 63 68 79 20 3a 20  FakeHierarchy : 
5d30: 49 56 73 55 49 48 69 65 72 61 72 63 68 79 2c 20  IVsUIHierarchy, 
5d40: 49 56 73 50 65 72 73 69 73 74 48 69 65 72 61 72  IVsPersistHierar
5d50: 63 68 79 49 74 65 6d 32 0a 20 20 7b 0a 20 20 20  chyItem2.  {.   
5d60: 20 44 65 73 69 67 6e 65 72 44 6f 63 42 61 73 65   DesignerDocBase
5d70: 20 5f 63 6f 6e 74 72 6f 6c 3b 0a 20 20 20 20 49   _control;.    I
5d80: 56 73 55 49 48 69 65 72 61 72 63 68 79 20 5f 6f  VsUIHierarchy _o
5d90: 77 6e 65 72 3b 0a 20 20 20 20 44 69 63 74 69 6f  wner;.    Dictio
5da0: 6e 61 72 79 3c 75 69 6e 74 2c 20 49 56 73 48 69  nary<uint, IVsHi
5db0: 65 72 61 72 63 68 79 45 76 65 6e 74 73 3e 20 5f  erarchyEvents> _
5dc0: 65 76 65 6e 74 73 20 3d 20 6e 65 77 20 44 69 63  events = new Dic
5dd0: 74 69 6f 6e 61 72 79 3c 75 69 6e 74 2c 20 49 56  tionary<uint, IV
5de0: 73 48 69 65 72 61 72 63 68 79 45 76 65 6e 74 73  sHierarchyEvents
5df0: 3e 28 29 3b 0a 0a 20 20 20 20 69 6e 74 65 72 6e  >();..    intern
5e00: 61 6c 20 46 61 6b 65 48 69 65 72 61 72 63 68 79  al FakeHierarchy
5e10: 28 44 65 73 69 67 6e 65 72 44 6f 63 42 61 73 65  (DesignerDocBase
5e20: 20 63 6f 6e 74 72 6f 6c 2c 20 49 56 73 55 49 48   control, IVsUIH
5e30: 69 65 72 61 72 63 68 79 20 6f 77 6e 65 72 29 0a  ierarchy owner).
5e40: 20 20 20 20 7b 0a 20 20 20 20 20 20 5f 63 6f 6e      {.      _con
5e50: 74 72 6f 6c 20 3d 20 63 6f 6e 74 72 6f 6c 3b 0a  trol = control;.
5e60: 20 20 20 20 20 20 5f 6f 77 6e 65 72 20 3d 20 6f        _owner = o
5e70: 77 6e 65 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  wner;.    }..   
5e80: 20 23 72 65 67 69 6f 6e 20 49 56 73 55 49 48 69   #region IVsUIHi
5e90: 65 72 61 72 63 68 79 20 4d 65 6d 62 65 72 73 0a  erarchy Members.
5ea0: 0a 20 20 20 20 69 6e 74 20 49 56 73 55 49 48 69  .    int IVsUIHi
5eb0: 65 72 61 72 63 68 79 2e 41 64 76 69 73 65 48 69  erarchy.AdviseHi
5ec0: 65 72 61 72 63 68 79 45 76 65 6e 74 73 28 49 56  erarchyEvents(IV
5ed0: 73 48 69 65 72 61 72 63 68 79 45 76 65 6e 74 73  sHierarchyEvents
5ee0: 20 70 45 76 65 6e 74 53 69 6e 6b 2c 20 6f 75 74   pEventSink, out
5ef0: 20 75 69 6e 74 20 70 64 77 43 6f 6f 6b 69 65 29   uint pdwCookie)
5f00: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 70 64 77  .    {.      pdw
5f10: 43 6f 6f 6b 69 65 20 3d 20 31 30 30 3b 0a 20 20  Cookie = 100;.  
5f20: 20 20 20 20 77 68 69 6c 65 20 28 5f 65 76 65 6e      while (_even
5f30: 74 73 2e 43 6f 6e 74 61 69 6e 73 4b 65 79 28 70  ts.ContainsKey(p
5f40: 64 77 43 6f 6f 6b 69 65 29 29 0a 20 20 20 20 20  dwCookie)).     
5f50: 20 20 20 70 64 77 43 6f 6f 6b 69 65 2b 2b 3b 0a     pdwCookie++;.
5f60: 0a 20 20 20 20 20 20 5f 65 76 65 6e 74 73 5b 70  .      _events[p
5f70: 64 77 43 6f 6f 6b 69 65 5d 20 3d 20 70 45 76 65  dwCookie] = pEve
5f80: 6e 74 53 69 6e 6b 3b 0a 0a 20 20 20 20 20 20 72  ntSink;..      r
5f90: 65 74 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74  eturn VSConstant
5fa0: 73 2e 53 5f 4f 4b 3b 0a 20 20 20 20 7d 0a 0a 20  s.S_OK;.    }.. 
5fb0: 20 20 20 69 6e 74 20 49 56 73 55 49 48 69 65 72     int IVsUIHier
5fc0: 61 72 63 68 79 2e 43 6c 6f 73 65 28 29 0a 20 20  archy.Close().  
5fd0: 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e    {.      return
5fe0: 20 56 53 43 6f 6e 73 74 61 6e 74 73 2e 53 5f 4f   VSConstants.S_O
5ff0: 4b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e  K;.    }..    in
6000: 74 20 49 56 73 55 49 48 69 65 72 61 72 63 68 79  t IVsUIHierarchy
6010: 2e 45 78 65 63 43 6f 6d 6d 61 6e 64 28 75 69 6e  .ExecCommand(uin
6020: 74 20 69 74 65 6d 69 64 2c 20 72 65 66 20 47 75  t itemid, ref Gu
6030: 69 64 20 70 67 75 69 64 43 6d 64 47 72 6f 75 70  id pguidCmdGroup
6040: 2c 20 75 69 6e 74 20 6e 43 6d 64 49 44 2c 20 75  , uint nCmdID, u
6050: 69 6e 74 20 6e 43 6d 64 65 78 65 63 6f 70 74 2c  int nCmdexecopt,
6060: 20 49 6e 74 50 74 72 20 70 76 61 49 6e 2c 20 49   IntPtr pvaIn, I
6070: 6e 74 50 74 72 20 70 76 61 4f 75 74 29 0a 20 20  ntPtr pvaOut).  
6080: 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e    {.      return
6090: 20 56 53 43 6f 6e 73 74 61 6e 74 73 2e 45 5f 4e   VSConstants.E_N
60a0: 4f 54 49 4d 50 4c 3b 0a 20 20 20 20 7d 0a 0a 20  OTIMPL;.    }.. 
60b0: 20 20 20 69 6e 74 20 49 56 73 55 49 48 69 65 72     int IVsUIHier
60c0: 61 72 63 68 79 2e 47 65 74 43 61 6e 6f 6e 69 63  archy.GetCanonic
60d0: 61 6c 4e 61 6d 65 28 75 69 6e 74 20 69 74 65 6d  alName(uint item
60e0: 69 64 2c 20 6f 75 74 20 73 74 72 69 6e 67 20 70  id, out string p
60f0: 62 73 74 72 4e 61 6d 65 29 0a 20 20 20 20 7b 0a  bstrName).    {.
6100: 20 20 20 20 20 20 70 62 73 74 72 4e 61 6d 65 20        pbstrName 
6110: 3d 20 5f 63 6f 6e 74 72 6f 6c 2e 43 61 6e 6f 6e  = _control.Canon
6120: 69 63 61 6c 4e 61 6d 65 3b 0a 20 20 20 20 20 20  icalName;.      
6130: 72 65 74 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e  return VSConstan
6140: 74 73 2e 53 5f 4f 4b 3b 0a 20 20 20 20 7d 0a 0a  ts.S_OK;.    }..
6150: 20 20 20 20 69 6e 74 20 49 56 73 55 49 48 69 65      int IVsUIHie
6160: 72 61 72 63 68 79 2e 47 65 74 47 75 69 64 50 72  rarchy.GetGuidPr
6170: 6f 70 65 72 74 79 28 75 69 6e 74 20 69 74 65 6d  operty(uint item
6180: 69 64 2c 20 69 6e 74 20 70 72 6f 70 69 64 2c 20  id, int propid, 
6190: 6f 75 74 20 47 75 69 64 20 70 67 75 69 64 29 0a  out Guid pguid).
61a0: 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75      {.      retu
61b0: 72 6e 20 5f 6f 77 6e 65 72 2e 47 65 74 47 75 69  rn _owner.GetGui
61c0: 64 50 72 6f 70 65 72 74 79 28 69 74 65 6d 69 64  dProperty(itemid
61d0: 2c 20 70 72 6f 70 69 64 2c 20 6f 75 74 20 70 67  , propid, out pg
61e0: 75 69 64 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  uid);.    }..   
61f0: 20 69 6e 74 20 49 56 73 55 49 48 69 65 72 61 72   int IVsUIHierar
6200: 63 68 79 2e 47 65 74 4e 65 73 74 65 64 48 69 65  chy.GetNestedHie
6210: 72 61 72 63 68 79 28 75 69 6e 74 20 69 74 65 6d  rarchy(uint item
6220: 69 64 2c 20 72 65 66 20 47 75 69 64 20 69 69 64  id, ref Guid iid
6230: 48 69 65 72 61 72 63 68 79 4e 65 73 74 65 64 2c  HierarchyNested,
6240: 20 6f 75 74 20 49 6e 74 50 74 72 20 70 70 48 69   out IntPtr ppHi
6250: 65 72 61 72 63 68 79 4e 65 73 74 65 64 2c 20 6f  erarchyNested, o
6260: 75 74 20 75 69 6e 74 20 70 69 74 65 6d 69 64 4e  ut uint pitemidN
6270: 65 73 74 65 64 29 0a 20 20 20 20 7b 0a 20 20 20  ested).    {.   
6280: 20 20 20 70 70 48 69 65 72 61 72 63 68 79 4e 65     ppHierarchyNe
6290: 73 74 65 64 20 3d 20 49 6e 74 50 74 72 2e 5a 65  sted = IntPtr.Ze
62a0: 72 6f 3b 0a 20 20 20 20 20 20 70 69 74 65 6d 69  ro;.      pitemi
62b0: 64 4e 65 73 74 65 64 20 3d 20 30 3b 0a 0a 20 20  dNested = 0;..  
62c0: 20 20 20 20 72 65 74 75 72 6e 20 56 53 43 6f 6e      return VSCon
62d0: 73 74 61 6e 74 73 2e 45 5f 4e 4f 54 49 4d 50 4c  stants.E_NOTIMPL
62e0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74  ;.    }..    int
62f0: 20 49 56 73 55 49 48 69 65 72 61 72 63 68 79 2e   IVsUIHierarchy.
6300: 47 65 74 50 72 6f 70 65 72 74 79 28 75 69 6e 74  GetProperty(uint
6310: 20 69 74 65 6d 69 64 2c 20 69 6e 74 20 70 72 6f   itemid, int pro
6320: 70 69 64 2c 20 6f 75 74 20 6f 62 6a 65 63 74 20  pid, out object 
6330: 70 76 61 72 29 0a 20 20 20 20 7b 0a 20 20 20 20  pvar).    {.    
6340: 20 20 70 76 61 72 20 3d 20 6e 75 6c 6c 3b 0a 0a    pvar = null;..
6350: 20 20 20 20 20 20 73 77 69 74 63 68 20 28 28 5f        switch ((_
6360: 5f 56 53 48 50 52 4f 50 49 44 29 70 72 6f 70 69  _VSHPROPID)propi
6370: 64 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20  d).      {.     
6380: 20 20 20 63 61 73 65 20 5f 5f 56 53 48 50 52 4f     case __VSHPRO
6390: 50 49 44 2e 56 53 48 50 52 4f 50 49 44 5f 41 6c  PID.VSHPROPID_Al
63a0: 6c 6f 77 45 64 69 74 49 6e 52 75 6e 4d 6f 64 65  lowEditInRunMode
63b0: 3a 0a 20 20 20 20 20 20 20 20 20 20 70 76 61 72  :.          pvar
63c0: 20 3d 20 74 72 75 65 3b 0a 20 20 20 20 20 20 20   = true;.       
63d0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
63e0: 20 20 63 61 73 65 20 5f 5f 56 53 48 50 52 4f 50    case __VSHPROP
63f0: 49 44 2e 56 53 48 50 52 4f 50 49 44 5f 43 61 6e  ID.VSHPROPID_Can
6400: 42 75 69 6c 64 46 72 6f 6d 4d 65 6d 6f 72 79 3a  BuildFromMemory:
6410: 0a 20 20 20 20 20 20 20 20 20 20 70 76 61 72 20  .          pvar 
6420: 3d 20 74 72 75 65 3b 0a 20 20 20 20 20 20 20 20  = true;.        
6430: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
6440: 20 63 61 73 65 20 5f 5f 56 53 48 50 52 4f 50 49   case __VSHPROPI
6450: 44 2e 56 53 48 50 52 4f 50 49 44 5f 43 61 70 74  D.VSHPROPID_Capt
6460: 69 6f 6e 3a 0a 20 20 20 20 20 20 20 20 63 61 73  ion:.        cas
6470: 65 20 5f 5f 56 53 48 50 52 4f 50 49 44 2e 56 53  e __VSHPROPID.VS
6480: 48 50 52 4f 50 49 44 5f 53 61 76 65 4e 61 6d 65  HPROPID_SaveName
6490: 3a 0a 20 20 20 20 20 20 20 20 20 20 70 76 61 72  :.          pvar
64a0: 20 3d 20 5f 63 6f 6e 74 72 6f 6c 2e 43 61 6e 6f   = _control.Cano
64b0: 6e 69 63 61 6c 4e 61 6d 65 3b 0a 20 20 20 20 20  nicalName;.     
64c0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
64d0: 20 20 20 20 63 61 73 65 20 5f 5f 56 53 48 50 52      case __VSHPR
64e0: 4f 50 49 44 2e 56 53 48 50 52 4f 50 49 44 5f 49  OPID.VSHPROPID_I
64f0: 73 48 69 64 64 65 6e 49 74 65 6d 3a 0a 20 20 20  sHiddenItem:.   
6500: 20 20 20 20 20 20 20 70 76 61 72 20 3d 20 74 72         pvar = tr
6510: 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72  ue;.          br
6520: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73  eak;.        cas
6530: 65 20 5f 5f 56 53 48 50 52 4f 50 49 44 2e 56 53  e __VSHPROPID.VS
6540: 48 50 52 4f 50 49 44 5f 49 73 4e 65 77 55 6e 73  HPROPID_IsNewUns
6550: 61 76 65 64 49 74 65 6d 3a 0a 20 20 20 20 20 20  avedItem:.      
6560: 20 20 20 20 70 76 61 72 20 3d 20 74 72 75 65 3b      pvar = true;
6570: 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
6580: 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 5f  ;.        case _
6590: 5f 56 53 48 50 52 4f 50 49 44 2e 56 53 48 50 52  _VSHPROPID.VSHPR
65a0: 4f 50 49 44 5f 53 68 6f 77 4f 6e 6c 79 49 74 65  OPID_ShowOnlyIte
65b0: 6d 43 61 70 74 69 6f 6e 3a 0a 20 20 20 20 20 20  mCaption:.      
65c0: 20 20 20 20 70 76 61 72 20 3d 20 74 72 75 65 3b      pvar = true;
65d0: 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
65e0: 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 5f  ;.        case _
65f0: 5f 56 53 48 50 52 4f 50 49 44 2e 56 53 48 50 52  _VSHPROPID.VSHPR
6600: 4f 50 49 44 5f 49 63 6f 6e 49 6d 67 4c 69 73 74  OPID_IconImgList
6610: 3a 0a 20 20 20 20 20 20 20 20 20 20 70 76 61 72  :.          pvar
6620: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20   = 0;.          
6630: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63  break;.        c
6640: 61 73 65 20 5f 5f 56 53 48 50 52 4f 50 49 44 2e  ase __VSHPROPID.
6650: 56 53 48 50 52 4f 50 49 44 5f 49 63 6f 6e 48 61  VSHPROPID_IconHa
6660: 6e 64 6c 65 3a 0a 20 20 20 20 20 20 20 20 20 20  ndle:.          
6670: 70 76 61 72 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20  pvar = null;.   
6680: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 56 53         return VS
6690: 43 6f 6e 73 74 61 6e 74 73 2e 53 5f 4f 4b 3b 0a  Constants.S_OK;.
66a0: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
66b0: 2f 73 77 69 74 63 68 20 28 28 5f 5f 56 53 48 50  /switch ((__VSHP
66c0: 52 4f 50 49 44 32 29 70 72 6f 70 69 64 29 0a 20  ROPID2)propid). 
66d0: 20 20 20 20 20 2f 2f 7b 0a 20 20 20 20 20 20 2f       //{.      /
66e0: 2f 20 20 63 61 73 65 20 5f 5f 56 53 48 50 52 4f  /  case __VSHPRO
66f0: 50 49 44 32 2e 56 53 48 50 52 4f 50 49 44 5f 53  PID2.VSHPROPID_S
6700: 74 61 74 75 73 42 61 72 43 6c 69 65 6e 74 54 65  tatusBarClientTe
6710: 78 74 3a 0a 20 20 20 20 20 20 2f 2f 20 20 20 20  xt:.      //    
6720: 70 76 61 72 20 3d 20 22 53 51 4c 69 74 65 20 54  pvar = "SQLite T
6730: 61 62 6c 65 20 45 64 69 74 6f 72 22 3b 0a 20 20  able Editor";.  
6740: 20 20 20 20 2f 2f 20 20 20 20 62 72 65 61 6b 3b      //    break;
6750: 0a 20 20 20 20 20 20 2f 2f 7d 0a 0a 20 20 20 20  .      //}..    
6760: 20 20 69 66 20 28 70 76 61 72 20 3d 3d 20 6e 75    if (pvar == nu
6770: 6c 6c 29 0a 20 20 20 20 20 20 20 20 72 65 74 75  ll).        retu
6780: 72 6e 20 5f 6f 77 6e 65 72 2e 47 65 74 50 72 6f  rn _owner.GetPro
6790: 70 65 72 74 79 28 69 74 65 6d 69 64 2c 20 70 72  perty(itemid, pr
67a0: 6f 70 69 64 2c 20 6f 75 74 20 70 76 61 72 29 3b  opid, out pvar);
67b0: 0a 20 20 20 20 20 20 65 6c 73 65 0a 20 20 20 20  .      else.    
67c0: 20 20 20 20 72 65 74 75 72 6e 20 56 53 43 6f 6e      return VSCon
67d0: 73 74 61 6e 74 73 2e 53 5f 4f 4b 3b 0a 20 20 20  stants.S_OK;.   
67e0: 20 7d 0a 0a 20 20 20 20 69 6e 74 20 49 56 73 55   }..    int IVsU
67f0: 49 48 69 65 72 61 72 63 68 79 2e 47 65 74 53 69  IHierarchy.GetSi
6800: 74 65 28 6f 75 74 20 4d 69 63 72 6f 73 6f 66 74  te(out Microsoft
6810: 2e 56 69 73 75 61 6c 53 74 75 64 69 6f 2e 4f 4c  .VisualStudio.OL
6820: 45 2e 49 6e 74 65 72 6f 70 2e 49 53 65 72 76 69  E.Interop.IServi
6830: 63 65 50 72 6f 76 69 64 65 72 20 70 70 53 50 29  ceProvider ppSP)
6840: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 70 70 53  .    {.      ppS
6850: 50 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20 20 20  P = null;.      
6860: 72 65 74 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e  return VSConstan
6870: 74 73 2e 45 5f 4e 4f 54 49 4d 50 4c 3b 0a 20 20  ts.E_NOTIMPL;.  
6880: 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20 49 56 73    }..    int IVs
6890: 55 49 48 69 65 72 61 72 63 68 79 2e 50 61 72 73  UIHierarchy.Pars
68a0: 65 43 61 6e 6f 6e 69 63 61 6c 4e 61 6d 65 28 73  eCanonicalName(s
68b0: 74 72 69 6e 67 20 70 73 7a 4e 61 6d 65 2c 20 6f  tring pszName, o
68c0: 75 74 20 75 69 6e 74 20 70 69 74 65 6d 69 64 29  ut uint pitemid)
68d0: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 70 69 74  .    {.      pit
68e0: 65 6d 69 64 20 3d 20 30 3b 0a 20 20 20 20 20 20  emid = 0;.      
68f0: 72 65 74 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e  return VSConstan
6900: 74 73 2e 45 5f 4e 4f 54 49 4d 50 4c 3b 0a 20 20  ts.E_NOTIMPL;.  
6910: 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20 49 56 73    }..    int IVs
6920: 55 49 48 69 65 72 61 72 63 68 79 2e 51 75 65 72  UIHierarchy.Quer
6930: 79 43 6c 6f 73 65 28 6f 75 74 20 69 6e 74 20 70  yClose(out int p
6940: 66 43 61 6e 43 6c 6f 73 65 29 0a 20 20 20 20 7b  fCanClose).    {
6950: 0a 20 20 20 20 20 20 70 66 43 61 6e 43 6c 6f 73  .      pfCanClos
6960: 65 20 3d 20 31 3b 0a 20 20 20 20 20 20 72 65 74  e = 1;.      ret
6970: 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74 73 2e  urn VSConstants.
6980: 53 5f 4f 4b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  S_OK;.    }..   
6990: 20 69 6e 74 20 49 56 73 55 49 48 69 65 72 61 72   int IVsUIHierar
69a0: 63 68 79 2e 51 75 65 72 79 53 74 61 74 75 73 43  chy.QueryStatusC
69b0: 6f 6d 6d 61 6e 64 28 75 69 6e 74 20 69 74 65 6d  ommand(uint item
69c0: 69 64 2c 20 72 65 66 20 47 75 69 64 20 70 67 75  id, ref Guid pgu
69d0: 69 64 43 6d 64 47 72 6f 75 70 2c 20 75 69 6e 74  idCmdGroup, uint
69e0: 20 63 43 6d 64 73 2c 20 4f 4c 45 43 4d 44 5b 5d   cCmds, OLECMD[]
69f0: 20 70 72 67 43 6d 64 73 2c 20 49 6e 74 50 74 72   prgCmds, IntPtr
6a00: 20 70 43 6d 64 54 65 78 74 29 0a 20 20 20 20 7b   pCmdText).    {
6a10: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 56 53  .      return VS
6a20: 43 6f 6e 73 74 61 6e 74 73 2e 45 5f 4e 4f 54 49  Constants.E_NOTI
6a30: 4d 50 4c 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  MPL;.    }..    
6a40: 69 6e 74 20 49 56 73 55 49 48 69 65 72 61 72 63  int IVsUIHierarc
6a50: 68 79 2e 53 65 74 47 75 69 64 50 72 6f 70 65 72  hy.SetGuidProper
6a60: 74 79 28 75 69 6e 74 20 69 74 65 6d 69 64 2c 20  ty(uint itemid, 
6a70: 69 6e 74 20 70 72 6f 70 69 64 2c 20 72 65 66 20  int propid, ref 
6a80: 47 75 69 64 20 72 67 75 69 64 29 0a 20 20 20 20  Guid rguid).    
6a90: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 56  {.      return V
6aa0: 53 43 6f 6e 73 74 61 6e 74 73 2e 45 5f 4e 4f 54  SConstants.E_NOT
6ab0: 49 4d 50 4c 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  IMPL;.    }..   
6ac0: 20 69 6e 74 20 49 56 73 55 49 48 69 65 72 61 72   int IVsUIHierar
6ad0: 63 68 79 2e 53 65 74 50 72 6f 70 65 72 74 79 28  chy.SetProperty(
6ae0: 75 69 6e 74 20 69 74 65 6d 69 64 2c 20 69 6e 74  uint itemid, int
6af0: 20 70 72 6f 70 69 64 2c 20 6f 62 6a 65 63 74 20   propid, object 
6b00: 76 61 72 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  var).    {.     
6b10: 20 66 6f 72 65 61 63 68 28 49 56 73 48 69 65 72   foreach(IVsHier
6b20: 61 72 63 68 79 45 76 65 6e 74 73 20 6c 69 73 74  archyEvents list
6b30: 65 6e 65 72 20 69 6e 20 5f 65 76 65 6e 74 73 2e  ener in _events.
6b40: 56 61 6c 75 65 73 29 0a 20 20 20 20 20 20 7b 0a  Values).      {.
6b50: 20 20 20 20 20 20 20 20 6c 69 73 74 65 6e 65 72          listener
6b60: 2e 4f 6e 50 72 6f 70 65 72 74 79 43 68 61 6e 67  .OnPropertyChang
6b70: 65 64 28 69 74 65 6d 69 64 2c 20 70 72 6f 70 69  ed(itemid, propi
6b80: 64 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20  d, 0);.      }. 
6b90: 20 20 20 20 20 72 65 74 75 72 6e 20 56 53 43 6f       return VSCo
6ba0: 6e 73 74 61 6e 74 73 2e 53 5f 4f 4b 3b 0a 20 20  nstants.S_OK;.  
6bb0: 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20 49 56 73    }..    int IVs
6bc0: 55 49 48 69 65 72 61 72 63 68 79 2e 53 65 74 53  UIHierarchy.SetS
6bd0: 69 74 65 28 4d 69 63 72 6f 73 6f 66 74 2e 56 69  ite(Microsoft.Vi
6be0: 73 75 61 6c 53 74 75 64 69 6f 2e 4f 4c 45 2e 49  sualStudio.OLE.I
6bf0: 6e 74 65 72 6f 70 2e 49 53 65 72 76 69 63 65 50  nterop.IServiceP
6c00: 72 6f 76 69 64 65 72 20 70 73 70 29 0a 20 20 20  rovider psp).   
6c10: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
6c20: 56 53 43 6f 6e 73 74 61 6e 74 73 2e 45 5f 4e 4f  VSConstants.E_NO
6c30: 54 49 4d 50 4c 3b 0a 20 20 20 20 7d 0a 0a 20 20  TIMPL;.    }..  
6c40: 20 20 69 6e 74 20 49 56 73 55 49 48 69 65 72 61    int IVsUIHiera
6c50: 72 63 68 79 2e 55 6e 61 64 76 69 73 65 48 69 65  rchy.UnadviseHie
6c60: 72 61 72 63 68 79 45 76 65 6e 74 73 28 75 69 6e  rarchyEvents(uin
6c70: 74 20 64 77 43 6f 6f 6b 69 65 29 0a 20 20 20 20  t dwCookie).    
6c80: 7b 0a 20 20 20 20 20 20 5f 65 76 65 6e 74 73 2e  {.      _events.
6c90: 52 65 6d 6f 76 65 28 64 77 43 6f 6f 6b 69 65 29  Remove(dwCookie)
6ca0: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 56  ;.      return V
6cb0: 53 43 6f 6e 73 74 61 6e 74 73 2e 53 5f 4f 4b 3b  SConstants.S_OK;
6cc0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20  .    }..    int 
6cd0: 49 56 73 55 49 48 69 65 72 61 72 63 68 79 2e 55  IVsUIHierarchy.U
6ce0: 6e 75 73 65 64 30 28 29 0a 20 20 20 20 7b 0a 20  nused0().    {. 
6cf0: 20 20 20 20 20 72 65 74 75 72 6e 20 56 53 43 6f       return VSCo
6d00: 6e 73 74 61 6e 74 73 2e 45 5f 4e 4f 54 49 4d 50  nstants.E_NOTIMP
6d10: 4c 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e  L;.    }..    in
6d20: 74 20 49 56 73 55 49 48 69 65 72 61 72 63 68 79  t IVsUIHierarchy
6d30: 2e 55 6e 75 73 65 64 31 28 29 0a 20 20 20 20 7b  .Unused1().    {
6d40: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 56 53  .      return VS
6d50: 43 6f 6e 73 74 61 6e 74 73 2e 45 5f 4e 4f 54 49  Constants.E_NOTI
6d60: 4d 50 4c 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  MPL;.    }..    
6d70: 69 6e 74 20 49 56 73 55 49 48 69 65 72 61 72 63  int IVsUIHierarc
6d80: 68 79 2e 55 6e 75 73 65 64 32 28 29 0a 20 20 20  hy.Unused2().   
6d90: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
6da0: 56 53 43 6f 6e 73 74 61 6e 74 73 2e 45 5f 4e 4f  VSConstants.E_NO
6db0: 54 49 4d 50 4c 3b 0a 20 20 20 20 7d 0a 0a 20 20  TIMPL;.    }..  
6dc0: 20 20 69 6e 74 20 49 56 73 55 49 48 69 65 72 61    int IVsUIHiera
6dd0: 72 63 68 79 2e 55 6e 75 73 65 64 33 28 29 0a 20  rchy.Unused3(). 
6de0: 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72     {.      retur
6df0: 6e 20 56 53 43 6f 6e 73 74 61 6e 74 73 2e 45 5f  n VSConstants.E_
6e00: 4e 4f 54 49 4d 50 4c 3b 0a 20 20 20 20 7d 0a 0a  NOTIMPL;.    }..
6e10: 20 20 20 20 69 6e 74 20 49 56 73 55 49 48 69 65      int IVsUIHie
6e20: 72 61 72 63 68 79 2e 55 6e 75 73 65 64 34 28 29  rarchy.Unused4()
6e30: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74  .    {.      ret
6e40: 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74 73 2e  urn VSConstants.
6e50: 45 5f 4e 4f 54 49 4d 50 4c 3b 0a 20 20 20 20 7d  E_NOTIMPL;.    }
6e60: 0a 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e  ..    #endregion
6e70: 0a 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 49 56  ..    #region IV
6e80: 73 48 69 65 72 61 72 63 68 79 20 4d 65 6d 62 65  sHierarchy Membe
6e90: 72 73 0a 0a 20 20 20 20 69 6e 74 20 49 56 73 48  rs..    int IVsH
6ea0: 69 65 72 61 72 63 68 79 2e 41 64 76 69 73 65 48  ierarchy.AdviseH
6eb0: 69 65 72 61 72 63 68 79 45 76 65 6e 74 73 28 49  ierarchyEvents(I
6ec0: 56 73 48 69 65 72 61 72 63 68 79 45 76 65 6e 74  VsHierarchyEvent
6ed0: 73 20 70 45 76 65 6e 74 53 69 6e 6b 2c 20 6f 75  s pEventSink, ou
6ee0: 74 20 75 69 6e 74 20 70 64 77 43 6f 6f 6b 69 65  t uint pdwCookie
6ef0: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65  ).    {.      re
6f00: 74 75 72 6e 20 28 28 49 56 73 55 49 48 69 65 72  turn ((IVsUIHier
6f10: 61 72 63 68 79 29 74 68 69 73 29 2e 41 64 76 69  archy)this).Advi
6f20: 73 65 48 69 65 72 61 72 63 68 79 45 76 65 6e 74  seHierarchyEvent
6f30: 73 28 70 45 76 65 6e 74 53 69 6e 6b 2c 20 6f 75  s(pEventSink, ou
6f40: 74 20 70 64 77 43 6f 6f 6b 69 65 29 3b 0a 20 20  t pdwCookie);.  
6f50: 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20 49 56 73    }..    int IVs
6f60: 48 69 65 72 61 72 63 68 79 2e 43 6c 6f 73 65 28  Hierarchy.Close(
6f70: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65  ).    {.      re
6f80: 74 75 72 6e 20 28 28 49 56 73 55 49 48 69 65 72  turn ((IVsUIHier
6f90: 61 72 63 68 79 29 74 68 69 73 29 2e 43 6c 6f 73  archy)this).Clos
6fa0: 65 28 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  e();.    }..    
6fb0: 69 6e 74 20 49 56 73 48 69 65 72 61 72 63 68 79  int IVsHierarchy
6fc0: 2e 47 65 74 43 61 6e 6f 6e 69 63 61 6c 4e 61 6d  .GetCanonicalNam
6fd0: 65 28 75 69 6e 74 20 69 74 65 6d 69 64 2c 20 6f  e(uint itemid, o
6fe0: 75 74 20 73 74 72 69 6e 67 20 70 62 73 74 72 4e  ut string pbstrN
6ff0: 61 6d 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  ame).    {.     
7000: 20 72 65 74 75 72 6e 20 28 28 49 56 73 55 49 48   return ((IVsUIH
7010: 69 65 72 61 72 63 68 79 29 74 68 69 73 29 2e 47  ierarchy)this).G
7020: 65 74 43 61 6e 6f 6e 69 63 61 6c 4e 61 6d 65 28  etCanonicalName(
7030: 69 74 65 6d 69 64 2c 20 6f 75 74 20 70 62 73 74  itemid, out pbst
7040: 72 4e 61 6d 65 29 3b 0a 20 20 20 20 7d 0a 0a 20  rName);.    }.. 
7050: 20 20 20 69 6e 74 20 49 56 73 48 69 65 72 61 72     int IVsHierar
7060: 63 68 79 2e 47 65 74 47 75 69 64 50 72 6f 70 65  chy.GetGuidPrope
7070: 72 74 79 28 75 69 6e 74 20 69 74 65 6d 69 64 2c  rty(uint itemid,
7080: 20 69 6e 74 20 70 72 6f 70 69 64 2c 20 6f 75 74   int propid, out
7090: 20 47 75 69 64 20 70 67 75 69 64 29 0a 20 20 20   Guid pguid).   
70a0: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
70b0: 28 28 49 56 73 55 49 48 69 65 72 61 72 63 68 79  ((IVsUIHierarchy
70c0: 29 74 68 69 73 29 2e 47 65 74 47 75 69 64 50 72  )this).GetGuidPr
70d0: 6f 70 65 72 74 79 28 69 74 65 6d 69 64 2c 20 70  operty(itemid, p
70e0: 72 6f 70 69 64 2c 20 6f 75 74 20 70 67 75 69 64  ropid, out pguid
70f0: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e  );.    }..    in
7100: 74 20 49 56 73 48 69 65 72 61 72 63 68 79 2e 47  t IVsHierarchy.G
7110: 65 74 4e 65 73 74 65 64 48 69 65 72 61 72 63 68  etNestedHierarch
7120: 79 28 75 69 6e 74 20 69 74 65 6d 69 64 2c 20 72  y(uint itemid, r
7130: 65 66 20 47 75 69 64 20 69 69 64 48 69 65 72 61  ef Guid iidHiera
7140: 72 63 68 79 4e 65 73 74 65 64 2c 20 6f 75 74 20  rchyNested, out 
7150: 49 6e 74 50 74 72 20 70 70 48 69 65 72 61 72 63  IntPtr ppHierarc
7160: 68 79 4e 65 73 74 65 64 2c 20 6f 75 74 20 75 69  hyNested, out ui
7170: 6e 74 20 70 69 74 65 6d 69 64 4e 65 73 74 65 64  nt pitemidNested
7180: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65  ).    {.      re
7190: 74 75 72 6e 20 28 28 49 56 73 55 49 48 69 65 72  turn ((IVsUIHier
71a0: 61 72 63 68 79 29 74 68 69 73 29 2e 47 65 74 4e  archy)this).GetN
71b0: 65 73 74 65 64 48 69 65 72 61 72 63 68 79 28 69  estedHierarchy(i
71c0: 74 65 6d 69 64 2c 20 72 65 66 20 69 69 64 48 69  temid, ref iidHi
71d0: 65 72 61 72 63 68 79 4e 65 73 74 65 64 2c 20 6f  erarchyNested, o
71e0: 75 74 20 70 70 48 69 65 72 61 72 63 68 79 4e 65  ut ppHierarchyNe
71f0: 73 74 65 64 2c 20 6f 75 74 20 70 69 74 65 6d 69  sted, out pitemi
7200: 64 4e 65 73 74 65 64 29 3b 0a 20 20 20 20 7d 0a  dNested);.    }.
7210: 0a 20 20 20 20 69 6e 74 20 49 56 73 48 69 65 72  .    int IVsHier
7220: 61 72 63 68 79 2e 47 65 74 50 72 6f 70 65 72 74  archy.GetPropert
7230: 79 28 75 69 6e 74 20 69 74 65 6d 69 64 2c 20 69  y(uint itemid, i
7240: 6e 74 20 70 72 6f 70 69 64 2c 20 6f 75 74 20 6f  nt propid, out o
7250: 62 6a 65 63 74 20 70 76 61 72 29 0a 20 20 20 20  bject pvar).    
7260: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 28  {.      return (
7270: 28 49 56 73 55 49 48 69 65 72 61 72 63 68 79 29  (IVsUIHierarchy)
7280: 74 68 69 73 29 2e 47 65 74 50 72 6f 70 65 72 74  this).GetPropert
7290: 79 28 69 74 65 6d 69 64 2c 20 70 72 6f 70 69 64  y(itemid, propid
72a0: 2c 20 6f 75 74 20 70 76 61 72 29 3b 0a 20 20 20  , out pvar);.   
72b0: 20 7d 0a 0a 20 20 20 20 69 6e 74 20 49 56 73 48   }..    int IVsH
72c0: 69 65 72 61 72 63 68 79 2e 47 65 74 53 69 74 65  ierarchy.GetSite
72d0: 28 6f 75 74 20 4d 69 63 72 6f 73 6f 66 74 2e 56  (out Microsoft.V
72e0: 69 73 75 61 6c 53 74 75 64 69 6f 2e 4f 4c 45 2e  isualStudio.OLE.
72f0: 49 6e 74 65 72 6f 70 2e 49 53 65 72 76 69 63 65  Interop.IService
7300: 50 72 6f 76 69 64 65 72 20 70 70 53 50 29 0a 20  Provider ppSP). 
7310: 20 20 20 7b 0a 20 20 20 20 20 20 70 70 53 50 20     {.      ppSP 
7320: 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 72 65  = null;.      re
7330: 74 75 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74 73  turn VSConstants
7340: 2e 45 5f 4e 4f 54 49 4d 50 4c 3b 0a 20 20 20 20  .E_NOTIMPL;.    
7350: 7d 0a 0a 20 20 20 20 69 6e 74 20 49 56 73 48 69  }..    int IVsHi
7360: 65 72 61 72 63 68 79 2e 50 61 72 73 65 43 61 6e  erarchy.ParseCan
7370: 6f 6e 69 63 61 6c 4e 61 6d 65 28 73 74 72 69 6e  onicalName(strin
7380: 67 20 70 73 7a 4e 61 6d 65 2c 20 6f 75 74 20 75  g pszName, out u
7390: 69 6e 74 20 70 69 74 65 6d 69 64 29 0a 20 20 20  int pitemid).   
73a0: 20 7b 0a 20 20 20 20 20 20 70 69 74 65 6d 69 64   {.      pitemid
73b0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 65 74 75   = 0;.      retu
73c0: 72 6e 20 56 53 43 6f 6e 73 74 61 6e 74 73 2e 45  rn VSConstants.E
73d0: 5f 4e 4f 54 49 4d 50 4c 3b 0a 20 20 20 20 7d 0a  _NOTIMPL;.    }.
73e0: 0a 20 20 20 20 69 6e 74 20 49 56 73 48 69 65 72  .    int IVsHier
73f0: 61 72 63 68 79 2e 51 75 65 72 79 43 6c 6f 73 65  archy.QueryClose
7400: 28 6f 75 74 20 69 6e 74 20 70 66 43 61 6e 43 6c  (out int pfCanCl
7410: 6f 73 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  ose).    {.     
7420: 20 72 65 74 75 72 6e 20 28 28 49 56 73 55 49 48   return ((IVsUIH
7430: 69 65 72 61 72 63 68 79 29 74 68 69 73 29 2e 51  ierarchy)this).Q
7440: 75 65 72 79 43 6c 6f 73 65 28 6f 75 74 20 70 66  ueryClose(out pf
7450: 43 61 6e 43 6c 6f 73 65 29 3b 0a 20 20 20 20 7d  CanClose);.    }
7460: 0a 0a 20 20 20 20 69 6e 74 20 49 56 73 48 69 65  ..    int IVsHie
7470: 72 61 72 63 68 79 2e 53 65 74 47 75 69 64 50 72  rarchy.SetGuidPr
7480: 6f 70 65 72 74 79 28 75 69 6e 74 20 69 74 65 6d  operty(uint item
7490: 69 64 2c 20 69 6e 74 20 70 72 6f 70 69 64 2c 20  id, int propid, 
74a0: 72 65 66 20 47 75 69 64 20 72 67 75 69 64 29 0a  ref Guid rguid).
74b0: 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75      {.      retu
74c0: 72 6e 20 28 28 49 56 73 55 49 48 69 65 72 61 72  rn ((IVsUIHierar
74d0: 63 68 79 29 74 68 69 73 29 2e 53 65 74 47 75 69  chy)this).SetGui
74e0: 64 50 72 6f 70 65 72 74 79 28 69 74 65 6d 69 64  dProperty(itemid
74f0: 2c 20 70 72 6f 70 69 64 2c 20 72 65 66 20 72 67  , propid, ref rg
7500: 75 69 64 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  uid);.    }..   
7510: 20 69 6e 74 20 49 56 73 48 69 65 72 61 72 63 68   int IVsHierarch
7520: 79 2e 53 65 74 50 72 6f 70 65 72 74 79 28 75 69  y.SetProperty(ui
7530: 6e 74 20 69 74 65 6d 69 64 2c 20 69 6e 74 20 70  nt itemid, int p
7540: 72 6f 70 69 64 2c 20 6f 62 6a 65 63 74 20 76 61  ropid, object va
7550: 72 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72  r).    {.      r
7560: 65 74 75 72 6e 20 28 28 49 56 73 55 49 48 69 65  eturn ((IVsUIHie
7570: 72 61 72 63 68 79 29 74 68 69 73 29 2e 53 65 74  rarchy)this).Set
7580: 50 72 6f 70 65 72 74 79 28 69 74 65 6d 69 64 2c  Property(itemid,
7590: 20 70 72 6f 70 69 64 2c 20 76 61 72 29 3b 0a 20   propid, var);. 
75a0: 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20 49 56     }..    int IV
75b0: 73 48 69 65 72 61 72 63 68 79 2e 53 65 74 53 69  sHierarchy.SetSi
75c0: 74 65 28 4d 69 63 72 6f 73 6f 66 74 2e 56 69 73  te(Microsoft.Vis
75d0: 75 61 6c 53 74 75 64 69 6f 2e 4f 4c 45 2e 49 6e  ualStudio.OLE.In
75e0: 74 65 72 6f 70 2e 49 53 65 72 76 69 63 65 50 72  terop.IServicePr
75f0: 6f 76 69 64 65 72 20 70 73 70 29 0a 20 20 20 20  ovider psp).    
7600: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 28  {.      return (
7610: 28 49 56 73 55 49 48 69 65 72 61 72 63 68 79 29  (IVsUIHierarchy)
7620: 74 68 69 73 29 2e 53 65 74 53 69 74 65 28 70 73  this).SetSite(ps
7630: 70 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  p);.    }..    i
7640: 6e 74 20 49 56 73 48 69 65 72 61 72 63 68 79 2e  nt IVsHierarchy.
7650: 55 6e 61 64 76 69 73 65 48 69 65 72 61 72 63 68  UnadviseHierarch
7660: 79 45 76 65 6e 74 73 28 75 69 6e 74 20 64 77 43  yEvents(uint dwC
7670: 6f 6f 6b 69 65 29 0a 20 20 20 20 7b 0a 20 20 20  ookie).    {.   
7680: 20 20 20 72 65 74 75 72 6e 20 28 28 49 56 73 55     return ((IVsU
7690: 49 48 69 65 72 61 72 63 68 79 29 74 68 69 73 29  IHierarchy)this)
76a0: 2e 55 6e 61 64 76 69 73 65 48 69 65 72 61 72 63  .UnadviseHierarc
76b0: 68 79 45 76 65 6e 74 73 28 64 77 43 6f 6f 6b 69  hyEvents(dwCooki
76c0: 65 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  e);.    }..    i
76d0: 6e 74 20 49 56 73 48 69 65 72 61 72 63 68 79 2e  nt IVsHierarchy.
76e0: 55 6e 75 73 65 64 30 28 29 0a 20 20 20 20 7b 0a  Unused0().    {.
76f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 56 53 43        return VSC
7700: 6f 6e 73 74 61 6e 74 73 2e 45 5f 4e 4f 54 49 4d  onstants.E_NOTIM
7710: 50 4c 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  PL;.    }..    i
7720: 6e 74 20 49 56 73 48 69 65 72 61 72 63 68 79 2e  nt IVsHierarchy.
7730: 55 6e 75 73 65 64 31 28 29 0a 20 20 20 20 7b 0a  Unused1().    {.
7740: 20 20 20 20 20 20 72 65 74 75 72 6e 20 56 53 43        return VSC
7750: 6f 6e 73 74 61 6e 74 73 2e 45 5f 4e 4f 54 49 4d  onstants.E_NOTIM
7760: 50 4c 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  PL;.    }..    i
7770: 6e 74 20 49 56 73 48 69 65 72 61 72 63 68 79 2e  nt IVsHierarchy.
7780: 55 6e 75 73 65 64 32 28 29 0a 20 20 20 20 7b 0a  Unused2().    {.
7790: 20 20 20 20 20 20 72 65 74 75 72 6e 20 56 53 43        return VSC
77a0: 6f 6e 73 74 61 6e 74 73 2e 45 5f 4e 4f 54 49 4d  onstants.E_NOTIM
77b0: 50 4c 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  PL;.    }..    i
77c0: 6e 74 20 49 56 73 48 69 65 72 61 72 63 68 79 2e  nt IVsHierarchy.
77d0: 55 6e 75 73 65 64 33 28 29 0a 20 20 20 20 7b 0a  Unused3().    {.
77e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 56 53 43        return VSC
77f0: 6f 6e 73 74 61 6e 74 73 2e 45 5f 4e 4f 54 49 4d  onstants.E_NOTIM
7800: 50 4c 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  PL;.    }..    i
7810: 6e 74 20 49 56 73 48 69 65 72 61 72 63 68 79 2e  nt IVsHierarchy.
7820: 55 6e 75 73 65 64 34 28 29 0a 20 20 20 20 7b 0a  Unused4().    {.
7830: 20 20 20 20 20 20 72 65 74 75 72 6e 20 56 53 43        return VSC
7840: 6f 6e 73 74 61 6e 74 73 2e 45 5f 4e 4f 54 49 4d  onstants.E_NOTIM
7850: 50 4c 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23  PL;.    }..    #
7860: 65 6e 64 72 65 67 69 6f 6e 0a 0a 20 20 20 20 23  endregion..    #
7870: 72 65 67 69 6f 6e 20 49 56 73 50 65 72 73 69 73  region IVsPersis
7880: 74 48 69 65 72 61 72 63 68 79 49 74 65 6d 20 4d  tHierarchyItem M
7890: 65 6d 62 65 72 73 0a 0a 20 20 20 20 69 6e 74 20  embers..    int 
78a0: 49 56 73 50 65 72 73 69 73 74 48 69 65 72 61 72  IVsPersistHierar
78b0: 63 68 79 49 74 65 6d 2e 49 73 49 74 65 6d 44 69  chyItem.IsItemDi
78c0: 72 74 79 28 75 69 6e 74 20 69 74 65 6d 69 64 2c  rty(uint itemid,
78d0: 20 49 6e 74 50 74 72 20 70 75 6e 6b 44 6f 63 44   IntPtr punkDocD
78e0: 61 74 61 2c 20 6f 75 74 20 69 6e 74 20 70 66 44  ata, out int pfD
78f0: 69 72 74 79 29 0a 20 20 20 20 7b 0a 20 20 20 20  irty).    {.    
7900: 20 20 72 65 74 75 72 6e 20 28 28 49 56 73 50 65    return ((IVsPe
7910: 72 73 69 73 74 44 6f 63 44 61 74 61 29 5f 63 6f  rsistDocData)_co
7920: 6e 74 72 6f 6c 29 2e 49 73 44 6f 63 44 61 74 61  ntrol).IsDocData
7930: 44 69 72 74 79 28 6f 75 74 20 70 66 44 69 72 74  Dirty(out pfDirt
7940: 79 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  y);.    }..    i
7950: 6e 74 20 49 56 73 50 65 72 73 69 73 74 48 69 65  nt IVsPersistHie
7960: 72 61 72 63 68 79 49 74 65 6d 2e 53 61 76 65 49  rarchyItem.SaveI
7970: 74 65 6d 28 56 53 53 41 56 45 46 4c 41 47 53 20  tem(VSSAVEFLAGS 
7980: 64 77 53 61 76 65 2c 20 73 74 72 69 6e 67 20 70  dwSave, string p
7990: 73 7a 53 69 6c 65 6e 74 53 61 76 65 41 73 4e 61  szSilentSaveAsNa
79a0: 6d 65 2c 20 75 69 6e 74 20 69 74 65 6d 69 64 2c  me, uint itemid,
79b0: 20 49 6e 74 50 74 72 20 70 75 6e 6b 44 6f 63 44   IntPtr punkDocD
79c0: 61 74 61 2c 20 6f 75 74 20 69 6e 74 20 70 66 43  ata, out int pfC
79d0: 61 6e 63 65 6c 65 64 29 0a 20 20 20 20 7b 0a 20  anceled).    {. 
79e0: 20 20 20 20 20 72 65 74 75 72 6e 20 28 28 49 56       return ((IV
79f0: 73 50 65 72 73 69 73 74 44 6f 63 44 61 74 61 29  sPersistDocData)
7a00: 5f 63 6f 6e 74 72 6f 6c 29 2e 53 61 76 65 44 6f  _control).SaveDo
7a10: 63 44 61 74 61 28 64 77 53 61 76 65 2c 20 6f 75  cData(dwSave, ou
7a20: 74 20 70 73 7a 53 69 6c 65 6e 74 53 61 76 65 41  t pszSilentSaveA
7a30: 73 4e 61 6d 65 2c 20 6f 75 74 20 70 66 43 61 6e  sName, out pfCan
7a40: 63 65 6c 65 64 29 3b 0a 20 20 20 20 7d 0a 0a 20  celed);.    }.. 
7a50: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0a 0a 20     #endregion.. 
7a60: 20 20 20 23 72 65 67 69 6f 6e 20 49 56 73 50 65     #region IVsPe
7a70: 72 73 69 73 74 48 69 65 72 61 72 63 68 79 49 74  rsistHierarchyIt
7a80: 65 6d 32 20 4d 65 6d 62 65 72 73 0a 0a 20 20 20  em2 Members..   
7a90: 20 69 6e 74 20 49 56 73 50 65 72 73 69 73 74 48   int IVsPersistH
7aa0: 69 65 72 61 72 63 68 79 49 74 65 6d 32 2e 49 67  ierarchyItem2.Ig
7ab0: 6e 6f 72 65 49 74 65 6d 46 69 6c 65 43 68 61 6e  noreItemFileChan
7ac0: 67 65 73 28 75 69 6e 74 20 69 74 65 6d 69 64 2c  ges(uint itemid,
7ad0: 20 69 6e 74 20 66 49 67 6e 6f 72 65 29 0a 20 20   int fIgnore).  
7ae0: 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e    {.      return
7af0: 20 56 53 43 6f 6e 73 74 61 6e 74 73 2e 45 5f 4e   VSConstants.E_N
7b00: 4f 54 49 4d 50 4c 3b 0a 20 20 20 20 7d 0a 0a 20  OTIMPL;.    }.. 
7b10: 20 20 20 69 6e 74 20 49 56 73 50 65 72 73 69 73     int IVsPersis
7b20: 74 48 69 65 72 61 72 63 68 79 49 74 65 6d 32 2e  tHierarchyItem2.
7b30: 49 73 49 74 65 6d 44 69 72 74 79 28 75 69 6e 74  IsItemDirty(uint
7b40: 20 69 74 65 6d 69 64 2c 20 49 6e 74 50 74 72 20   itemid, IntPtr 
7b50: 70 75 6e 6b 44 6f 63 44 61 74 61 2c 20 6f 75 74  punkDocData, out
7b60: 20 69 6e 74 20 70 66 44 69 72 74 79 29 0a 20 20   int pfDirty).  
7b70: 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e    {.      return
7b80: 20 28 28 49 56 73 50 65 72 73 69 73 74 44 6f 63   ((IVsPersistDoc
7b90: 44 61 74 61 29 5f 63 6f 6e 74 72 6f 6c 29 2e 49  Data)_control).I
7ba0: 73 44 6f 63 44 61 74 61 44 69 72 74 79 28 6f 75  sDocDataDirty(ou
7bb0: 74 20 70 66 44 69 72 74 79 29 3b 0a 20 20 20 20  t pfDirty);.    
7bc0: 7d 0a 0a 20 20 20 20 69 6e 74 20 49 56 73 50 65  }..    int IVsPe
7bd0: 72 73 69 73 74 48 69 65 72 61 72 63 68 79 49 74  rsistHierarchyIt
7be0: 65 6d 32 2e 49 73 49 74 65 6d 52 65 6c 6f 61 64  em2.IsItemReload
7bf0: 61 62 6c 65 28 75 69 6e 74 20 69 74 65 6d 69 64  able(uint itemid
7c00: 2c 20 6f 75 74 20 69 6e 74 20 70 66 52 65 6c 6f  , out int pfRelo
7c10: 61 64 61 62 6c 65 29 0a 20 20 20 20 7b 0a 20 20  adable).    {.  
7c20: 20 20 20 20 72 65 74 75 72 6e 20 28 28 49 56 73      return ((IVs
7c30: 50 65 72 73 69 73 74 44 6f 63 44 61 74 61 29 5f  PersistDocData)_
7c40: 63 6f 6e 74 72 6f 6c 29 2e 49 73 44 6f 63 44 61  control).IsDocDa
7c50: 74 61 52 65 6c 6f 61 64 61 62 6c 65 28 6f 75 74  taReloadable(out
7c60: 20 70 66 52 65 6c 6f 61 64 61 62 6c 65 29 3b 0a   pfReloadable);.
7c70: 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74 20 49      }..    int I
7c80: 56 73 50 65 72 73 69 73 74 48 69 65 72 61 72 63  VsPersistHierarc
7c90: 68 79 49 74 65 6d 32 2e 52 65 6c 6f 61 64 49 74  hyItem2.ReloadIt
7ca0: 65 6d 28 75 69 6e 74 20 69 74 65 6d 69 64 2c 20  em(uint itemid, 
7cb0: 75 69 6e 74 20 64 77 52 65 73 65 72 76 65 64 29  uint dwReserved)
7cc0: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74  .    {.      ret
7cd0: 75 72 6e 20 28 28 49 56 73 50 65 72 73 69 73 74  urn ((IVsPersist
7ce0: 44 6f 63 44 61 74 61 29 5f 63 6f 6e 74 72 6f 6c  DocData)_control
7cf0: 29 2e 52 65 6c 6f 61 64 44 6f 63 44 61 74 61 28  ).ReloadDocData(
7d00: 64 77 52 65 73 65 72 76 65 64 29 3b 0a 20 20 20  dwReserved);.   
7d10: 20 7d 0a 0a 20 20 20 20 69 6e 74 20 49 56 73 50   }..    int IVsP
7d20: 65 72 73 69 73 74 48 69 65 72 61 72 63 68 79 49  ersistHierarchyI
7d30: 74 65 6d 32 2e 53 61 76 65 49 74 65 6d 28 56 53  tem2.SaveItem(VS
7d40: 53 41 56 45 46 4c 41 47 53 20 64 77 53 61 76 65  SAVEFLAGS dwSave
7d50: 2c 20 73 74 72 69 6e 67 20 70 73 7a 53 69 6c 65  , string pszSile
7d60: 6e 74 53 61 76 65 41 73 4e 61 6d 65 2c 20 75 69  ntSaveAsName, ui
7d70: 6e 74 20 69 74 65 6d 69 64 2c 20 49 6e 74 50 74  nt itemid, IntPt
7d80: 72 20 70 75 6e 6b 44 6f 63 44 61 74 61 2c 20 6f  r punkDocData, o
7d90: 75 74 20 69 6e 74 20 70 66 43 61 6e 63 65 6c 65  ut int pfCancele
7da0: 64 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72  d).    {.      r
7db0: 65 74 75 72 6e 20 28 28 49 56 73 50 65 72 73 69  eturn ((IVsPersi
7dc0: 73 74 44 6f 63 44 61 74 61 29 5f 63 6f 6e 74 72  stDocData)_contr
7dd0: 6f 6c 29 2e 53 61 76 65 44 6f 63 44 61 74 61 28  ol).SaveDocData(
7de0: 64 77 53 61 76 65 2c 20 6f 75 74 20 70 73 7a 53  dwSave, out pszS
7df0: 69 6c 65 6e 74 53 61 76 65 41 73 4e 61 6d 65 2c  ilentSaveAsName,
7e00: 20 6f 75 74 20 70 66 43 61 6e 63 65 6c 65 64 29   out pfCanceled)
7e10: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 65 6e  ;.    }..    #en
7e20: 64 72 65 67 69 6f 6e 0a 20 20 7d 0a 7d           dregion.  }.}