public void move(double newPosition, double threshold) { if (Math.Abs(newPosition - position) <= threshold) { if (currentOrNextItemIndex != -1) { args.Clear(); if (position < annoList[currentOrNextItemIndex].Start && newPosition >= annoList[currentOrNextItemIndex].Start) { args["label"] = annoList[currentOrNextItemIndex].Label; args["time"] = annoList[currentOrNextItemIndex].Start; args["dur"] = (double)0.0f; args["state"] = 1; args["scheme"] = annoList.Scheme.Name; trigger.call("update_enter", args); } if (newPosition > annoList[currentOrNextItemIndex].Stop) { args["label"] = annoList[currentOrNextItemIndex].Label; args["time"] = annoList[currentOrNextItemIndex].Start; args["dur"] = annoList[currentOrNextItemIndex].Duration; args["scheme"] = annoList.Scheme.Name; args["state"] = 0; trigger.call("update_leave", args); currentOrNextItemIndex++; if (currentOrNextItemIndex >= annoList.Count) { currentOrNextItemIndex = -1; } } } } else { currentOrNextItemIndex = findItem(newPosition); } position = newPosition; }
public AnnoTrigger(AnnoList annoList, PluginCaller trigger, Dictionary <string, object> args) { this.annoList = annoList; this.trigger = trigger; this.args = args; position = 0; currentOrNextItemIndex = annoList.Count == 0 ? -1 : 0; object result = trigger.call("open", args); if (result != null) { MessageTools.Error(result.ToString()); } }