Exemplo n.º 1
0
		static void UpdateOpenWorkspaceItemMetadata (IDictionary<string, string> metadata, WorkspaceItem item)
		{
			// Is this a workspace or a solution?
			metadata ["IsSolution"] = (item is Solution).ToString ();
			metadata ["LoadSucceed"] = bool.TrueString;
			metadata ["TotalProjectCount"] = item.GetAllItems<Project> ().Count ().ToString ();
		}
Exemplo n.º 2
0
		async Task OnCheckWorkspaceItem (WorkspaceItem item)
		{
			if (item.NeedsReload) {
				var result = await AllowReload (item.GetAllItems<Project> ());
				bool allowReload = result.Item1;
				IEnumerable<string> closedDocs = result.Item2;
				if (result.Item1) {
					if (item.ParentWorkspace == null) {
						string file = item.FileName;
						try {
							SetReloading (true);
							SavePreferences ();
							await CloseWorkspaceItem (item, false);
							await OpenWorkspaceItem (file, false, false);
						} finally {
							SetReloading (false);
						}
					}
					else {
						using (ProgressMonitor m = IdeApp.Workbench.ProgressMonitors.GetSaveProgressMonitor (true)) {
							await item.ParentWorkspace.ReloadItem (m, item);
							if (closedDocs != null)
								ReattachDocumentProjects (closedDocs);
						}
					}

					return;
				} else
					item.NeedsReload = false;
			}

			if (item is Workspace) {
				Workspace ws = (Workspace) item;
				List<WorkspaceItem> items = new List<WorkspaceItem> (ws.Items);
				foreach (WorkspaceItem it in items)
					await OnCheckWorkspaceItem (it);
			}
			else if (item is Solution) {
				Solution sol = (Solution) item;
				await OnCheckProject (sol.RootFolder);
			}
		}
Exemplo n.º 3
0
		public void CloseWorkspaceItem (WorkspaceItem item, bool closeItemFiles = true)
		{
			if (!Items.Contains (item))
				throw new InvalidOperationException ("Only top level items can be closed.");

			if (Items.Count == 1 && closeItemFiles) {
				// There is only one item, close the whole workspace
				Close (true, closeItemFiles);
				return;
			}

			if (RequestItemUnload (item)) {
				if (closeItemFiles) {
					var projects = item.GetAllItems<Project> ();
					foreach (Document doc in IdeApp.Workbench.Documents.Where (d => d.Project != null && projects.Contains (d.Project)).ToArray ()) {
						if (!doc.Close ())
							return;
					}
				}
				Items.Remove (item);
				item.Dispose ();
			}
		}