Works for me with Qt 3.1.1, Qt 3.0.5. JMarc, could I get you or someone to test 2.x ? I don't see why it wouldn't work.
The patch fixes the drawing and removes some useless bloat. http://bugzilla.lyx.org/attachment.cgi?id=343&action=view I think it should be applied to 1.3.2cvs after testing with Qt 2 regards john ? QLyXKeySym.patch ? a.diff ? cvs.log ? fm2.diff ? patch ? patch1 ? qfont_metrics.bak.C ? qfont_metrics.map.C ? tr.diff ? ui/.xvpics ? ui/a.diff ? ui/patch2 ? ui/uisedall Index: QBrowseBox.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/qt2/QBrowseBox.C,v retrieving revision 1.10 diff -u -p -r1.10 QBrowseBox.C --- QBrowseBox.C 1 Dec 2002 22:59:18 -0000 1.10 +++ QBrowseBox.C 29 Mar 2003 15:14:35 -0000 @@ -30,10 +30,7 @@ QBrowseBox::QBrowseBox(int rows, int col { setNumRows(rows); setNumCols(cols); - setCellWidth(width()/cols); - setCellHeight(height()/rows); - texts_ = new QString[rows * cols]; pixmaps_ = new QPixmap[rows * cols]; activecell_.setX(-1); @@ -44,6 +41,9 @@ QBrowseBox::QBrowseBox(int rows, int col else setFrameStyle(QFrame::Panel | QFrame::Raised); + setVScrollBarMode(QScrollView::AlwaysOff); + setHScrollBarMode(QScrollView::AlwaysOff); + viewport()->setFocusPolicy(QWidget::StrongFocus); // setMouseTracking must be called after setFocusPolicy viewport()->setMouseTracking(true); @@ -52,10 +52,8 @@ QBrowseBox::QBrowseBox(int rows, int col } - QBrowseBox::~QBrowseBox() { - delete [] texts_; delete [] pixmaps_; } @@ -68,63 +66,33 @@ int QBrowseBox::coordsToIndex(int row, i } -void QBrowseBox::insertItem(QString const & text, int row, int col) -{ - texts_[coordsToIndex(row, col)] = text; -} - - -void QBrowseBox::insertItem(char const * text, int row, int col) -{ - insertItem(QString(text), row, col); -} - - void QBrowseBox::insertItem(QPixmap pixmap, int row, int col) { pixmaps_[coordsToIndex(row, col)] = pixmap; } -void QBrowseBox::insertItem( QPixmap pixmap) +void QBrowseBox::insertItem(QPixmap pixmap) { int w = pixmap.width() / numCols(); int h = pixmap.height() / numRows(); - for (int row = 0; row < numRows(); ++row) + for (int row = 0; row < numRows(); ++row) { for (int col = 0; col < numCols(); ++col) { QPixmap small(w,h); bitBlt(&small,0,0,&pixmap,col*w,row*h,w,h,Qt::CopyROP,false); insertItem(small, row, col); } + } - resize(pixmap.width() + (numCols() + 1) * frameWidth(), - pixmap.height() + (numRows() + 1) * frameWidth()); -} - - -void QBrowseBox::removeItem(int row, int col) -{ - texts_[coordsToIndex(row, col)] = ""; - pixmaps_[coordsToIndex(row, col)].resize(0, 0); -} - - -void QBrowseBox::clear() -{ - for (int row = 0; row < numRows(); ++row) - for (int col = 0; col < numCols(); ++col) - removeItem(row, col); + setCellWidth(pixmap.width() / numCols()); + setCellHeight(pixmap.height() / numRows()); + setMinimumWidth(pixmap.width() + (numCols() + 1) * 1); + setMinimumHeight(pixmap.height() + (numRows() + 1) * 1); + resize(minimumSize()); } -QString QBrowseBox::text(int row, int col) -{ - if (col < 0 || col >= numCols() || row < 0 || row >= numRows()) - return ""; - return texts_[coordsToIndex(row, col)]; -} - QPixmap QBrowseBox::pixmap(int row, int col) { if (col < 0 || col >= numCols() || row < 0 || row >= numRows()) @@ -132,11 +100,13 @@ QPixmap QBrowseBox::pixmap(int row, int return pixmaps_[coordsToIndex(row, col)]; } + int QBrowseBox::exec(const QPoint& pos) { return exec(pos.x(),pos.y()); } + int QBrowseBox::exec(const QWidget* trigger) { QPoint globalpos = trigger->parentWidget()->mapToGlobal( trigger->pos()); @@ -160,6 +130,7 @@ int QBrowseBox::exec(const QWidget* trig } } + int QBrowseBox::exec(int x,int y) { firstrelease_ = true; @@ -175,6 +146,7 @@ int QBrowseBox::exec(int x,int y) return -1; } + void QBrowseBox::keyPressEvent(QKeyEvent * e) { switch(e->key()) { @@ -209,6 +181,7 @@ void QBrowseBox::keyPressEvent(QKeyEvent } } + void QBrowseBox::contentsMouseReleaseEvent(QMouseEvent *) { @@ -222,48 +195,31 @@ void QBrowseBox::contentsMouseReleaseEve } } + void QBrowseBox::closeEvent(QCloseEvent * e) { e->accept(); qApp->exit_loop(); } + void QBrowseBox::paintCell(QPainter * painter, int row, int col) { - painter->setClipRect(cellGeometry(row,col));//, QPainter::CoordPainter); - bool ispixmap = false; + painter->setClipRect(cellGeometry(row, col)); - if (!pixmaps_[coordsToIndex(row,col)].isNull()) { - painter->drawPixmap(0,0,pixmaps_[coordsToIndex(row, col)]); - ispixmap = true; - } + int const index = coordsToIndex(row, col); + + painter->drawPixmap(0, 0, pixmaps_[index]); if (activecell_.x() == row && activecell_.y() == col) { - if (ispixmap) - qDrawShadeRect(painter, 0, 0, cellWidth(), - cellHeight(), colorGroup(), false, 1); - else - qDrawShadePanel(painter, 0, 0, cellWidth(), - cellHeight(), colorGroup(), false, 1); + qDrawShadeRect(painter, 0, 0, cellWidth(), + cellHeight(), colorGroup(), false, 1); } else { qDrawPlainRect(painter, 0, 0, cellWidth(), cellHeight(), colorGroup().background(), 1); } - if (!texts_[coordsToIndex(row, col)].isEmpty()) { - painter->drawText(0, 0, cellWidth(), - cellHeight(), AlignCenter, - texts_[coordsToIndex(row, col)]); - } painter->setClipping(false); -} - - -void QBrowseBox::resizeEvent(QResizeEvent * e) -{ - QGridView::resizeEvent(e); - setCellWidth(contentsRect().width() / numCols()); - setCellHeight(contentsRect().height() / numRows()); } Index: QBrowseBox.h =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/qt2/QBrowseBox.h,v retrieving revision 1.7 diff -u -p -r1.7 QBrowseBox.h --- QBrowseBox.h 1 Dec 2002 22:59:18 -0000 1.7 +++ QBrowseBox.h 29 Mar 2003 15:14:35 -0000 @@ -29,14 +29,8 @@ public: QBrowseBox(int rows, int cols, QWidget* parent=0, char const * name=0, WFlags f=0); ~QBrowseBox(); - void insertItem(QString const & text, int row, int col); - void insertItem(char const * text, int row, int col); - void insertItem(QPixmap pixmap, int row, int col); void insertItem(QPixmap pixmap); - void removeItem(int row, int col); - void clear(); - QString text(int row, int col); QPixmap pixmap(int row, int col); int exec(QPoint const & pos); @@ -48,7 +42,6 @@ signals: protected: virtual void keyPressEvent(QKeyEvent * e); - virtual void resizeEvent(QResizeEvent *e); virtual void contentsMouseReleaseEvent(QMouseEvent *); virtual void closeEvent(QCloseEvent * e); virtual void contentsMouseMoveEvent(QMouseEvent * e); @@ -63,9 +56,10 @@ private: void moveUp(); void moveDown(); + void insertItem(QPixmap pixmap, int row, int col); + int coordsToIndex(int row, int col); - QString * texts_; QPixmap* pixmaps_; QPoint activecell_; bool firstrelease_;