⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flv_table.cxx

📁 PIXIL is a small footprint operating environment, complete with PDA PIM applications, a browser and
💻 CXX
📖 第 1 页 / 共 3 页
字号:
	    if (edit_when() == FLV_EDIT_MANUAL)		break;	    r = row();	    c = col();	    if (r < 0 || c < 0)		break;	    cell_area(X, Y, W, H);	    stat = internal_handle(event);	    if (stat && r == row() && c == col() && x >= X && x < X + W		&& y >= Y && y < Y + H) {		start_edit();		return 1;	    }	    return 0;	}	//      If these are occur outside the editor, we don't want the	//      child widget processing them	if (x < veditor->x() || y < veditor->y()	    || x > veditor->x() + veditor->w()	    || y > veditor->y() + veditor->h())	    break;	stat = veditor->handle(event);	if (stat) {	    veditor->draw();	    return 1;	}	break;    }    if (event == FL_SHORTCUT && vediting) {	if (Fl::event_key() == FL_Enter) {	    end_edit();	    Fl::focus(this);	    //      take_focus();	    internal_handle(FL_KEYBOARD);	    damage(FL_DAMAGE_CHILD);	    return 1;	}	switch (Fl::event_key()) {	case FL_Shift_L:	case FL_Shift_R:	case FL_Control_L:	case FL_Control_R:	case FL_Meta_L:	case FL_Meta_R:	case FL_Alt_L:	case FL_Alt_R:	    break;	default:	    stat = internal_handle(FL_KEYBOARD);	}    } else {	stat = internal_handle(event);	if (!stat) {	    //      Jump start editing if automatic	    if (event == FL_KEYBOARD && !vediting		&& edit_when() == FLV_EDIT_AUTOMATIC) {		switch (Fl::event_key()) {		case FL_Shift_L:		case FL_Shift_R:		case FL_Control_L:		case FL_Control_R:		case FL_Meta_L:		case FL_Meta_R:		case FL_Alt_L:		case FL_Alt_R:		    break;		default:		    start_edit();		    if (veditor) {			stat = veditor->handle(event);			if (stat) {			    Fl::focus(veditor);			    // veditor->take_focus();			    return 1;			}		    }		    cancel_edit();		}	    }	}    }    if (vediting && veditor && Fl::focus() == this) {	Fl::focus(veditor);//              veditor->take_focus();	veditor->handle(FL_FOCUS);    }    if (stat && veditor)	veditor->draw();    return stat;}intFlv_Table::internal_handle(int event){    int TX, TY, r = 0, c, cd, rd;    Flv_Style s;    static int LX, LY;    switch (event) {    case FL_KEYBOARD:	break;    case FL_ENTER:    case FL_LEAVE:	vclicks = 0;	return Fl_Group::handle(event);    case FL_FOCUS:    case FL_UNFOCUS:	return 1;    case FL_MOVE:	TY = Fl::event_y();	TX = Fl::event_x();	if (LX - TX < -3 || LX - TX > 3 || LY - TY < -3 || LY - TY > 3) {	    LX = TX;	    LY = TY;	    vclicks = 0;	}	check_cursor();	return Fl_Group::handle(event);    case FL_RELEASE:	drag_row = drag_col = -4;	Fl_Group::handle(event);	return 1;    case FL_DRAG:	vclicks = 0;	if (check_resize())	    return 1;    case FL_PUSH:	//      Dragging not clicking	if (drag_row != -4 || drag_col != -4) {//                              Fl_Group::handle(event);	    return 1;	}	r = 0;#if FL_MAJOR_VERSION == 1	if (Fl::event_button1() && (buttons() & FLV_BUTTON1))	    r = 1;	if (Fl::event_button2() && (buttons() & FLV_BUTTON2))	    r = 1;	if (Fl::event_button3() && (buttons() & FLV_BUTTON3))	    r = 1;#else	if ((Fl::event_state() & FL_BUTTON1) && (buttons() & FLV_BUTTON1))	    r = 1;	if ((Fl::event_state() & FL_BUTTON2) && (buttons() & FLV_BUTTON2))	    r = 1;	if ((Fl::event_state() & FL_BUTTON3) && (buttons() & FLV_BUTTON3))	    r = 1;#endif	if (r == 0) {	    vclicks = 0;	    return 0;	    //return Fl_Group::handle(event);	}	//      Determine if col was clicked and highlight it	TY = Fl::event_y();	TX = Fl::event_x();	r = get_row(TX, TY);	c = get_col(TX, TY);	if ((r == -4 && c < 0) || (r < 0 && c == -4)) {	    vclicks = 0;	    return Fl_Group::handle(event);	}	if (LX - TX > -3 && LX - TX < 3 && LY - TY > -3 && LY - TY < 3)	    vclicks++;	else {	    vclicks = 1;	    LX = TX;	    LY = TY;	}	damage(FL_DAMAGE_CHILD);	rd = (r > row()? 1 : r == row()? 0 : -1);	cd = (c > col()? 1 : c == col()? 0 : -1);	if (r >= 0)	    row(r);	if (c >= 0)	    col(c);	if (!multi_select() ||	    (event == FL_PUSH && !Fl::event_state(FL_SHIFT))) {	    select_start_row(row());	    select_start_col(col());	}	//      At least one header clicked	if (r < 0 || c < 0) {	    if (r > -4 && c > -4 && r < 0 && c < 0 && r != -3) {		if (DOcb(FLVEcb_ALL_CLICKED)) {		    vwhy_event = FLVE_ALL_CLICKED;		    do_callback(this, user_data());		    vwhy_event = 0;		}		return 1;	    }	    if (c >= 0 || r == -3) {		vwhy_event = 0;		switch (r) {		case -3:		    if (DOcb(FLVEcb_TITLE_CLICKED))			vwhy_event = FLVE_TITLE_CLICKED;		    break;		case -2:		    if (DOcb(FLVEcb_ROW_FOOTER_CLICKED))			vwhy_event = FLVE_ROW_FOOTER_CLICKED;		    break;		case -1:		    if (DOcb(FLVEcb_ROW_HEADER_CLICKED))			vwhy_event = FLVE_ROW_HEADER_CLICKED;		    break;		}		if (vwhy_event) {		    do_callback(this, user_data());		    vwhy_event = 0;		    return 1;		}	    }	    if (r >= 0) {		vwhy_event = 0;		switch (c) {		case -2:		    if (DOcb(FLVEcb_COL_FOOTER_CLICKED))			vwhy_event = FLVE_COL_FOOTER_CLICKED;		    break;		case -1:		    if (DOcb(FLVEcb_COL_HEADER_CLICKED))			vwhy_event = FLVE_COL_HEADER_CLICKED;		    break;		}		if (vwhy_event) {		    do_callback(this, user_data());		    vwhy_event = 0;		    return 1;		}	    }	    return 0;	}	if (event == FL_PUSH && (rd || cd)) {	    //      Skip over locked cells	    while (!select_locked()) {		get_style(s, r, c);		if (!s.locked()) {		    if (r != row() || c != col())			vclicks = 0;		    row(r);		    col(c);		    break;		}		r += rd;		c += cd;		if (r < 0 || r >= rows() || c < 0 || c >= cols())		    break;	    }	}	if (event == FL_PUSH) {	    if (DOcb(FLVEcb_CLICKED)) {		vwhy_event = FLVE_CLICKED;		do_callback(this, user_data());		vwhy_event = 0;	    }	    if (vclicks >= vmax_clicks)		vclicks = 0;	}	return 1;    default:	return Fl_Group::handle(event);    }    switch (Fl::event_key()) {    case FL_Enter:	switch (vmove_on_enter) {	case FLV_MOVE_ON_ENTER_ROW_COL:	    if (!move_row(1)) {		row(0);		col(col() + 1);		if (!select_locked()) {		    get_style(s, r, col());		    if (!s.locked())			move_row(1);		}	    }	    return 1;	case FLV_MOVE_ON_ENTER_COL_ROW:	    if (!move_col(1)) {		col(0);		row(row() + 1);		if (!select_locked()) {		    get_style(s, r, col());		    if (!s.locked())			move_row(1);		}	    }	    return 1;	}	return 0;    case FL_Up:	if (Fl::event_state(FL_CTRL))	    move_row(-row());	else	    move_row(-1);	break;    case FL_Down:	if (Fl::event_state(FL_CTRL))	    move_row(rows());	else	    move_row(1);	break;    case FL_Page_Down:	if (Fl::event_state(FL_CTRL))	    move_row(rows());	else	    move_row(page_size());	break;    case FL_Page_Up:	if (Fl::event_state(FL_CTRL))	    move_row(-row());	else	    move_row(-page_size());	break;    case FL_Home:	//      Adjust rows before columns so we redraw everything	if (Fl::event_state(FL_CTRL))	    move_row(-rows());	move_col(-cols());	break;    case FL_End:	//      Adjust rows before columns so we redraw everything	if (Fl::event_state(FL_CTRL))	    move_row(rows());	move_col(cols());	break;    case FL_Right:	if (select_row())	    return 0;	if (Fl::event_state(FL_CTRL))	    move_col(cols());	else	    move_col(1);	break;    case FL_Left:	if (select_row())	    return 0;	if (Fl::event_state(FL_CTRL))	    move_col(-col());	else	    move_col(-1);	break;    default:	return Fl_Group::handle(event);    }    if (!multi_select() || !Fl::event_state(FL_SHIFT)) {	select_start_col(col());	select_start_row(row());    }    return 1;}intFlv_Table::row(int n){    int X, Y, W, H;    if (n >= rows())	n = rows() - 1;    if (n < 0)	n = 0;    if (n != vrow) {	vrow = n;	client_area(X, Y, W, H);	update_top_row(H);	end_edit();	if (edit_when() == FLV_EDIT_ALWAYS)	    switch_editor(row(), col());	//cancel_edit();	vlast_row = vrow;	if (DOcb(FLVEcb_ROW_CHANGED)) {	    vwhy_event = FLVE_ROW_CHANGED;	    do_callback(this, user_data());	    vwhy_event = 0;	}	damage(FL_DAMAGE_CHILD);    }    return vrow;}intFlv_Table::col(int n){    if (n >= vcols)	n = vcols - 1;    if (n < 0)	n = 0;    if (n != vcol) {	vcol = n;	end_edit();	if (edit_when() == FLV_EDIT_ALWAYS)	    switch_editor(row(), col());	//cancel_edit();	adjust_for_cell();	if (DOcb(FLVEcb_COL_CHANGED)) {	    vwhy_event = FLVE_COL_CHANGED;	    do_callback(this, user_data());	    vwhy_event = 0;	}	damage(FL_DAMAGE_CHILD);    }    return vcol;}boolFlv_Table::col_resizable(int c)	//      Get/set column locked status{    Flv_Style *s;    bool l = true;    if (global_style.resizable_defined())	l = global_style.resizable();    s = col_style.find(c);    if (s)	if (s->resizable_defined())	    l = s->resizable();    return l;}boolFlv_Table::col_resizable(bool n, int c){    col_style[c].resizable(n);    return n;}intFlv_Table::cols(int n){    if (n >= 0 && n != vcols) {	vcols = n;	if (vcol >= vcols)	    col(vcols - 1);	if (vselect_col > vcol)	    select_start_col(vcol);	update_width();	if (DOcb(FLVEcb_COLS_CHANGED)) {	    vwhy_event = FLVE_COLS_CHANGED;	    do_callback(this, user_data());	    vwhy_event = 0;	}	damage(FL_DAMAGE_CHILD);    }    return vcols;}boolFlv_Table::col_selected(int n){    if (vselect_col < vcol)	return (vselect_col <= n && n <= vcol);    else	return (vcol <= n && n <= vselect_col);}//      Get column from x,yintFlv_Table::get_col(int x, int y){    int X, Y, W, H, CX;    int rw, cw, t, Offset;    client_area(X, Y, W, H);    if (label()) {	cw = row_height(-3);	Y += cw;	H -= cw;    }    if (col_header()) {	cw = col_width(-1);	if (X <= x && x <= X + cw)	    return -1;	X += cw;	W -= cw;    }    if (col_footer()) {	cw = col_width(-2);	if (X + W >= x && x >= X + W - cw)	    return -2;	W -= cw;    }    rw = row_width();    if (!rw)	rw = W;    if (x < X || x >= X + W || y < Y || y >= Y + H	|| x > X - row_offset() + rw)	return -4;    Offset = row_offset();    for (CX = X, t = 0; t < vcols && CX - Offset < X + W; t++, CX += cw) {	cw = col_width(t);	if (x >= CX - Offset && x < CX - Offset + cw)	    return t;    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -