void down_single_click_handler(ClickRecognizerRef recognizer, Window *window) { (void)recognizer; (void)window; page = page < (pageSize - 1) ? page + 1 : 0; drawPage(page); }
void up_single_click_handler(ClickRecognizerRef recognizer, Window *window) { (void)recognizer; (void)window; page = page > 0 ? page - 1 : (pageSize - 1); drawPage(page); }
void updateCenter(AppState & state) { Point bottomLeft = state.convertBufferToScreen(Point(0,0)); Point topRight = state.convertBufferToScreen(Point(MY_BG_W,MY_BG_H)); Point newCenter = state.convertScreenToImage(Point(SCREEN_WIDTH/2, SCREEN_HEIGHT/2)); // printf("--------------\n"); // printf("%d %d\n", bottomLeft.x, bottomLeft.y); // printf("%d %d\n", topRight.x, topRight.y); // printf("%d %d\n", newCenter.x, newCenter.y); if (bottomLeft.x > 0 || bottomLeft.y > 0 || topRight.x < SCREEN_WIDTH || topRight.y < SCREEN_HEIGHT) { //Point newCenter = state.convertScreenToImage(Point(SCREEN_WIDTH/2, SCREEN_HEIGHT/2)); state.scroll_x = MY_BG_W/2-SCREEN_WIDTH/2; state.scroll_y = MY_BG_H/2-SCREEN_HEIGHT/2; state.center_x = newCenter.x; state.center_y = newCenter.y; // printf("%d %d\n", state.center_x, state.center_y); bgHide(3); fillDisplay(RGB15(0,0,0) | BIT(15), state.lastPage, state); drawPage(state.currentPage, RGB15(31,0,0) | BIT(15), state); } bgSetScroll(3, state.scroll_x, state.scroll_y); bgUpdate(); bgShow(3); }
void KoPagePreviewWidget::paintEvent(QPaintEvent *event) { Q_UNUSED(event); // resolution[XY] is in pixel per pt qreal resolutionX = POINT_TO_INCH( static_cast<qreal>(KoDpi::dpiX()) ); qreal resolutionY = POINT_TO_INCH( static_cast<qreal>(KoDpi::dpiY()) ); qreal pageWidth = d->pageLayout.width * resolutionX; qreal pageHeight = d->pageLayout.height * resolutionY; const bool pageSpread = (d->pageLayout.bindingSide >= 0 && d->pageLayout.pageEdge >= 0); qreal sheetWidth = pageWidth / (pageSpread?2:1); qreal zoomH = (height() * 90 / 100) / pageHeight; qreal zoomW = (width() * 90 / 100) / pageWidth; qreal zoom = qMin( zoomW, zoomH ); pageWidth *= zoom; sheetWidth *= zoom; pageHeight *= zoom; QPainter painter( this ); QRect page = QRectF((width() - pageWidth) / 2.0, (height() - pageHeight) / 2.0, sheetWidth, pageHeight).toRect(); painter.save(); drawPage(painter, zoom, page, true); painter.restore(); if(pageSpread) { page.moveLeft(page.left() + (int) (sheetWidth)); painter.save(); drawPage(painter, zoom, page, false); painter.restore(); } painter.end(); // paint scale }
int displayMenu(int *keyPressed, int *inputBoxPressed, int *buttonPressed, int * sdBoxPressed) { int validPress = 0; Point p; int choice = -1; int checkButtonPressed = -1; int checkKeyPressed = -1; int checkInputBoxPressed = -1; int checkSDBoxPressed = -1; // if we are outside the area, we will draw the panic page over home page if (panicFlag == 1) { if (globalCurrentPage == home) { globalCurrentPage = panic; } } drawPage(globalCurrentPage); while (validPress == 0) { //pen down GetPress(&p); checkButtonPressed = validpress(p, *globalCurrentPage, buttonPressed); checkKeyPressed = validkeypress(p, *globalCurrentPage, keyPressed); checkInputBoxPressed = validinputboxpress(p, *globalCurrentPage, inputBoxPressed); checkSDBoxPressed = validsdboxpress(p, *globalCurrentPage, sdBoxPressed); if (checkButtonPressed != -1 || checkKeyPressed != -1 || checkInputBoxPressed != -1 || checkSDBoxPressed != -1) { validPress = 1; } *keyPressed = -1; *inputBoxPressed = -1; *buttonPressed = -1; *sdBoxPressed = -1; if (validPress == 1) { validPress = 0; //pen up GetRelease(&p); choice = checkChoice(p, globalCurrentPage, keyPressed, inputBoxPressed, buttonPressed, sdBoxPressed); if (choice != -1 || *keyPressed != -1 || *buttonPressed != -1 || *inputBoxPressed != -1 || *sdBoxPressed != -1) { validPress = 1; } } } return choice; }
void handle_init(AppContextRef ctx) { (void)ctx; window_init(&window, "Window Name"); window_stack_push(&window, true /* Animated */); window_set_fullscreen(&window, true); window_set_background_color(&window, GColorBlack); resource_init_current_app(&APP_RESOURCES); text_layer_init(&text_layer, window.layer.frame); text_layer_set_text_color(&text_layer, GColorWhite); text_layer_set_background_color(&text_layer, GColorClear); text_layer_set_font(&text_layer, fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_9))); layer_add_child(&window.layer, &text_layer.layer); populateTexts(); drawPage(page); window_set_click_config_provider(&window, (ClickConfigProvider) config_provider); }
void UI::updateValues() { drawTitlebar(m_data->time_hour, m_data->time_minute, m_data->time_second, batteryPercentage(m_data->battery_voltage)); // debug //m_lcd->drawStringF(0,312, 1, RED, WHITE, "%2.2f %d ", m_data->battery_voltage, m_data->geiger_voltage); switch (m_page) { case PAGE_MEASURE: { m_lcd->drawStringF(8, 40, 2, BLUE, WHITE, "%2.2f%cC", m_data->bmp180_temp,247); m_lcd->drawStringF(8, 72, 2, BLUE, WHITE, "%4uhPa", m_data->bmp180_pressure / 100); m_lcd->drawStringF(8, 104, 2, BLUE, WHITE, "%4.2fm", m_data->bmp180_altitude); m_lcd->drawStringF(8, 136, 2, PURPLE, WHITE, "%2.2fmgm%c", m_data->gp2y10_dust, 254); m_lcd->drawStringF(8, 168, 2, DARKGREEN, WHITE, "%4.2fppm", m_data->vz89_co2); m_lcd->drawStringF(8, 200, 2, DARKGREEN, WHITE, "%4.2fppb", m_data->vz89_voc); m_lcd->drawStringF(8, 232, 2, RED, WHITE, "%luCPM", m_data->geiger_cpm); float bmp180_temp = m_data->getBMP180Temp_scaled(), bmp180_altitude = m_data->getBMP180Altitude_scaled(), gp2y10_dust = m_data->getGP2Y10Dust_scaled(), vz89_co2 = m_data->getVZ89CO2_scaled() , vz89_voc = m_data->getVZ89VOC_scaled(); uint32_t bmp180_pressure = m_data->getBMP180Pressure_scaled(), geiger_cpm = m_data->getGeigerCPM_scaled(); if (m_chartX == 120) { m_lcd->drawPixel(m_chartX, 64 - bmp180_temp, BLUE); m_lcd->drawPixel(m_chartX, 96 - bmp180_pressure, BLUE); m_lcd->drawPixel(m_chartX,128 - bmp180_altitude, BLUE); m_lcd->drawPixel(m_chartX,160 - gp2y10_dust, PURPLE); m_lcd->drawPixel(m_chartX,192 - vz89_co2, DARKGREEN); m_lcd->drawPixel(m_chartX,224 - vz89_voc, DARKGREEN); m_lcd->drawPixel(m_chartX,256 - geiger_cpm, RED); } else { m_lcd->drawLine(m_chartX, 64 - m_data->bmp180_temp_last, m_chartX, 64 - bmp180_temp, BLUE); m_lcd->drawLine(m_chartX, 96 - m_data->bmp180_pressure_last, m_chartX, 96 - bmp180_pressure, BLUE); m_lcd->drawLine(m_chartX, 128 - m_data->bmp180_altitude_last, m_chartX, 128 - bmp180_altitude, BLUE); m_lcd->drawLine(m_chartX, 160 - m_data->gp2y10_dust_last, m_chartX, 160 - gp2y10_dust, PURPLE); m_lcd->drawLine(m_chartX, 192 - m_data->vz89_co2_last, m_chartX, 192 - vz89_co2, DARKGREEN); m_lcd->drawLine(m_chartX, 224 - m_data->vz89_voc_last, m_chartX, 224 - vz89_voc, DARKGREEN); m_lcd->drawLine(m_chartX, 256 - m_data->geiger_cpm_last, m_chartX, 256 - geiger_cpm, RED); } if (m_chartX < 240) { m_chartX ++; // clear in front m_lcd->drawRectFilled(m_chartX, 32, 1, 225, WHITE); // save last values m_data->bmp180_temp_last = bmp180_temp; m_data->bmp180_pressure_last = bmp180_pressure; m_data->bmp180_altitude_last = bmp180_altitude; m_data->gp2y10_dust_last = gp2y10_dust; m_data->vz89_co2_last = vz89_co2; m_data->vz89_voc_last = vz89_voc; m_data->geiger_cpm_last = geiger_cpm; } else m_chartX = 120; } break; case PAGE_MONITOR: { m_lcd->drawStringF(8, 104, 2, BLUE, WHITE, "Sent: %09luB", m_data->serial_sent); m_lcd->drawStringF(8, 120, 2, BLUE, WHITE, "Received:%09luB", m_data->serial_recv); m_lcd->drawStringF(8, 168, 2, DARKGREEN, WHITE, "Sent: %09luB", m_data->wlan_sent); m_lcd->drawStringF(8, 184, 2, DARKGREEN, WHITE, "Received:%09luB", m_data->wlan_recv); m_lcd->drawStringF(8, 216, 2, BLACK, WHITE, "Tube: %3uV", m_data->geiger_voltage); m_lcd->drawStringF(8, 232, 2, BLACK, WHITE, "Battery: %2.2fV", m_data->battery_voltage); } break; case PAGE_SETTINGS: { // nothing to update here } break; case PAGE_CALIBRATE: { m_lcd->drawStringF(CENTERX, CENTERY, 2, BLUE, WHITE, "%04d,%04d,%04d", m_touch->lastRawX, m_touch->lastRawY, m_touch->lastRawZ); m_lcd->drawPixel(m_touchX, m_touchY,3, RED); } break; case PAGE_WLAN: { if (m_butCount != m_data->freeAPCount + 1) // count the back button drawPage(PAGE_WLAN); } } }
void SpellBookView::draw() { Gfx::draw(LSI(SPELLS,0), 16, 11); drawPage(0); drawPage(1); }
int main(void) { consoleDemoInit(); //videoSetMode(MODE_FB0); videoSetMode( MODE_5_2D ); vramSetBankA(VRAM_A_MAIN_BG); vramSetBankB(VRAM_B_MAIN_BG); // vramSetBankC(VRAM_C_MAIN_BG); // vramSetBankD(VRAM_D_MAIN_BG_0x06040000); int bg = bgInit(3, BgType_Bmp8, BgSize_B8_512x512, 0,0); //vramSetBankA(VRAM_A_LCD); lcdMainOnBottom(); // lcdMainOnTop(); printf("Video modes configured\n"); printf("BG ID %d\n", bg); if (fatInitDefault()) printf("FAT initialized\n"); else printf("FAT initialization failed\n"); AppState state; uiOpenNotebook(state); // Keyboard *kbd = keyboardDemoInit(); Segment * currentSegment = NULL; touchPosition touch; while (1) { scanKeys(); if(keysHeld() & KEY_TOUCH) { // write the touchscreen coordinates in the touch variable touchRead(&touch); Point screenPoint = Point(touch.px, touch.py); Point imagePoint = state.convertScreenToImage(screenPoint); if (currentSegment == NULL) { state.currentPage->segments.push_back(Segment()); currentSegment = &(state.currentPage->segments[state.currentPage->segments.size()-1]); currentSegment->points.push_back(imagePoint); continue; } Point lastImagePoint = currentSegment->points[currentSegment->points.size()-1]; currentSegment->points.push_back(imagePoint); Point bufferPoint = state.convertScreenToBuffer(screenPoint); Point lastBufferPoint = state.convertImageToBuffer(lastImagePoint); drawLine(lastBufferPoint.x, lastBufferPoint.y, bufferPoint.x, bufferPoint.y, RGB15(31,0,0) | BIT(15)); } else { currentSegment = NULL; } if (keysDown() & KEY_X) { int page = state.lastPage+1; while (state.notebook.pages.size() < page+1) { state.notebook.pages.push_back(Page()); printf("New Page created\n"); } state.currentPage = &(state.notebook.pages[page]); currentSegment = NULL; printf("Display page %d\n", page); fillDisplay(RGB15(0,0,0) | BIT(15), page, state); drawPage(state.currentPage, RGB15(31,0,0) | BIT(15), state); } if (keysDown() & KEY_Y) { int page = 0; if (state.lastPage > 0) { page = state.lastPage-1; } state.currentPage = &(state.notebook.pages[page]); currentSegment = NULL; printf("Display page %d\n", page); fillDisplay(RGB15(0,0,0) | BIT(15), page, state); drawPage(state.currentPage, RGB15(31,0,0) | BIT(15), state); } if (keysDown() & KEY_A) { int page = 0; std::string fileName = state.notebookName + "/notes.txt"; state.notebook = loadFile(fileName.c_str()); state.currentPage = &(state.notebook.pages[page]); currentSegment = NULL; printf("Display page %d\n", page); fillDisplay(RGB15(0,0,0) | BIT(15), page, state); drawPage(state.currentPage, RGB15(31,0,0) | BIT(15), state); } if (keysDown() & KEY_B) { std::string fileName = state.notebookName + "/notes.txt"; saveFile(fileName.c_str(), state.notebook); } if (keysDown() & KEY_LEFT) { state.scroll_x-=50; updateCenter(state); } if (keysDown() & KEY_RIGHT) { state.scroll_x+=50; updateCenter(state); } if (keysDown() & KEY_UP) { state.scroll_y-=50; updateCenter(state); } if (keysDown() & KEY_DOWN) { state.scroll_y+=50; updateCenter(state); } if (keysDown() & KEY_START) { uiOpenNotebook(state); } swiWaitForVBlank(); } }
void uiOpenNotebook(AppState & state) { lcdMainOnTop(); DIR_ITER* dir = diropen (MAINPATH); if (dir == NULL) { printf("Marginalia data not found\n"); return; } printf("\x1b[2J"); printf("Select notebook to open\n(Press Select to create NEW)"); struct stat st; char filename[MAXPATHLEN]; int i=0; std::vector<std::string> notebooks; while (dirnext(dir, filename, &st) == 0) { // st.st_mode & S_IFDIR indicates a directory // if (!(st.st_mode & S_IFDIR)) // continue; // if (strcmp(filename, "..") == 0) // continue; // if (strcmp(filename, ".") == 0) // continue; printf ("\x1b[%d;3H%d) %s\n", i+3, i, filename); notebooks.push_back(filename); i++; } dirclose (dir); int selected = 0; printf ("\x1b[%d;6H*", selected+3); while (1) { scanKeys(); if(keysHeld() & KEY_TOUCH) { } if (keysDown() & KEY_X) { } if (keysDown() & KEY_Y) { } if (keysDown() & KEY_SELECT) { printf ("\x1b[10;1H Insert new Directory Name"); char newName[256]; Keyboard *kbd = keyboardDemoInit(); scanf("%s", newName); printf ("\x1b[11;1H Creating directory %s", newName); state.notebookName = newName; if (mkdir(state.notebookName.c_str(), S_IRWXU|S_IRGRP|S_IXGRP) != 0) { printf ("\x1b[12;1H directory creation failed"); continue; } state.lastPage = -1; state.scroll_x = 0; state.scroll_y = 0; state.center_x = MY_BG_W/2; state.center_y = MY_BG_H/2; fillDisplay(RGB15(0,0,0) | BIT(15), 0, state); std::string fileName = state.notebookName + "/notes.txt"; state.notebook = loadFile(fileName.c_str()); state.currentPage = &(state.notebook.pages[0]); drawPage(state.currentPage, RGB15(31,31,31) | BIT(15), state); lcdMainOnBottom(); return; } if (keysDown() & KEY_A) { printf ("\x1b[20;6H opening %s\n", notebooks[selected].c_str()); state.lastPage = -1; state.scroll_x = 0; state.scroll_y = 0; state.center_x = MY_BG_W/2; state.center_y = MY_BG_H/2; state.notebookName = notebooks[selected]; fillDisplay(RGB15(0,0,0) | BIT(15), 0, state); std::string fileName = state.notebookName + "/notes.txt"; state.notebook = loadFile(fileName.c_str()); state.currentPage = &(state.notebook.pages[0]); drawPage(state.currentPage, RGB15(31,31,31) | BIT(15), state); lcdMainOnBottom(); return; } if (keysDown() & KEY_B) { } if (keysDown() & KEY_LEFT) { } if (keysDown() & KEY_RIGHT) { } if (keysDown() & KEY_UP) { printf ("\x1b[%d;6H ", selected+3); selected -= 1; printf ("\x1b[%d;6H*", selected+3); } if (keysDown() & KEY_DOWN) { printf ("\x1b[%d;6H ", selected+3); selected += 1; printf ("\x1b[%d;6H*", selected+3); } swiWaitForVBlank(); } }
void Gui::exportAs(QString &suffix) { float pageWidth = page.meta.LPub.page.size.value(0); float pageHeight = page.meta.LPub.page.size.value(1); if (page.meta.LPub.resolution.type() == DPI) { // convert to MM pageWidth = int(inches2centimeters(pageWidth)*10); pageHeight = int(inches2centimeters(pageHeight)*10); } QPrinter::PaperSize paperSize = QPrinter::PaperSize(); QPrinter::Orientation orientation = QPrinter::Orientation(); int bestSize; bestSize = bestPaperSizeOrientation(pageWidth,pageHeight,paperSize,orientation); // Convert closest page size to pixels for bounding rect if (orientation == QPrinter::Portrait) { pageWidth = paperSizes[bestSize].width/10.0; // in centimeters pageHeight = paperSizes[bestSize].height/10.0; // in centimeters } else { pageWidth = paperSizes[bestSize].height/10.0; // in centimeters pageHeight = paperSizes[bestSize].width/10.0; // in centimeters } if (resolutionType() == DPI) { pageWidth = centimeters2inches(pageWidth); pageHeight = centimeters2inches(pageHeight); } pageWidth *= resolution(); pageHeight *= resolution(); if (resolutionType() == DPCM) { pageWidth = centimeters2inches(pageWidth); pageHeight = centimeters2inches(pageHeight); } QGraphicsScene scene; LGraphicsView view(&scene); int savePageNumber = displayPageNum; QFileInfo fileInfo(curFile); QString baseName = fileInfo.baseName(); //clearPage(KpageView,KpageScene); // Strangeness needing to warm up the process? QImage image(pageWidth,pageHeight,QImage::Format_ARGB32); for (displayPageNum = 1; displayPageNum <= maxPages && displayPageNum < 6; displayPageNum++) { qApp->processEvents(); QRect bounding(0,0,pageWidth,pageHeight); view.setGeometry(bounding); view.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing | QPainter::SmoothPixmapTransform); view.scale(1.0,1.0); QRectF boundingRect(0.0,0.0,pageWidth,pageHeight); view.centerOn(boundingRect.center()); drawPage(&view,&scene,true); QPainter painter; painter.begin(&image); view.render(&painter); QString pn = QString("%1") .arg(displayPageNum); image.save(baseName + "_page_" +pn + suffix); painter.end(); clearPage(&view,&scene); } for (displayPageNum = 1; displayPageNum <= maxPages; displayPageNum++) { qApp->processEvents(); QRect bounding(0,0,pageWidth,pageHeight); view.setGeometry(bounding); view.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing | QPainter::SmoothPixmapTransform); view.scale(1.0,1.0); QRectF boundingRect(0.0,0.0,pageWidth,pageHeight); view.centerOn(boundingRect.center()); drawPage(&view,&scene,true); QPainter painter; painter.begin(&image); view.render(&painter); QString pn = QString("%1") .arg(displayPageNum); image.save(baseName + "_page_" +pn + suffix); painter.end(); clearPage(&view,&scene); } displayPageNum = savePageNumber; drawPage(KpageView,KpageScene,false); }
void Gui::printToFile() { float pageWidth = page.meta.LPub.page.size.value(0); float pageHeight = page.meta.LPub.page.size.value(1); if (page.meta.LPub.resolution.type() == DPI) { // convert to MM pageWidth = int(inches2centimeters(pageWidth)); pageHeight = int(inches2centimeters(pageHeight)); } pageWidth *= 10; // convert to mm pageHeight *= 10; QPrinter::PaperSize paperSize = QPrinter::PaperSize(); QPrinter::Orientation orientation = QPrinter::Orientation(); int bestSize; bestSize = bestPaperSizeOrientation(pageWidth,pageHeight,paperSize,orientation); // Convert closest page size to pixels for bounding rect if (orientation == QPrinter::Portrait) { pageWidth = paperSizes[bestSize].width/10.0; // in centimeters pageHeight = paperSizes[bestSize].height/10.0; // in centimeters } else { pageWidth = paperSizes[bestSize].height/10.0; // in centimeters pageHeight = paperSizes[bestSize].width/10.0; // in centimeters } if (resolutionType() == DPI) { pageWidth = centimeters2inches(pageWidth); pageHeight = centimeters2inches(pageHeight); } pageWidth *= resolution(); pageHeight *= resolution(); if (resolutionType() == DPCM) { pageWidth = centimeters2inches(pageWidth); pageHeight = centimeters2inches(pageHeight); } QFileInfo fileInfo(curFile); QString baseName = fileInfo.baseName(); QString fileName = QFileDialog::getSaveFileName( this, tr("Print File Name"), QDir::currentPath() + "/" + baseName, tr("PDF (*.pdf)\nPDF (*.PDF)")); if (fileName == "") { return; } fileInfo.setFile(fileName); QString suffix = fileInfo.suffix(); if (suffix == "") { fileName += ".pdf"; } else if (suffix != ".pdf" && suffix != ".PDF") { fileName = fileInfo.path() + "/" + fileInfo.completeBaseName() + ".pdf"; } QPrinter printer(QPrinter::ScreenResolution); printer.setOutputFileName(fileName); printer.setOrientation(orientation); printer.setPaperSize(paperSize); printer.setPageMargins(0,0,0,0,QPrinter::Inch); printer.setFullPage(true); QPainter painter; painter.begin(&printer); int savePageNumber = displayPageNum; QGraphicsScene scene; LGraphicsView view(&scene); QRectF boundingRect(0.0,0.0,pageWidth,pageHeight); QRect bounding(0,0,pageWidth,pageHeight); view.setMinimumSize(pageWidth,pageHeight); view.setMaximumSize(pageWidth,pageHeight); view.setGeometry(bounding); view.setSceneRect(boundingRect); view.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing | QPainter::SmoothPixmapTransform); view.scale(1.0,1.0); view.centerOn(boundingRect.center()); clearPage(&view,&scene); for (displayPageNum = 1; displayPageNum <= maxPages; displayPageNum++) { qApp->processEvents(); drawPage(&view,&scene,true); view.render(&painter); clearPage(&view,&scene); if (maxPages - displayPageNum > 0) { printer.newPage(); } } painter.end(); displayPageNum = savePageNumber; drawPage(KpageView,KpageScene,false); }
kdvi::kdvi( char *fname, QWidget *, const char *name ) : KTopLevelWidget( name ) { msg = NULL; ssmenu = NULL; hbl = NULL; prefs = NULL; keys = new KAccel(this); readConfig(); setMinimumSize( 400, 60 ); setCaption( kapp->getCaption() ); tipgroup = new QToolTipGroup( this, "TipGroup" ); connect( tipgroup, SIGNAL(showTip(const char *)), SLOT(showTip(const char *)) ); connect( tipgroup, SIGNAL(removeTip()), SLOT(removeTip()) ); // Create KPanner for toolBar2 and dviwindow kpan = new KPanner( this, "panner", KPanner::O_VERTICAL|KPanner::U_ABSOLUTE, 100); setView( kpan, TRUE ); setFrameBorderWidth( 4 ); kpan->setAbsSeparator( pannerValue ); connect( kpan, SIGNAL(positionChanged()), SLOT(pannerChanged()) ); // Create a dvi window dviwin = new dviWindow( basedpi, mfmode, paper, makepk, kpan->child1(), "dviWindow" ); connect( dviwin, SIGNAL(currentPage(int)), SLOT(setPage(int)) ); connect( dviwin, SIGNAL(shrinkChanged(int)), SLOT(shrinkChanged(int)) ); connect( dviwin, SIGNAL(fileChanged()), SLOT(fileChanged()) ); connect( dviwin, SIGNAL(statusChange(const char *)), SLOT(showTip(const char *)) ); connect( dviwin, SIGNAL(setPoint(QPoint)), SLOT(showPoint(QPoint)) ); // Create a menubar menuBar = NULL; makeMenuBar(); // Create toolbars toolBar = NULL; makeButtons(); makeToolBar2( kpan->child0() ); // Create a statusbar statusBar = NULL; makeStatusBar( i18n("No document") ); // Lay out widgets QBoxLayout *l; l = new QBoxLayout( kpan->child0(), QBoxLayout::LeftToRight ); l->addWidget( toolBar2 ); l->activate(); l = new QBoxLayout( kpan->child1(), QBoxLayout::LeftToRight ); l->addWidget( dviwin ); l->activate(); // Create RMB menu rmbmenu = new QPopupMenu; rmbmenu->setMouseTracking( TRUE ); rmbmenu->connectItem( rmbmenu->insertItem(i18n("Toggle Menubar")), this, SLOT(toggleShowMenubar()) ); rmbmenu->connectItem( rmbmenu->insertItem(i18n("Mark page")), marklist, SLOT(markSelected()) ); rmbmenu->connectItem( rmbmenu->insertItem(i18n("Redraw")), dviwin, SLOT(drawPage()) ); rmbmenu->connectItem( rmbmenu->insertItem(i18n("Preferences ...")), this, SLOT(optionsPreferences()) ); // Bind keys bindKeys(); updateMenuAccel(); // Drag and drop KDNDDropZone * dropZone = new KDNDDropZone( this , DndURL); connect( dropZone, SIGNAL( dropAction( KDNDDropZone *) ), SLOT( dropEvent( KDNDDropZone *) ) ); // Read config options applyPreferences(); selectSmall(); dviwin->installEventFilter( this ); message( "" ); openFile(QString(fname)); }
void kdvi::makeMenuBar() { if (menuBar) delete menuBar; menuBar = new KMenuBar( this ); CHECK_PTR( menuBar ); QPopupMenu *p = new QPopupMenu; CHECK_PTR( p ); m_fn = p->insertItem( i18n("&New"), this, SLOT(fileNew()) ); m_fo = p->insertItem( i18n("&Open ..."), this, SLOT(fileOpen()) ); recentmenu = new QPopupMenu; CHECK_PTR( recentmenu ); connect( recentmenu, SIGNAL(activated(int)), SLOT(openRecent(int)) ); m_fr = p->insertItem( i18n("Open &recent"), recentmenu ); m_fp = p->insertItem( i18n("&Print ..."), this, SLOT(filePrint())); m_fx = p->insertItem( i18n("E&xit"), this, SLOT(fileExit())); m_f = p; menuBar->insertItem( i18n("&File"), p, -2 ); p = new QPopupMenu; CHECK_PTR( p ); m_vi = p->insertItem( i18n("Zoom &in"), dviwin, SLOT(prevShrink()) ); m_vo = p->insertItem( i18n("Zoom &out"), dviwin, SLOT(nextShrink()) ); m_vf = p->insertItem( i18n("&Fit to page"), this, SLOT(viewFitPage()) ); m_vw = p->insertItem( i18n("Fit to page &width"), this, SLOT(viewFitPageWidth())); p->insertSeparator(); m_vr = p->insertItem( i18n("&Redraw page"), dviwin, SLOT(drawPage()) ); m_v = p; menuBar->insertItem( i18n("&View"), p, -2 ); p = new QPopupMenu; CHECK_PTR( p ); m_pp = p->insertItem( i18n("&Previous"), dviwin, SLOT(prevPage()) ); m_pn = p->insertItem( i18n("&Next"), dviwin, SLOT(nextPage()) ); m_pf = p->insertItem( i18n("&First"), dviwin, SLOT(firstPage()) ); m_pl = p->insertItem( i18n("&Last"), dviwin, SLOT(lastPage()) ); m_pg = p->insertItem( i18n("&Go to ..."), this, SLOT(pageGoto()) ); m_p = p; menuBar->insertItem( i18n("&Page"), p, -2 ); p = new QPopupMenu; CHECK_PTR( p ); p->setCheckable( TRUE ); m_op = p->insertItem( i18n("&Preferences ..."), this, SLOT(optionsPreferences())); m_ok = p->insertItem( i18n("&Keys ..."), this, SLOT(configKeys())); p->insertSeparator(); m_of = p->insertItem( i18n("Make PK-&fonts"), this, SLOT(toggleMakePK()) ); p->setItemChecked( m_of, makepk ); m_o0 = p->insertItem( i18n("Show PS"), this, SLOT(toggleShowPS())); p->setItemChecked( m_o0, showPS ); m_om = p->insertItem( i18n("Show &Menubar"), this, SLOT(toggleShowMenubar()) ); p->setItemChecked( m_om, !hideMenubar ); m_ob = p->insertItem( i18n("Show &Buttons"), this, SLOT(toggleShowButtons()) ); p->setItemChecked( m_ob, !hideButtons ); m_ot = p->insertItem( i18n("Show Page Lis&t"), this, SLOT(toggleVertToolbar()) ); p->setItemChecked( m_ol, vertToolbar ); m_os = p->insertItem( i18n("Show &Statusbar"), this, SLOT(toggleShowStatusbar()) ); p->setItemChecked( m_os, !hideStatusbar ); m_ol = p->insertItem( i18n("Show Scro&llbars"), this, SLOT(toggleShowScrollbars()) ); p->setItemChecked( m_ol, !hideScrollbars ); m_o = p; menuBar->insertItem( i18n("&Options"), p, -2 ); optionsmenu = p; menuBar->insertSeparator(); QPopupMenu *help = kapp->getHelpMenu(true, QString(i18n("DVI Viewer")) + " " + KDVI_VERSION + i18n("\n\nby Markku Hihnala") + " ([email protected])"); m_h = p; menuBar->insertItem( i18n("&Help"), help ); if ( hideMenubar ) menuBar->hide(); setMenu( menuBar ); }
int Gui::findPage( LGraphicsView *view, QGraphicsScene *scene, int &pageNum, QString const &addLine, Where ¤t, bool isMirrored, Meta meta, bool printing) { bool stepGroup = false; bool partIgnore = false; bool coverPage = false; bool stepPage = false; bool bfxStore1 = false; bool bfxStore2 = false; QStringList bfxParts; int partsAdded = 0; int stepNumber = 1; Rc rc; skipHeader(current); if (pageNum == 1) { topOfPages.clear(); topOfPages.append(current); } QStringList csiParts; QStringList saveCsiParts; Where saveCurrent = current; Where stepGroupCurrent; int saveStepNumber = 1; saveStepPageNum = stepPageNum; Meta saveMeta = meta; QHash<QString, QStringList> bfx; QHash<QString, QStringList> saveBfx; int numLines = ldrawFile.size(current.modelName); Where topOfStep = current; ldrawFile.setRendered(current.modelName, isMirrored); for ( ; current.lineNumber < numLines; current.lineNumber++) { // scan through the rest of the model counting pages // if we've already hit the display page, then do as little as possible QString line = ldrawFile.readLine(current.modelName,current.lineNumber).trimmed(); if (line.startsWith("0 GHOST ")) { line = line.mid(8).trimmed(); } switch (line.toAscii()[0]) { case '1': if ( ! partIgnore) { csiParts << line; if (firstStepPageNum == -1) { firstStepPageNum = pageNum; } lastStepPageNum = pageNum; QStringList token; split(line,token); QString type = token[token.size()-1]; isMirrored = ldrawFile.mirrored(token); bool contains = ldrawFile.contains(type); bool rendered = ldrawFile.rendered(type,isMirrored); if (contains) { if ( ! rendered && ! bfxStore2) { // can't be a callout SubmodelStack tos(current.modelName,current.lineNumber,stepNumber); meta.submodelStack << tos; Where current2(type,0); findPage(view,scene,pageNum,line,current2,isMirrored,meta,printing); saveStepPageNum = stepPageNum; meta.submodelStack.pop_back(); } } if (bfxStore1) { bfxParts << token[1]+type; } } case '2': case '3': case '4': case '5': ++partsAdded; csiParts << line; break; case '0': rc = meta.parse(line,current); switch (rc) { case StepGroupBeginRc: stepGroup = true; stepGroupCurrent = topOfStep; break; case StepGroupEndRc: if (stepGroup) { stepGroup = false; if (pageNum < displayPageNum) { saveCsiParts = csiParts; saveStepNumber = stepNumber; saveMeta = meta; saveBfx = bfx; } else if (pageNum == displayPageNum) { csiParts.clear(); stepPageNum = saveStepPageNum; if (pageNum == 1) { page.meta = meta; } else { page.meta = saveMeta; } page.meta.pop(); QStringList pliParts; (void) drawPage(view, scene, &page, saveStepNumber, addLine, stepGroupCurrent, saveCsiParts, pliParts, isMirrored, saveBfx, printing, bfxStore2, bfxParts); saveCurrent.modelName.clear(); saveCsiParts.clear(); } ++pageNum; topOfPages.append(current); saveStepPageNum = ++stepPageNum; } break; case StepRc: case RotStepRc: if (partsAdded) { stepNumber += ! coverPage && ! stepPage; stepPageNum += ! coverPage && ! stepGroup; if (pageNum < displayPageNum) { if ( ! stepGroup) { saveCsiParts = csiParts; saveStepNumber = stepNumber; saveMeta = meta; saveBfx = bfx; saveStepPageNum = stepPageNum; } saveCurrent = current; } if ( ! stepGroup) { if (pageNum == displayPageNum) { csiParts.clear(); stepPageNum = saveStepPageNum; if (pageNum == 1) { page.meta = meta; } else { page.meta = saveMeta; } page.meta.pop(); QStringList pliParts; (void) drawPage(view, scene, &page, saveStepNumber, addLine, saveCurrent, saveCsiParts, pliParts, isMirrored, saveBfx, printing, bfxStore2, bfxParts); saveCurrent.modelName.clear(); saveCsiParts.clear(); } ++pageNum; topOfPages.append(current); } topOfStep = current; partsAdded = 0; meta.pop(); coverPage = false; stepPage = false; bfxStore2 = bfxStore1; bfxStore1 = false; if ( ! bfxStore2) { bfxParts.clear(); } } else if ( ! stepGroup) { saveCurrent = current; // so that draw page doesn't have to // deal with steps that are not steps } break; case CalloutBeginRc: ++current; { Meta tmpMeta; while (rc != CalloutEndRc && current.lineNumber < numLines) { line = ldrawFile.readLine(current.modelName,current.lineNumber++).trimmed(); rc = OkRc; if (line[0] == '0') { rc = tmpMeta.parse(line,current); } else if (line[0] >= '1' && line[0] <= '5') { if (line[0] == '1') { partsAdded++; csiParts << line; } } } } --current; break; case InsertCoverPageRc: coverPage = true; partsAdded = true; break; case InsertPageRc: stepPage = true; partsAdded = true; break; case PartBeginIgnRc: partIgnore = true; break; case PartEndRc: partIgnore = false; break; // Any of the metas that can change csiParts needs // to be processed here case ClearRc: csiParts.empty(); break; /* Buffer exchange */ case BufferStoreRc: if (pageNum < displayPageNum) { bfx[meta.bfx.value()] = csiParts; } bfxStore1 = true; bfxParts.clear(); break; case BufferLoadRc: if (pageNum < displayPageNum) { csiParts = bfx[meta.bfx.value()]; } partsAdded = true; break; case MLCadGroupRc: if (pageNum < displayPageNum) { csiParts << line; partsAdded++; } break; /* remove a group or all instances of a part type */ case GroupRemoveRc: case RemoveGroupRc: case RemovePartRc: case RemoveNameRc: if (pageNum < displayPageNum) { QStringList newCSIParts; if (rc == RemoveGroupRc) { remove_group(csiParts, meta.LPub.remove.group.value(),newCSIParts); } else if (rc == RemovePartRc) { remove_parttype(csiParts, meta.LPub.remove.parttype.value(),newCSIParts); } else { remove_partname(csiParts, meta.LPub.remove.partname.value(),newCSIParts); } csiParts = newCSIParts; newCSIParts.empty(); } break; case IncludeRc: include(meta); break; default: break; } // switch break; } } // for every line csiParts.clear(); if (partsAdded) { if (pageNum == displayPageNum) { page.meta = saveMeta; QStringList pliParts; (void) drawPage(view, scene, &page, saveStepNumber, addLine, saveCurrent, saveCsiParts, pliParts, isMirrored, bfx, printing, bfxStore2, bfxParts); } ++pageNum; topOfPages.append(current); ++stepPageNum; } return 0; }
int Gui::drawPage( LGraphicsView *view, QGraphicsScene *scene, Steps *steps, int stepNum, QString const &addLine, Where ¤t, QStringList &csiParts, QStringList &pliParts, bool isMirrored, QHash<QString, QStringList> &bfx, bool printing, bool bfxStore2, QStringList &bfxParts, bool calledOut) { bool global = true; QString line; Callout *callout = NULL; Range *range = NULL; Step *step = NULL; bool pliIgnore = false; bool partIgnore = false; bool synthBegin = false; bool multiStep = false; bool partsAdded = false; bool coverPage = false; bool bfxStore1 = false; bool bfxLoad = false; int numLines = ldrawFile.size(current.modelName); bool firstStep = true; steps->isMirrored = isMirrored; QList<InsertMeta> inserts; Where topOfStep = current; Rc gprc = OkRc; Rc rc; statusBar()->showMessage("Processing " + current.modelName); page.coverPage = false; QStringList calloutParts; /* * do until end of page */ for ( ; current <= numLines; current++) { Meta &curMeta = callout ? callout->meta : steps->meta; QStringList tokens; // If we hit end of file we've got to note end of step if (current >= numLines) { line.clear(); gprc = EndOfFileRc; tokens << "0"; // not end of file, so get the next LDraw line } else { line = ldrawFile.readLine(current.modelName,current.lineNumber); split(line,tokens); } if (tokens.size() == 15 && tokens[0] == "1") { QString color = tokens[1]; QString type = tokens[tokens.size()-1]; csiParts << line; partsAdded = true; /* since we have a part usage, we have a valid step */ if (step == NULL) { if (range == NULL) { range = newRange(steps,calledOut); steps->append(range); } step = new Step(topOfStep, range, stepNum, curMeta, calledOut, multiStep); range->append(step); } /* addition of ldraw parts */ if (curMeta.LPub.pli.show.value() && ! pliIgnore && ! partIgnore && ! synthBegin) { QString colorType = color+type; if (! isSubmodel(type) || curMeta.LPub.pli.includeSubs.value()) { if (bfxStore2 && bfxLoad) { bool removed = false; for (int i = 0; i < bfxParts.size(); i++) { if (bfxParts[i] == colorType) { bfxParts.removeAt(i); removed = true; break; } } if ( ! removed) { pliParts << Pli::partLine(line,current,steps->meta); } } else { pliParts << Pli::partLine(line,current,steps->meta); } } if (bfxStore1) { bfxParts << colorType; } } /* if it is a sub-model, then process it */ if (ldrawFile.contains(type) && callout) { /* we are a callout, so gather all the steps within the callout */ /* start with new meta, but no rotation step */ if (callout->bottom.modelName != type) { Where current2(type,0); skipHeader(current2); callout->meta.rotStep.clear(); SubmodelStack tos(current.modelName,current.lineNumber,stepNum); callout->meta.submodelStack << tos; Meta saveMeta = callout->meta; callout->meta.LPub.pli.constrain.resetToDefault(); step->append(callout); calloutParts.clear(); QStringList csiParts2; QHash<QString, QStringList> calloutBfx; int rc; rc = drawPage( view, scene, callout, 1, line, current2, csiParts2, calloutParts, ldrawFile.mirrored(tokens), calloutBfx, printing, bfxStore2, bfxParts, true); callout->meta = saveMeta; if (callout->meta.LPub.pli.show.value() && ! callout->meta.LPub.callout.pli.perStep.value() && ! pliIgnore && ! partIgnore && ! synthBegin) { pliParts += calloutParts; } if (rc != 0) { steps->placement = steps->meta.LPub.assem.placement; return rc; } } else { callout->instances++; pliParts += calloutParts; } /* remind user what file we're working on */ statusBar()->showMessage("Processing " + current.modelName); } } else if (tokens.size() > 0 && (tokens[0] == "2" || tokens[0] == "3" || tokens[0] == "4" || tokens[0] == "5")) { csiParts << line; partsAdded = true; /* we've got a line, triangle or polygon, so add it to the list */ /* and make sure we know we have a step */ if (step == NULL) { if (range == NULL) { range = newRange(steps,calledOut); steps->append(range); } step = new Step(topOfStep, range, stepNum, steps->meta, calledOut, multiStep); range->append(step); } } else if (tokens.size() > 0 && tokens[0] == "0" || gprc == EndOfFileRc) { /* must be meta-command (or comment) */ if (global && tokens.contains("!LPUB") && tokens.contains("GLOBAL")) { topOfStep = current; } else { global = false; } QString part; if (gprc == EndOfFileRc) { rc = gprc; } else { rc = curMeta.parse(line,current,true); } /* handle specific meta-commands */ switch (rc) { /* toss it all out the window, per James' original plan */ case ClearRc: pliParts.clear(); csiParts.clear(); steps->freeSteps(); break; /* Buffer exchange */ case BufferStoreRc: bfx[curMeta.bfx.value()] = csiParts; bfxStore1 = true; bfxParts.clear(); break; case BufferLoadRc: csiParts = bfx[curMeta.bfx.value()]; bfxLoad = true; break; case MLCadGroupRc: csiParts << line; break; case IncludeRc: include(curMeta); break; /* substitute part/parts with this */ case PliBeginSub1Rc: if (pliIgnore) { parseError("Nested PLI BEGIN/ENDS not allowed\n",current); } if (steps->meta.LPub.pli.show.value() && ! pliIgnore && ! partIgnore && ! synthBegin) { SubData subData = curMeta.LPub.pli.begin.sub.value(); QString addPart = QString("1 0 0 0 0 0 0 0 0 0 0 0 0 0 %1") .arg(subData.part); pliParts << Pli::partLine(addPart,current,curMeta); } if (step == NULL) { if (range == NULL) { range = newRange(steps,calledOut); steps->append(range); } step = new Step(topOfStep, range, stepNum, curMeta, calledOut, multiStep); range->append(step); } pliIgnore = true; break; /* substitute part/parts with this */ case PliBeginSub2Rc: if (pliIgnore) { parseError("Nested BEGIN/ENDS not allowed\n",current); } if (steps->meta.LPub.pli.show.value() && ! pliIgnore && ! partIgnore && ! synthBegin) { SubData subData = curMeta.LPub.pli.begin.sub.value(); QString addPart = QString("1 %1 0 0 0 0 0 0 0 0 0 0 0 0 %2") .arg(subData.color) .arg(subData.part); pliParts << Pli::partLine(addPart,current,curMeta); } if (step == NULL) { if (range == NULL) { range = newRange(steps,calledOut); steps->append(range); } step = new Step(topOfStep, range, stepNum, curMeta, calledOut, multiStep); range->append(step); } pliIgnore = true; break; /* do not put subsequent parts into PLI */ case PliBeginIgnRc: if (pliIgnore) { parseError("Nested BEGIN/ENDS not allowed\n",current); } pliIgnore = true; break; case PliEndRc: if ( ! pliIgnore) { parseError("PLI END with no PLI BEGIN",current); } pliIgnore = false; break; /* discard subsequent parts, and don't create CSI's for them */ case PartBeginIgnRc: case MLCadSkipBeginRc: if (partIgnore) { parseError("Nested BEGIN/ENDS not allowed\n",current); } partIgnore = true; break; case PartEndRc: case MLCadSkipEndRc: if (partIgnore) { parseError("Ignore ending with no ignore begin",current); } partIgnore = false; break; case SynthBeginRc: if (synthBegin) { parseError("Nested BEGIN/ENDS not allowed\n",current); } synthBegin = true; break; case SynthEndRc: if ( ! synthBegin) { parseError("Ignore ending with no ignore begin",current); } synthBegin = false; break; /* remove a group or all instances of a part type */ case GroupRemoveRc: case RemoveGroupRc: case RemovePartRc: case RemoveNameRc: { QStringList newCSIParts; if (rc == RemoveGroupRc) { remove_group(csiParts,steps->meta.LPub.remove.group.value(),newCSIParts); } else if (rc == RemovePartRc) { remove_parttype(csiParts, steps->meta.LPub.remove.parttype.value(),newCSIParts); } else { remove_partname(csiParts, steps->meta.LPub.remove.partname.value(),newCSIParts); } csiParts = newCSIParts; if (step == NULL) { if (range == NULL) { range = newRange(steps,calledOut); steps->append(range); } step = new Step(topOfStep, range, stepNum, curMeta, calledOut, multiStep); range->append(step); } } break; case ReserveSpaceRc: /* since we have a part usage, we have a valid step */ if (calledOut || multiStep) { step = NULL; Reserve *reserve = new Reserve(current,steps->meta.LPub); if (range == NULL) { range = newRange(steps,calledOut); steps->append(range); } range->append(reserve); } break; case InsertCoverPageRc: coverPage = true; page.coverPage = true; case InsertPageRc: partsAdded = true; break; case InsertRc: inserts.append(curMeta.LPub.insert); // these are always placed before any parts in step break; case CalloutBeginRc: if (callout) { parseError("Nested CALLOUT not allowed within the same file",current); } else { callout = new Callout(curMeta,view); callout->setTopOfCallout(current); } break; case CalloutDividerRc: if (range) { range->sepMeta = curMeta.LPub.callout.sep; range = NULL; step = NULL; } break; case CalloutPointerRc: if (callout) { callout->appendPointer(current,curMeta.LPub.callout); } break; case CalloutEndRc: if ( ! callout) { parseError("CALLOUT END without a CALLOUT BEGIN",current); } else { callout->parentStep = step; callout->parentRelativeType = step->relativeType; callout->pli.clear(); callout->placement = curMeta.LPub.callout.placement; callout->setBottomOfCallout(current); callout = NULL; } break; case StepGroupBeginRc: if (calledOut) { parseError("MULTI_STEP not allowed inside callout models",current); } else { if (multiStep) { parseError("Nested MULTI_STEP not allowed",current); } multiStep = true; } steps->relativeType = StepGroupType; break; case StepGroupDividerRc: if (range) { range->sepMeta = steps->meta.LPub.multiStep.sep; range = NULL; step = NULL; } break; /* finished off a multiStep */ case StepGroupEndRc: if (multiStep) { // save the current meta as the meta for step group // PLI for non-pli-per-step if (partsAdded) { parseError("Expected STEP before MULTI_STEP END", current); } multiStep = false; if (pliParts.size() && steps->meta.LPub.multiStep.pli.perStep.value() == false) { steps->pli.bom = false; steps->pli.setParts(pliParts,steps->stepGroupMeta); steps->pli.sizePli(&steps->stepGroupMeta, StepGroupType, false); } pliParts.clear(); /* this is a page we're supposed to process */ steps->placement = steps->meta.LPub.multiStep.placement; showLine(steps->topOfSteps()); bool endOfSubmodel = stepNum == ldrawFile.numSteps(current.modelName); int instances = ldrawFile.instances(current.modelName,isMirrored); addGraphicsPageItems(steps, coverPage, endOfSubmodel,instances, view, scene,printing); return HitEndOfPage; } break; /* we're hit some kind of step, or implied step and end of file */ case EndOfFileRc: case RotStepRc: case StepRc: if ( ! partsAdded && bfxLoad) { // special case of no parts added, but BFX load if (step == NULL) { if (range == NULL) { range = newRange(steps,calledOut); steps->append(range); } step = new Step(topOfStep, range, stepNum, curMeta, calledOut, multiStep); range->append(step); } int rc = step->createCsi( isMirrored ? addLine : "1 color 0 0 0 1 0 0 0 1 0 0 0 1 foo.ldr", csiParts, &step->csiPixmap, steps->meta); partsAdded = true; // OK, so this is a lie, but it works } if (partsAdded) { if (firstStep) { steps->stepGroupMeta = curMeta; firstStep = false; } if (pliIgnore) { parseError("PLI BEGIN then STEP. Expected PLI END",current); pliIgnore = false; } if (partIgnore) { parseError("PART BEGIN then STEP. Expected PART END",current); partIgnore = false; } if (synthBegin) { parseError("SYNTH BEGIN then STEP. Expected SYNTH_END",current); synthBegin = false; } bool pliPerStep; if (multiStep && steps->meta.LPub.multiStep.pli.perStep.value()) { pliPerStep = true; } else if (calledOut && steps->meta.LPub.callout.pli.perStep.value()) { pliPerStep = true; } else if ( ! multiStep && ! calledOut) { pliPerStep = true; } else { pliPerStep = false; } if (step) { Page *page = dynamic_cast<Page *>(steps); if (page) { page->inserts = inserts; } if (pliPerStep) { PlacementType relativeType; if (multiStep) { relativeType = StepGroupType; } else if (calledOut) { relativeType = CalloutType; } else { relativeType = SingleStepType; } step->pli.setParts(pliParts,steps->meta); pliParts.clear(); step->pli.sizePli(&steps->meta,relativeType,pliPerStep); } int rc = step->createCsi( isMirrored ? addLine : "1 color 0 0 0 1 0 0 0 1 0 0 0 1 foo.ldr", csiParts, &step->csiPixmap, steps->meta); statusBar()->showMessage("Processing " + current.modelName); if (rc) { return rc; } } else { if (pliPerStep) { pliParts.clear(); } /* * Only pages or step can have inserts.... no callouts */ if ( ! multiStep && ! calledOut) { Page *page = dynamic_cast<Page *>(steps); if (page) { page->inserts = inserts; } } } if ( ! multiStep && ! calledOut) { /* * Simple step */ if (steps->list.size() == 0) { steps->relativeType = PageType; } steps->placement = steps->meta.LPub.assem.placement; showLine(topOfStep); int numSteps = ldrawFile.numSteps(current.modelName); bool endOfSubmodel = numSteps == 0 || stepNum == numSteps; int instances = ldrawFile.instances(current.modelName,isMirrored); addGraphicsPageItems(steps,coverPage,endOfSubmodel,instances,view,scene,printing); stepPageNum += ! coverPage; steps->setBottomOfSteps(current); return HitEndOfPage; } steps->meta.pop(); stepNum += partsAdded; topOfStep = current; partsAdded = false; coverPage = false; step = NULL; bfxStore2 = bfxStore1; bfxStore1 = false; bfxLoad = false; } inserts.clear(); steps->setBottomOfSteps(current); break; case RangeErrorRc: showLine(current); QMessageBox::critical(NULL, QMessageBox::tr("LPub"), QMessageBox::tr("Parameter(s) out of range: %1:%2\n%3") .arg(current.modelName) .arg(current.lineNumber) .arg(line)); return RangeErrorRc; break; default: break; } } else if (line != "") { showLine(current); QMessageBox::critical(NULL, QMessageBox::tr("LPub"), QMessageBox::tr("Invalid LDraw Line Type: %1:%2\n %3") .arg(current.modelName) .arg(current.lineNumber) .arg(line)); return InvalidLDrawLineRc; } } steps->meta.rotStep.clear(); return 0; }