X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fforms%2Flibrarywidget.cpp;h=8ca7ca1b5f361d746ead6144ad3231f1f9cec3af;hb=af32602b9d8075080d5805143f1cd47fc10672e1;hp=ebb8acb0319e19d11b904f0ba68558da7baa426e;hpb=7efabf993d0acf72e4f7df5e3ccfa4513b070be6;p=architektonas diff --git a/src/forms/librarywidget.cpp b/src/forms/librarywidget.cpp index ebb8acb..8ca7ca1 100644 --- a/src/forms/librarywidget.cpp +++ b/src/forms/librarywidget.cpp @@ -13,8 +13,15 @@ // --- ---------- ----------------------------------------------------------- // JLH 05/10/2010 Created this file. :-) // JLH 08/28/2010 Restored functionality to library browser +// JLH 09/06/2010 Partially fixed thumbnail rendering // +/* +BUGS: + +- Picks up thumbnail directories twice--only once if thumbnail dir doesn't exist +*/ + #include "librarywidget.h" #include "actionhandler.h" @@ -293,7 +300,7 @@ QString LibraryWidget::getPathToPixmap(const QString & dir, const QString & dxfF // List of all directories that contain part libraries: QStringList directoryList = RS_SYSTEM->getDirectoryList("library"); - directoryList.prepend(RS_SYSTEM->getHomeDir() + "/.qcad/library"); + directoryList.prepend(RS_SYSTEM->getHomeDir() + "/.architektonas/library"); QStringList::Iterator it; QFileInfo fiDxf(dxfPath); @@ -331,83 +338,70 @@ QString LibraryWidget::getPathToPixmap(const QString & dir, const QString & dxfF } } - // the thumbnail must be created in the user's home. - - // create all directories needed: - RS_SYSTEM->createHomePath("/.qcad/library" + dir); - /*QString d = "/.qcad/library" + dir; - QDir dr; - - QStringList dirs = QStringList::split('/', d, false); - QString created = RS_SYSTEM->getHomeDir(); - for (it=dirs.begin(); it!=dirs.end(); ++it) { - created += QString("/%1").arg(*it); - - if (created.isEmpty() || QFileInfo(created).isDir() || dr.mkdir(created, true)) { - RS_DEBUG->print("LibraryWidget: Created directory '%s'", - created.toLatin1().data()); - } - else { - RS_DEBUG->print(RS_Debug::D_ERROR, - "LibraryWidget: Cannot create directory '%s'", - created.toLatin1().data()); - return ""; - } -} - */ + // The thumbnail must be created in the user's home. + // So, create all directories needed: + RS_SYSTEM->createHomePath("/.architektonas/library" + dir); - QString d = RS_SYSTEM->getHomeDir() + "/.qcad/library" + dir; + QString d = RS_SYSTEM->getHomeDir() + "/.architektonas/library" + dir; +//printf("librarywidget: d = \"%s\"\n", d.toAscii().data()); // pngPath = d + "/" + fiDxf.baseName(true) + ".png"; pngPath = d + "/" + fiDxf.completeBaseName() + ".png"; +//printf("librarywidget: pngPath = \"%s\"\n", pngPath.toAscii().data()); - QPixmap * buffer = new QPixmap(128, 128); -// RS_PainterQt * painter = new RS_PainterQt(buffer); - QPainter qpntr(buffer); + // Ugh. This is a mess and doesn't work right anyway... + // Problem is StaticGraphicView doesn't follow a standard rendering path, + // so all this crap just ends in failure. Not sure how to fix. +/** +I suppose one way to do it would be to make a CreateImage() function in GraphicView, +then we wouldn't have all this messiness... +I think the way the redraw works is like that--it creates its own PaintInterface +and QPainter and sets "painter" equal to it... That being the case, it would be +a simple matter to modify StaticGraphicView to utilize that... Let's see... +Which it should be doing, but, for some reason, it fails. Dunno why. + +It only fails for certain DXFs. Dunno why. +*/ + + QPixmap buffer(128, 128); + QPainter qpntr(&buffer); PaintInterface * painter = new PaintInterface(&qpntr); -// painter->setBackgroundColor(RS_Color(255, 255, 255)); -// painter->eraseRect(0, 0, 128, 128); -// qpntr.setBackgroundColor(RS_Color(255, 255, 255)); qpntr.setBackground(Qt::white); qpntr.eraseRect(0, 0, 128, 128); RS_StaticGraphicView gv(128, 128, painter); - Drawing graphic; + Drawing drawing; - if (graphic.open(dxfPath, RS2::FormatUnknown)) + if (drawing.open(dxfPath, RS2::FormatUnknown)) { RS_Color black(0, 0, 0); - for(RS_Entity * e=graphic.firstEntity(RS2::ResolveAll); e!=NULL; e=graphic.nextEntity(RS2::ResolveAll)) + // Set all pens in the drawing to BLACK + for(RS_Entity * e=drawing.firstEntity(RS2::ResolveAll); e!=NULL; e=drawing.nextEntity(RS2::ResolveAll)) { RS_Pen pen = e->getPen(); pen.setColor(black); e->setPen(pen); } - gv.setContainer(&graphic); + gv.setContainer(&drawing); gv.zoomAuto(false); - gv.drawEntity(&graphic, true); +//This works, but somehow doesn't work ALL the time + gv.drawEntity(&drawing, true); -#if 0 - QImageIO iio; - QImage img; - img = *buffer; - img = img.smoothScale(64, 64); - iio.setImage(img); - iio.setFileName(pngPath); - iio.setFormat("PNG"); - - if (!iio.write()) + QImageWriter writer; + QImage image = buffer.toImage(); + image.scaled(64, 64, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); + writer.setFileName(pngPath); + writer.setFormat("png"); + + if (!writer.write(image)) { - pngPath = ""; RS_DEBUG->print(RS_Debug::D_ERROR, "LibraryWidget::getPathToPixmap: Cannot write thumbnail: '%s'", pngPath.toLatin1().data()); + pngPath = ""; } -#else -#warning "LibraryWidget::getPathToPixmap(): Needs porting to Qt4... !!! FIX !!!" -#endif } else { @@ -415,7 +409,23 @@ QString LibraryWidget::getPathToPixmap(const QString & dir, const QString & dxfF } delete painter; - delete buffer; return pngPath; } + +#if 0 + +QWidget::setMinimumSize: (/QMdi::ControlLabel) Negative sizes (-1,-1) are not possible +QPaintDevice: Cannot destroy paint device that is being painted + +Program received signal SIGSEGV, Segmentation fault. +0x085cd068 in ?? () +(gdb) bt +#0 0x085cd068 in ?? () +#1 0xb7818bd0 in QPainter::~QPainter() () from /usr/lib/qt4/libQtGui.so.4 +#2 0x081c1e8e in LibraryWidget::getPathToPixmap(QString const&, QString const&, QString const&) () +#3 0x081c0fa6 in LibraryWidget::getPixmap(QString const&, QString const&, QString const&) () +#4 0x081c0775 in LibraryWidget::updatePreview(QTreeWidgetItem*, int) () +#5 0x08237d5e in LibraryWidget::qt_metacall(QMetaObject::Call, int, void**) () + +#endif