X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fforms%2Flibrarywidget.cpp;h=ebb8acb0319e19d11b904f0ba68558da7baa426e;hb=bd2b29c8735d83ab48df13c3efee53f63570473e;hp=77f2b78b2445e4ff81020750ba5d482b8e26d2c3;hpb=89e127aa3dbd74d3158e6dbe0ca1703420c04395;p=architektonas diff --git a/src/forms/librarywidget.cpp b/src/forms/librarywidget.cpp index 77f2b78..ebb8acb 100644 --- a/src/forms/librarywidget.cpp +++ b/src/forms/librarywidget.cpp @@ -3,30 +3,47 @@ // Part of the Architektonas Project // Originally part of QCad Community Edition by Andrew Mustun // Extensively rewritten and refactored by James L. Hammons -// (C) 2010 Underground Software +// Portions copyright (C) 2001-2003 RibbonSoft +// Copyright (C) 2010 Underground Software +// See the README and GPLv2 files for licensing and warranty information // // JLH = James L. Hammons // // Who When What // --- ---------- ----------------------------------------------------------- // JLH 05/10/2010 Created this file. :-) +// JLH 08/28/2010 Restored functionality to library browser // #include "librarywidget.h" +#include "actionhandler.h" +#include "actionlibraryinsert.h" #include "drawing.h" #include "rs_staticgraphicview.h" #include "rs_system.h" -#include "paintintf.h" +#include "paintinterface.h" LibraryWidget::LibraryWidget(QWidget * parent/*= 0*/, Qt::WindowFlags flags/*= 0*/): QWidget(parent, flags), actionHandler(NULL) { +#if 0 +std::cout << "LibraryWidget::LibraryWidget()" << std::endl; +#endif ui.setupUi(this); + ui.lvDirectory->setColumnCount(1); QStringList directoryList = RS_SYSTEM->getDirectoryList("library"); +#if 0 +std::cout << "directorySize = " << directoryList.size() << std::endl; + +for(int i=0; icurrentItem(); - QListWidgetItem * item = ivPreview->currentItem(); + QListWidgetItem * item = ui.ivPreview->currentItem(); QString dxfPath = getItemPath(item); if (QFileInfo(dxfPath).isReadable()) { - if (actionHandler != NULL) + if (actionHandler) { - RS_ActionInterface * a = actionHandler->setCurrentAction(RS2::ActionLibraryInsert); + ActionInterface * a = actionHandler->setCurrentAction(RS2::ActionLibraryInsert); - if (a != NULL) + if (a) { - RS_ActionLibraryInsert * action = (RS_ActionLibraryInsert *)a; + ActionLibraryInsert * action = (ActionLibraryInsert *)a; action->setFile(dxfPath); } else { RS_DEBUG->print(RS_Debug::D_ERROR, "LibraryWidget::insert:" - "Cannot create action RS_ActionLibraryInsert"); + "Cannot create action ActionLibraryInsert"); } } } @@ -89,101 +104,87 @@ void LibraryWidget::insert() RS_DEBUG->print(RS_Debug::D_ERROR, "LibraryWidget::insert: Can't read file: '%s'", dxfPath.toLatin1().data()); } -#else -#warning "!!! Need to port to Qt4 !!!" -#endif } /** -* Appends the given directory to the given list view item. Called recursively until all -* library directories are appended. -*/ -void LibraryWidget::appendTree(QG_ListViewItem * item, QString directory) + * Appends the given directory to the given list view item. Called recursively until all + * library directories are appended. + */ +void LibraryWidget::appendTree(QTreeWidgetItem * item, QString directory) { -#if 0 - QStringList::Iterator it; QDir dir(directory); - // read subdirectories of this directory: - if (dir.exists()) - { - QStringList lDirectoryList = dir.entryList(QDir::Dirs, QDir::Name); + if (!dir.exists()) + return; - QG_ListViewItem* newItem; - QG_ListViewItem* searchItem; + // read subdirectories of this directory: + QStringList lDirectoryList = dir.entryList(QDir::Dirs, QDir::Name); - for(it=lDirectoryList.begin(); it!=lDirectoryList.end(); ++it) + for(QStringList::Iterator it=lDirectoryList.begin(); it!=lDirectoryList.end(); it++) + { + if ((*it) != "." && (*it) != "..") { - if ((*it) != "." && (*it) != "..") - { - newItem = NULL; - - // Look for an item already existing and take this - // instead of making a new one: - if (item != NULL) - searchItem = (QG_ListViewItem *)item->firstChild(); - else - searchItem = (QG_ListViewItem *)lvDirectory->firstChild(); + // Look for an item already existing and take this instead of + // making a new one: + QTreeWidgetItem * newItem = NULL; + QTreeWidgetItem * searchItem = + (item ? item->child(0) : ui.lvDirectory->topLevelItem(0)); - while (searchItem != NULL) + if (searchItem) + { + for(int i=0; ichildCount(); i++) { - if (searchItem->text(0) == (*it)) + if (searchItem->child(i)->text(0) == (*it)) { - newItem=searchItem; + newItem = searchItem->child(i); break; } - - searchItem = (QG_ListViewItem *)searchItem->nextSibling(); - } - - // Create new item if no existing was found: - if (newItem == NULL) - { - if (item) - newItem = new QG_ListViewItem(item, (*it)); - else - newItem = new QG_ListViewItem(lvDirectory, (*it)); } + } - appendTree(newItem, directory + "/" + (*it)); + // Create new item if no existing was found: + if (!newItem) + { + QStringList list; + list << (*it); + newItem = (item ? new QTreeWidgetItem(item, list) : new QTreeWidgetItem(ui.lvDirectory, list)); } + + appendTree(newItem, directory + "/" + (*it)); } } -#else -#warning "!!! Need to port to Qt4 !!!" -#endif } /** -* Updates the icon preview. -*/ -//void LibraryWidget::updatePreview(Q3ListViewItem * item) -void LibraryWidget::updatePreview(QListWidgetItem * item) + * Updates the icon preview. + */ +void LibraryWidget::updatePreview(QTreeWidgetItem * item, int /*column*/) { -#if 0 - if (item == NULL) + if (!item) return; QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); // dir from the point of view of the library browser (e.g. /mechanical/screws) QString directory = getItemDir(item); - ivPreview->clear(); + ui.ivPreview->clear(); // List of all directories that contain part libraries: QStringList directoryList = RS_SYSTEM->getDirectoryList("library"); QStringList::Iterator it; QDir itemDir; QStringList itemPathList; + QStringList filter; + filter << "*.dxf"; - // look in all possible system directories for DXF files in the current library path: + // Look in all possible system directories for DXF files in the current library path: for(it=directoryList.begin(); it!=directoryList.end(); ++it) { itemDir.setPath((*it) + directory); if (itemDir.exists()) { - QStringList itemNameList = itemDir.entryList("*.dxf", QDir::Files, QDir::Name); + QStringList itemNameList = itemDir.entryList(filter, QDir::Files, QDir::Name); QStringList::Iterator it2; for(it2=itemNameList.begin(); it2!=itemNameList.end(); ++it2) @@ -195,60 +196,54 @@ void LibraryWidget::updatePreview(QListWidgetItem * item) itemPathList.sort(); // Fill items into icon view: - Q3IconViewItem * newItem; + QListWidgetItem * newItem; + for(it=itemPathList.begin(); it!=itemPathList.end(); ++it) { - QString label = QFileInfo(*it).baseName(true); +// QString label = QFileInfo(*it).baseName(true); + QString label = QFileInfo(*it).completeBaseName(); QPixmap pixmap = getPixmap(directory, QFileInfo(*it).fileName(), (*it)); - newItem = new Q3IconViewItem(ivPreview, label, pixmap); +// newItem = new QListWidgetItem(ui.ivPreview, label, pixmap); + newItem = new QListWidgetItem(QIcon(pixmap), label, ui.ivPreview); +//Doesn't do what we want... +// newItem->setSizeHint(QSize(64, 64)); } QApplication::restoreOverrideCursor(); -#else -#warning "!!! Need to port to Qt4 !!!" -#endif } /** -* @return Directory (in terms of the List view) to the given item (e.g. /mechanical/screws) -*/ -//QString LibraryWidget::getItemDir(Q3ListViewItem * item) -QString LibraryWidget::getItemDir(QListWidgetItem * item) + * @return Directory (in terms of the List view) to the given item (e.g. /mechanical/screws) + * (called recursively) + */ +QString LibraryWidget::getItemDir(QTreeWidgetItem * item) { -#if 0 - QString ret = ""; + if (!item) + return ""; - if (item == NULL) - return ret; + QTreeWidgetItem * parent = item->parent(); - Q3ListViewItem* parent = item->parent(); return getItemDir(parent) + QString("/%1").arg(item->text(0)); -#else -#warning "!!! Need to port to Qt4 !!!" - return ""; -#endif } /** -* @return Path of the DXF file that is represented by the given item. -*/ -//QString LibraryWidget::getItemPath(Q3IconViewItem * item) + * @return Path of the DXF file that is represented by the given item. + */ QString LibraryWidget::getItemPath(QListWidgetItem * item) { -#if 0 - QString dir = getItemDir(lvDirectory->currentItem()); + QString dir = getItemDir(ui.lvDirectory->currentItem()); - if (item != NULL) + if (item) { // List of all directories that contain part libraries: QStringList directoryList = RS_SYSTEM->getDirectoryList("library"); QStringList::Iterator it; QDir itemDir; - // look in all possible system directories for DXF files in the current library path: + // Look in all possible system directories for DXF files in the current library path: for(it=directoryList.begin(); it!=directoryList.end(); ++it) { - itemDir.setPath((*it)+dir); + itemDir.setPath((*it) + dir); if (itemDir.exists()) { @@ -258,46 +253,38 @@ QString LibraryWidget::getItemPath(QListWidgetItem * item) return f; } } - - return ""; - } - else - { - return ""; } -#else -#warning "!!! Need to port to Qt4 !!!" + return ""; -#endif } /** -* @return Pixmap that serves as icon for the given DXF File. -* The existing PNG file is returned or created and returned.. -* -* @param dir Library directory (e.g. "/mechanical/screws") -* @param dxfFile File name (e.g. "screw1.dxf") -* @param dxfPath Full path to the existing DXF file on disk -* (e.g. /home/tux/.qcad/library/mechanical/screws/screw1.dxf) -*/ + * @return Pixmap that serves as icon for the given DXF File. + * The existing PNG file is returned or created and returned.. + * + * @param dir Library directory (e.g. "/mechanical/screws") + * @param dxfFile File name (e.g. "screw1.dxf") + * @param dxfPath Full path to the existing DXF file on disk + * (e.g. /home/tux/.qcad/library/mechanical/screws/screw1.dxf) + */ QPixmap LibraryWidget::getPixmap(const QString & dir, const QString & dxfFile, const QString & dxfPath) { QString pngFile = getPathToPixmap(dir, dxfFile, dxfPath); QFileInfo fiPng(pngFile); - // found existing thumbnail: + // Found existing thumbnail: if (fiPng.isFile()) return QPixmap(pngFile); - // default thumbnail: + // Default thumbnail: else return QPixmap(64, 64); } /** -* @return Path to the thumbnail of the given DXF file. If no thumbnail exists, one is -* created in the user's home. If no thumbnail can be created, an empty string is returned. -*/ + * @return Path to the thumbnail of the given DXF file. If no thumbnail exists, one is + * created in the user's home. If no thumbnail can be created, an empty string is returned. + */ QString LibraryWidget::getPathToPixmap(const QString & dir, const QString & dxfFile, const QString & dxfPath) { @@ -402,7 +389,6 @@ QString LibraryWidget::getPathToPixmap(const QString & dir, const QString & dxfF gv.zoomAuto(false); gv.drawEntity(&graphic, true); -#warning "Needs porting to Qt4... !!! FIX !!!" #if 0 QImageIO iio; QImage img; @@ -419,17 +405,15 @@ QString LibraryWidget::getPathToPixmap(const QString & dir, const QString & dxfF "LibraryWidget::getPathToPixmap: Cannot write thumbnail: '%s'", pngPath.toLatin1().data()); } +#else +#warning "LibraryWidget::getPathToPixmap(): Needs porting to Qt4... !!! FIX !!!" #endif } else { - RS_DEBUG->print(RS_Debug::D_ERROR, "LibraryWidget::getPathToPixmap: Cannot open file: '%s'", - dxfPath.toLatin1().data()); + RS_DEBUG->print(RS_Debug::D_ERROR, "LibraryWidget::getPathToPixmap: Cannot open file: '%s'", dxfPath.toLatin1().data()); } - // GraphicView deletes painter -// painter->end(); - // No, it doesn't delete painter; delete buffer;