Пример #1
0
void em_Event( em_event_t evnt )
{
//signed char (*p_func_s)( signed char);
//unsigned char (*p_func_u)( unsigned char);

char v_char;
char vis_buf[5];
	if ( selected == FALSE) {
	// ######## UNSELECTED #################
		switch(evnt) {
		//==================================
			case em_press:
				switch(p_Act_item->type) {
				// -------------------------
					case submenu:
						selected = FALSE;
						active_pos = 0;
						p_Itm_entry = p_Act_item->item; // Entry point to submenu
						p_Act_item =  p_Itm_entry; // place user pointer to first line
						break;
				// -------------------------
					case schar:
//						p_func_s = p_Act_item->item;
//						v_char = (*p_func_s)(0);
						v_char = ((signed char (*)(signed char))p_Act_item->item)(0);
						xformat( vis_buf, 0, v_char);
						lcd_print( 9, active_pos, vis_buf );
						selected = TRUE;
						break;
				// -------------------------
					case uchar:
						lcd_pchar(1, 5, 'U');
//						p_func_s = p_Act_item->item;
//						v_char = (*p_func_u)(0);
						v_char = ((unsigned char (*)(signed char))p_Act_item->item)(0);

						xformat( vis_buf, 1, v_char);
						lcd_print( 9, active_pos, vis_buf );
						selected = TRUE;
						break;
				// -------------------------
				//	case str:
				//		break;
				}
				break;
		//==================================
			case em_up:
				active_pos--;
				break;
		//==================================
			case em_down:
				active_pos++;
				break;
		//==================================
		}
	} else {
	// ######## SELECTED ###################
		switch(evnt) {
		//==================================
			case em_press:
				switch(p_Act_item->type) {
				// -------------------------
					case submenu:
						selected = FALSE;
						active_pos = 0;
						p_Itm_entry = p_Act_item->item; // Entry point to submenu
						p_Act_item =  p_Itm_entry; // place user pointer to first line
						break;
				// -------------------------
					case schar:
//						p_func_s = p_Act_item->item;
//						v_char = (*p_func_s)(0);
						v_char = ((signed char (*)(signed char))p_Act_item->item)(0);
						xformat( vis_buf, 0, v_char);
						lcd_print( 9, active_pos, vis_buf );
						selected = FALSE;
						break;
				// -------------------------
					case uchar:
						lcd_pchar(4, 5, '*');
//						p_func_s = p_Act_item->item;
//						v_char = (*p_func_u)(0);
						v_char = ((unsigned char (*)(signed char))p_Act_item->item)(0);

						xformat( vis_buf, 1, v_char);
						lcd_print( 9, active_pos, vis_buf );
						lcd_pchar(4, 6, '=');
						selected = FALSE;
						break;
				// -------------------------
				//	case str:
				//		break;
				}
				break;
		//==================================
			case em_up:
				switch(p_Act_item->type) {
				// -------------------------
					case submenu:
						break;
				// -------------------------
					case schar:
//						p_func_s = p_Act_item->item;
//						v_char = (*p_func_s)(1);
						v_char = ((signed char (*)(signed char))p_Act_item->item)(1);
						xformat( vis_buf, 0, v_char);
						lcd_print( 9, active_pos, vis_buf );
						break;
				// -------------------------
					case uchar:
						lcd_pchar(1, 5, '<');
						//p_func_s = p_Act_item->item;
						//v_char = (*p_func_u)(1);
						v_char = ((unsigned char (*)(signed char))p_Act_item->item)(1);
						xformat( vis_buf, 0, v_char);
						lcd_print( 9, active_pos, vis_buf );
						break;
				}
				break;
		//==================================
			case em_down:
				switch(p_Act_item->type) {
				// -------------------------
					case submenu:
						break;
				// -------------------------
					case schar:
//						p_func_s = p_Act_item->item;
//						v_char = (*p_func_s)(-1);
						v_char = ((signed char (*)(signed char))p_Act_item->item)(-1);
						xformat( vis_buf, 0, v_char);
						lcd_print( 9, active_pos, vis_buf );
						break;
				// -------------------------
					case uchar:
						lcd_pchar(1, 5, '>');
//						p_func_s = p_Act_item->item;
//						v_char = (*p_func_u)(-1);
						v_char = ((unsigned char (*)(signed char))p_Act_item->item)(-1);
						xformat( vis_buf, 0, v_char);
						lcd_print( 9, active_pos, vis_buf );
						break;
				}
				break;
		//==================================
		}
	}
	em_Show();
}
Пример #2
0
// big task: convert Excel XFormat into Swinder::Format
const Format* GlobalsSubStreamHandler::convertedFormat(unsigned index) const
{
    static const Format blankFormat;
    if (index >= xformatCount()) return &blankFormat;

    int& formatIt = d->formatCache[index];
    if (formatIt) return workbook()->format(formatIt-1);
    Format format;

    XFRecord xf = xformat(index);

    QString valueFormat = this->valueFormat(xf.formatIndex());
    if (valueFormat.isEmpty()) {
        const unsigned ifmt = xf.formatIndex();
        switch (ifmt) {
        case  0:  valueFormat = "General"; break;
        case  1:  valueFormat = "0"; break;
        case  2:  valueFormat = "0.00"; break;
        case  3:  valueFormat = "#,##0"; break;
        case  4:  valueFormat = "#,##0.00"; break;
        case  5:  valueFormat = "\"$\"#,##0_);(\"S\"#,##0)"; break;
        case  6:  valueFormat = "\"$\"#,##0_);[Red](\"S\"#,##0)"; break;
        case  7:  valueFormat = "\"$\"#,##0.00_);(\"S\"#,##0.00)"; break;
        case  8:  valueFormat = "\"$\"#,##0.00_);[Red](\"S\"#,##0.00)"; break;
        case  9:  valueFormat = "0%"; break;
        case 10:  valueFormat = "0.00%"; break;
        case 11:  valueFormat = "0.00E+00"; break;
        case 12:  valueFormat = "#?/?"; break;
        case 13:  valueFormat = "#\?\?/\?\?"; break;
        case 14:  valueFormat = "M/D/YY"; break;
        case 15:  valueFormat = "D-MMM-YY"; break;
        case 16:  valueFormat = "D-MMM"; break;
        case 17:  valueFormat = "MMM-YY"; break;
        case 18:  valueFormat = "h:mm AM/PM"; break;
        case 19:  valueFormat = "h:mm:ss AM/PM"; break;
        case 20:  valueFormat = "h:mm"; break;
        case 21:  valueFormat = "h:mm:ss"; break;
        case 22:  valueFormat = "M/D/YY h:mm"; break;
        case 37:  valueFormat = "_(#,##0_);(#,##0)"; break;
        case 38:  valueFormat = "_(#,##0_);[Red](#,##0)"; break;
        case 39:  valueFormat = "_(#,##0.00_);(#,##0)"; break;
        case 40:  valueFormat = "_(#,##0.00_);[Red](#,##0)"; break;
        case 41:  valueFormat = "_(\"$\"*#,##0_);_(\"$\"*#,##0_);_(\"$\"*\"-\");(@_)"; break;
        case 42:  valueFormat = "_(*#,##0_);(*(#,##0);_(*\"-\");_(@_)"; break;
        case 43:  valueFormat = "_(\"$\"*#,##0.00_);_(\"$\"*#,##0.00_);_(\"$\"*\"-\");(@_)"; break;
        case 44:  valueFormat = "_(\"$\"*#,##0.00_);_(\"$\"*#,##0.00_);_(\"$\"*\"-\");(@_)"; break;
        case 45:  valueFormat = "mm:ss"; break;
        case 46:  valueFormat = "[h]:mm:ss"; break;
        case 47:  valueFormat = "mm:ss.0"; break;
        case 48:  valueFormat = "##0.0E+0"; break;
        case 49:  valueFormat = "@"; break;
        default: {
            if (ifmt >= 164 && ifmt <= 392) {  // custom format
                valueFormat = d->formatsTable[ifmt];
            } else {
                std::cout << "Unhandled format with index " << xf.formatIndex() << ". Using general format." << std::endl;
                valueFormat = "General";
            }
        }
        break;
        }
    }

    format.setValueFormat(valueFormat);

    format.setFont(d->workbook->font(xf.fontIndex()));

    FormatAlignment alignment;
    switch (xf.horizontalAlignment()) {
    case XFRecord::Left:
        alignment.setAlignX(Format::Left); break;
    case XFRecord::Right:
        alignment.setAlignX(Format::Right); break;
    case XFRecord::Centered:
        alignment.setAlignX(Format::Center); break;
    case XFRecord::Justified:
        alignment.setAlignX(Format::Justify); break;
    case XFRecord::Distributed:
        alignment.setAlignX(Format::Distributed); break;
    case XFRecord::Filled:
    case XFRecord::CenteredSelection:
    default: break;
        // FIXME still unsupported: CenteredSelection, Filled
    }

    switch (xf.verticalAlignment()) {
    case XFRecord::Top:
        alignment.setAlignY(Format::Top); break;
    case XFRecord::VCentered:
        alignment.setAlignY(Format::Middle); break;
    case XFRecord::Bottom:
        alignment.setAlignY(Format::Bottom); break;
    case XFRecord::VJustified:
        alignment.setAlignY(Format::VJustify); break;
    case XFRecord::VDistributed:
        alignment.setAlignY(Format::VDistributed); break;
    default: break;
        // FIXME still unsupported: Justified, Distributed
    }

    alignment.setWrap(xf.isTextWrap());

    unsigned angle = xf.rotationAngle();
    if (angle > 90) angle = 360 - (angle - 90);
    alignment.setRotationAngle(angle);

    alignment.setStackedLetters(xf.stackedLetters());
    alignment.setShrinkToFit(xf.isShrinkToFit());

    alignment.setIndentLevel(xf.indentationLevel());

    format.setAlignment(alignment);

    FormatBorders borders;

    Pen pen;
    pen = convertBorderStyle(xf.leftBorderStyle());
    pen.color = d->workbook->color(xf.leftBorderColor());
    borders.setLeftBorder(pen);

    pen = convertBorderStyle(xf.rightBorderStyle());
    pen.color = d->workbook->color(xf.rightBorderColor());
    borders.setRightBorder(pen);

    pen = convertBorderStyle(xf.topBorderStyle());
    pen.color = d->workbook->color(xf.topBorderColor());
    borders.setTopBorder(pen);

    pen = convertBorderStyle(xf.bottomBorderStyle());
    pen.color = d->workbook->color(xf.bottomBorderColor());
    borders.setBottomBorder(pen);

    if(xf.isDiagonalTopLeftBorder()) {
        pen = convertBorderStyle(xf.diagonalBorderStyle());
        pen.color = d->workbook->color(xf.diagonalBorderColor());
        borders.setTopLeftBorder(pen);
    }

    if(xf.isDiagonalBottomLeftBorder()) {
        pen = convertBorderStyle(xf.diagonalBorderStyle());
        pen.color = d->workbook->color(xf.diagonalBorderColor());
        borders.setBottomLeftBorder(pen);
    }

    format.setBorders(borders);

    FormatBackground background;
    background.setForegroundColor(d->workbook->color(xf.patternForeColor()));
    background.setBackgroundColor(d->workbook->color(xf.patternBackColor()));
    background.setPattern(convertPatternStyle(xf.fillPattern()));
    format.setBackground(background);

    formatIt = workbook()->addFormat(format) + 1;
    return workbook()->format(formatIt-1);
}
Пример #3
0
xstring xversion::x_str() const
{
    xformat format(xformat(_X("%1%.%2%.%3%.%4%")) % major_value() %
           minor_value() % release_value() % build_value());
    return format.str();
}