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(); }
// 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); }
xstring xversion::x_str() const { xformat format(xformat(_X("%1%.%2%.%3%.%4%")) % major_value() % minor_value() % release_value() % build_value()); return format.str(); }