/// <summary> /// Update depiction style /// </summary> /// <param name="psc"></param> public void UpdateDepictions(ParsedStructureCriteria psc) { SmallWorldPredefinedParameters swp = psc.SmallWorldParameters; // new values if (Qm == null || Qm.ResultsFormatter == null || Qm.ResultsFormatter.StructureHighlightPssc == null || Qm.ResultsFormatter.StructureHighlightPssc.SmallWorldParameters == null) { return; } ResultsFormatter fmtr = Qm.ResultsFormatter; SmallWorldPredefinedParameters swp2 = // current view values fmtr.StructureHighlightPssc.SmallWorldParameters; psc.Highlight = swp2.Highlight = swp.Highlight; psc.Align = swp2.Align = swp.Align; int i = SmallWorldData.GetSvgOptionsIndex(swp2.Highlight, swp2.Align); SmallWorldDepictions d = fmtr.SmallWorldDepictions; if ((swp.Highlight || swp.Align) && d != null && i != 0 && d.SvgDict[i] == null) // need to start retrieval for depiction type we don't alread have? { d.StartDepictionRetrieval(Qm, psc.QueryColumn, swp2.Highlight, swp2.Align); return; // leave display as is for now } else // clear current decpiction so new one shows { Qm.DataTableManager.ResetFormattedValues(psc.QueryColumn); // clear existing bitmaps Qm.MoleculeGrid.RefreshDataSource(); } return; }
/// <summary> /// Start retieval of requested depiction type list for the supplied hitlist /// </summary> /// <param name="qc"></param> /// <param name="color"></param> /// <param name="align"></param> /// <param name="getAdditionalDataDelegate"></param> public void StartDepictionRetrieval( QueryManager qm, QueryColumn qc, bool color, bool align) { int i = SmallWorldData.GetSvgOptionsIndex(color, align); if (Status[i] != 0) { return; // just return if already requested } string mcName = qc.MetaColumn.MetaTableDotMetaColumnName; string command = "GetDepictions " + mcName + " " + color + " " + align; QeGetAdditionalDataDelegate gadd = new QeGetAdditionalDataDelegate(qm.QueryEngine.GetAdditionalData); DepictionRetrievalArgs a = new DepictionRetrievalArgs(); a.qm = qm; a.qc = qc; a.color = color; a.align = align; a.reqId = ++CurrentRequestId; a.startTime = DateTime.Now; Status[i] = a.reqId; // indicate requested if (Debug) { DebugLog.Message("StartDepictionRetrieval " + CurrentRequestId + ", Mc " + mcName + ", Hilight " + color + ", Align " + align); } gadd.BeginInvoke(command, new AsyncCallback(DepictionRetrievalComplete), a); return; }
/// <summary> /// Get depiction for a Cid if available on client /// </summary> /// <param name="hitListId"></param> /// <param name="rowId"></param> /// <param name="color"></param> /// <param name="align"></param> /// <returns></returns> public string GetDepiction( string cid, bool color, bool align) { int i = SmallWorldData.GetSvgOptionsIndex(color, align); if (SvgDict[i] == null) { return(null); } if (!SvgDict[i].ContainsKey(cid)) { return(""); } string xml = SvgDict[i][cid]; return(xml); }
/// <summary> /// Retrieval complete. Update cache and request display of values /// </summary> /// <param name="r"></param> void DepictionRetrievalComplete(IAsyncResult r) { try { QeGetAdditionalDataDelegate d = (r as AsyncResult).AsyncDelegate as QeGetAdditionalDataDelegate; DepictionRetrievalArgs a = r.AsyncState as DepictionRetrievalArgs; int i = SmallWorldData.GetSvgOptionsIndex(a.color, a.align); Status[i] = -Status[i]; // set to negative to indicate complete string depictionsListString = d.EndInvoke(r) as string; SvgDict[i] = Deserialize(depictionsListString); int count = SvgDict[i].Count; if (Debug) { DebugLog.Message("DepictionRetrievalComplete " + a.reqId + ", Current: " + (a.reqId == CurrentRequestId) + ", Count: " + count + ", Time: " + LogFile.FormatElapsedTimeInMs(a.startTime)); } if (a.reqId == CurrentRequestId) // if latest request then display { QueryManager qm = a.qm; MoleculeGridControl grid = qm.MoleculeGrid; if (grid.InvokeRequired) // use invoke if not on UI thread { grid.Invoke(new MethodInvoker(grid.RefreshDataSourceMx)); } else { grid.RefreshDataSourceMx(); } } } catch (Exception ex) { DebugLog.Message("DepictionRetrievalComplete exception: " + DebugLog.FormatExceptionMessage(ex)); } }