/// ------------------------------------------------------------------------------------ /// <summary> /// This message (i.e. BeforeLoadingDataSources) gets called right before PA loads all /// the data sources in the current project. This specific version of the message /// handler will do is find all data sources that match the ones this add-on saves /// in the DataSourceLoadInfo list (saved in a file in the project folder) and remove /// them from the project's data source list. The data sources that are removed are /// stored in a temporary list so that they can be re-added to the project's list /// after the data sources are read. /// </summary> /// <remarks> /// Concerning the reason for setting the last modification date on each skipped /// data source to tomorrow (i.e. DateTime.Now.AddDays(1)), is so that every time /// PA gains focus and it determines if any of the data sources have been updated /// since it lost focus, PA will determine that all skipped data sources have not /// been updated. Normally, the last modification date on a data source is set when /// the data source is read. But if the data source is skipped, then the last /// modification date will not get set properly and will cause PA to keep re-reading /// data sources each time the program becomes active. Hence setting the data to /// tomorrow. /// </remarks> /// ------------------------------------------------------------------------------------ protected bool OnBeforeLoadingDataSources(object args) { PaProject project = args as PaProject; if (project == null) { return(false); } m_skippedDataSources = null; // Get the list of data sources that were marked for not loading. SkippedDataSourceList sdsl = SkippedDataSourceList.Load(project); if (sdsl == null || sdsl.Count == 0) { return(false); } // Create our list to temporarily store the skipped data sources. Make it // a sorted list so we can insert them back in the list in the same place // they were when we removed them. This is so they will appear in the // project settings dialog in the same order in which the user added them. m_skippedDataSources = new SortedDictionary <int, PaDataSource>(); // Go through the project's data sources and remove any that are to be skipped. for (int i = project.DataSources.Count - 1; i >= 0; i--) { PaDataSource ds = project.DataSources[i]; if (sdsl.SkipDataSource(ds.ToString(true))) { // Set the skipped data sources date to tomorrow (see comment in // header of this method), save it to our temp. list and remove // it from the project's list of data sources. ds.LastModification = DateTime.Now.AddDays(1); m_skippedDataSources[i] = ds; project.DataSources.RemoveAt(i); } } if (m_skippedDataSources.Count == 0) { m_skippedDataSources = null; } return(false); }
/// ------------------------------------------------------------------------------------ /// <summary> /// Use this event to initialize the Load? column when the grid is loaded for the /// first time as the dialog is being constructed. /// </summary> /// ------------------------------------------------------------------------------------ private void grid_RowsAddedOnLoad(object sender, DataGridViewRowsAddedEventArgs e) { if (m_project == null) { m_project = ReflectionHelper.GetField(m_dialog, "m_project") as PaProject; } // Get the list of the skipped data source that will be used to initialize // our column in the OnInitializeLoadColumn method. m_skippedList = SkippedDataSourceList.Load(m_project); // Post a message here to initialize the "Load?" column values in the grid // because the rows don't actually have any data in them yet. PaApp.MsgMediator.PostMessage("InitializeLoadColumn", null); m_grid.RowsAdded -= grid_RowsAddedOnLoad; m_grid.RowsAdded += grid_RowsAdded; m_grid.RowsRemoved += m_grid_RowsRemoved; }