internal void ReleasePad(SearchResultPad pad)
 {
     lock (searchMonitors) {
         searchMonitors.Add (pad);
     }
 }
 public SearchProgressMonitor(SearchResultPad pad, string title)
 {
     pad.AsyncOperation = this.AsyncOperation;
     outputPad = pad;
     outputPad.BeginProgress (title);
 }
        public ISearchProgressMonitor GetSearchProgressMonitor(bool bringToFront)
        {
            SearchResultPad pad = null;
            string title = GettextCatalog.GetString ("Search Results");

            lock (searchMonitors) {
                // Look for an available pad
                for (int n=0; n<searchMonitors.Count; n++) {
                    SearchResultPad mpad = (SearchResultPad) searchMonitors [n];
                    if (mpad.AllowReuse) {
                        pad = mpad;
                        searchMonitors.RemoveAt (n);
                        break;
                    }
                }
            }
            if (pad != null) {
                if (bringToFront) Runtime.Gui.Workbench.BringToFront (pad);
                return new SearchProgressMonitor (pad, title);
            }

            SearchResultPad monitorPad = new SearchResultPad ();
            monitorPad.Id = "SearchPad" + (monitorId++);
            Runtime.Gui.Workbench.ShowPad (monitorPad);
            if (bringToFront) Runtime.Gui.Workbench.BringToFront (monitorPad);

            return new SearchProgressMonitor (monitorPad, title);
        }
        protected override void OnCompleted()
        {
            if (outputPad == null) throw GetDisposedException ();
            outputPad.WriteText ("\n");

            foreach (string msg in SuccessMessages)
                outputPad.WriteText (msg + "\n");

            foreach (string msg in Warnings)
                outputPad.WriteText (msg + "\n");

            foreach (string msg in Errors)
                outputPad.WriteText (msg + "\n");

            outputPad.EndProgress ();
            base.OnCompleted ();

            Runtime.TaskService.ReleasePad (outputPad);
            outputPad = null;
        }