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_;

Reply via email to