Пример #1
0
void SheetView::redraw(bool full){
	if(full){
		clear();
	}
	int i,j;
	move(0,0);
	addstr("        ");
	attron(A_REVERSE);
	for(i=0;i<COLS/8-1;i++){
		string label=centreString(columnLabel(i+scroll.column),8);
		mvaddstr(0,columnToX(i+scroll.column),label.data());
	}
	for(i=0;i<LINES-2;i++){
		string label=centreString(to_string(i+1+scroll.row),8);
		mvaddstr(rowToY(i+scroll.row),0,label.data());
	}
	attroff(A_REVERSE);
	for(i=0;i<COLS/8-1;i++){
		for(j=0;j<LINES-2;j++){
			if(CellAddress(j+scroll.row,i+scroll.column)==cursor)continue;
			redrawCell(CellAddress(j+scroll.row,i+scroll.column),false);
		}
	}
	redrawCell(cursor,true);
}
Пример #2
0
void SheetView::setCursorPosition(CellAddress addr){
	sheet.ensureSheetSize(addr.column+1,addr.row+1);
	bool didscroll=false;
	if(addr.column>=scroll.column+COLS/8-1){
		scroll.column=addr.column-(COLS/8-1)+1;
		didscroll=true;
	}
	if(addr.row>=scroll.row+LINES-2){
		scroll.row=addr.row-(LINES-2)+1;
		didscroll=true;
	}
	if(addr.column<scroll.column){
		scroll.column=addr.column;
		didscroll=true;
	}
	if(addr.row<scroll.row){
		scroll.row=addr.row;
		didscroll=true;
	}
	if(didscroll){
		cursor=addr;
		redraw();
	} else {
		CellAddress oldcursor=cursor;
		cursor=addr;
		redrawCell(oldcursor,false);
		//redraw left&right too, since the cell value might have leaked there
		if((int)oldcursor.column-(int)scroll.column<COLS/8-2){ //right
			redrawCell(CellAddress(oldcursor.row,oldcursor.column+1));
		}
		if((int)oldcursor.column-(int)scroll.column>0){ //left
			redrawCell(CellAddress(oldcursor.row,oldcursor.column-1));
		}
		displayStatusString("");
		redrawCell(cursor,true);
	}
}
Пример #3
0
Spreadsheet::CellAddress Spreadsheet::stringToAddress(const char * strAddress)
{
    static const boost::regex e("\\${0,1}([A-Z]{1,2})\\${0,1}([0-9]{1,5})");
    boost::cmatch cm;

    Q_ASSERT(strAddress != 0);

    if (boost::regex_match(strAddress, cm, e)) {
        const boost::sub_match<const char *> colstr = cm[1];
        const boost::sub_match<const char *> rowstr = cm[2];

        return CellAddress(Spreadsheet::decodeRow(rowstr.str()), Spreadsheet::decodeColumn(colstr.str()));
    }
    else
        throw Base::Exception("Invalid cell specifier.");
}