+ else
+ hot_point = 0;
+ gui->point_x->update(x_text);
+ gui->point_y->update(y_text);
+ plugin->config.selected = hot_point;
+ update(hot_point);
+ gui->plugin->send_configure_change();
+ return 1;
+}
+
+int CriKeyPoints::selection_changed()
+{
+ handle_event();
+ return 1;
+}
+
+void CriKeyPoints::new_point(const char *ep, const char *xp, const char *yp, const char *tp)
+{
+ cols[PT_E].append(new BC_ListBoxItem(ep));
+ cols[PT_X].append(new BC_ListBoxItem(xp));
+ cols[PT_Y].append(new BC_ListBoxItem(yp));
+ cols[PT_T].append(new BC_ListBoxItem(tp));
+}
+
+void CriKeyPoints::del_point(int i)
+{
+ for( int n=cols[0].size()-1, c=PT_SZ; --c>=0; )
+ cols[c].remove_object_number(n-i);
+}
+
+void CriKeyPoints::set_point(int i, int c, float v)
+{
+ char s[BCSTRLEN]; sprintf(s,"%0.4f",v);
+ set_point(i,c,s);
+}
+void CriKeyPoints::set_point(int i, int c, const char *cp)
+{
+ cols[c].get(i)->set_text(cp);
+}
+
+int CriKeyPoints::set_selected(int k)
+{
+ int sz = gui->plugin->config.points.size();
+ if( !sz ) return -1;
+ bclamp(k, 0, sz-1);
+ int n = gui->points->get_selection_number(0, 0);
+ if( n >= 0 ) {
+ for( int i=0; i<PT_SZ; ++i )
+ cols[i].get(n)->set_selected(0);
+ }
+ for( int i=0; i<PT_SZ; ++i )
+ cols[i].get(k)->set_selected(1);
+ gui->cur_point->update(k);
+ return k;
+}
+void CriKeyPoints::update_list()
+{
+ int xpos = get_xposition(), ypos = get_xposition();
+ int k = get_selection_number(0, 0);
+ BC_ListBox::update(&cols[0], &titles[0],&widths[0],PT_SZ, xpos,ypos,k);
+}
+void CriKeyPoints::update(int k)
+{
+ if( k < 0 ) k = get_selection_number(0, 0);
+ gui->cur_point->update(k);
+ int xpos = get_xposition(), ypos = get_xposition();
+
+ clear();
+ ArrayList<CriKeyPoint*> &points = plugin->config.points;
+ int n = points.size();
+ for( int i=0; i<n; ++i ) {
+ CriKeyPoint *pt = points[i];
+ char etxt[BCSTRLEN]; sprintf(etxt,"%s", pt->e ? "*" : "");
+ char xtxt[BCSTRLEN]; sprintf(xtxt,"%0.4f", pt->x);
+ char ytxt[BCSTRLEN]; sprintf(ytxt,"%0.4f", pt->y);
+ char ttxt[BCSTRLEN]; sprintf(ttxt,"%d", pt->t);
+ new_point(etxt, xtxt, ytxt, ttxt);
+ }
+ if( k < n ) {
+ for( int i=PT_SZ; --i>=0; )
+ cols[i].get(k)->set_selected(1);
+ gui->point_x->update(gui->points->cols[PT_X].get(k)->get_text());
+ gui->point_y->update(gui->points->cols[PT_Y].get(k)->get_text());
+ }
+
+ BC_ListBox::update(&cols[0], &titles[0],&widths[0],PT_SZ, xpos,ypos,k);