Fixing BR #419 - Any Action that would normaly trigger a scroll in the
authorMarcus Eggenberger <egs@quassel-irc.org>
Sun, 30 Nov 2008 15:26:18 +0000 (16:26 +0100)
committerMarcus Eggenberger <egs@quassel-irc.org>
Sun, 30 Nov 2008 15:26:18 +0000 (16:26 +0100)
ChatView triggers now a backlogrequest even if there is no scrollbar
visible. (MouseWheel, Page_Up/_Down, Shift Key_Up/_Down)

src/qtui/bufferwidget.cpp
src/qtui/chatview.cpp
src/qtui/chatview.h
src/qtui/settingspages/backlogsettingspage.ui

index 69718d5..9ac555f 100644 (file)
@@ -173,25 +173,16 @@ bool BufferWidget::eventFilter(QObject *watched, QEvent *event) {
     return true;
   }
 
-  int direction = 1;
   switch(keyEvent->key()) {
-    case Qt::Key_PageUp:
-    case Qt::Key_PageDown:
-      // static cast to access public qobject::event
-      return static_cast<QObject*>(ui.stackedWidget->currentWidget())->event(event);
-
-    case Qt::Key_Up:
-      direction = -1;
-    case Qt::Key_Down:
-      if(keyEvent->modifiers() == Qt::ShiftModifier) {
-        QAbstractScrollArea *scrollArea = qobject_cast<QAbstractScrollArea*>(ui.stackedWidget->currentWidget());
-        if(!scrollArea)
-          return false;
-        int sliderPosition = scrollArea->verticalScrollBar()->value();
-        scrollArea->verticalScrollBar()->setValue(sliderPosition + (direction * 12));
-        return true;
-      }
-    default:
+  case Qt::Key_Up:
+  case Qt::Key_Down:
+    if(!(keyEvent->modifiers() & Qt::ShiftModifier))
       return false;
+  case Qt::Key_PageUp:
+  case Qt::Key_PageDown:
+    // static cast to access public qobject::event
+    return static_cast<QObject*>(ui.stackedWidget->currentWidget())->event(event);
+  default:
+    return false;
   }
 }
index 024e49d..14f508e 100644 (file)
@@ -70,11 +70,37 @@ void ChatView::init(MessageFilter *filter) {
   connect(_scene, SIGNAL(lastLineChanged(QGraphicsItem *, qreal)), this, SLOT(lastLineChanged(QGraphicsItem *, qreal)));
   connect(_scene, SIGNAL(mouseMoveWhileSelecting(const QPointF &)), this, SLOT(mouseMoveWhileSelecting(const QPointF &)));
   setScene(_scene);
-  // installEventFilter(_scene);
 
   connect(verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(verticalScrollbarChanged(int)));
 }
 
+bool ChatView::event(QEvent *event) {
+  if(event->type() == QEvent::KeyPress) {
+    QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
+    switch(keyEvent->key()) {
+    case Qt::Key_Up:
+    case Qt::Key_Down:
+    case Qt::Key_PageUp:
+    case Qt::Key_PageDown:
+      if(!verticalScrollBar()->isVisible()) {
+       scene()->requestBacklog();
+       return true;
+      }
+    default:
+      break;
+    }
+  }
+
+  if(event->type() == QEvent::Wheel) {
+    if(!verticalScrollBar()->isVisible()) {
+      scene()->requestBacklog();
+      return true;
+    }
+  }
+
+  return QGraphicsView::event(event);
+}
+
 void ChatView::resizeEvent(QResizeEvent *event) {
   QGraphicsView::resizeEvent(event);
 
index 3d29bff..9a405b1 100644 (file)
@@ -49,6 +49,8 @@ public:
 
   virtual void addActionsToMenu(QMenu *, const QPointF &pos);
 
+  virtual bool event(QEvent *event);
+
 public slots:
   inline virtual void clear() {}
   void zoomIn();
index aa4d374..fd5c2cd 100644 (file)
    <item>
     <widget class="QStackedWidget" name="stackedWidget" >
      <property name="currentIndex" >
-      <number>1</number>
+      <number>0</number>
      </property>
      <widget class="QWidget" name="page" >
       <property name="geometry" >
        <rect>
         <x>0</x>
         <y>0</y>
-        <width>481</width>
-        <height>259</height>
+        <width>415</width>
+        <height>216</height>
        </rect>
       </property>
       <layout class="QVBoxLayout" name="verticalLayout_2" >
@@ -253,8 +253,8 @@ You can also chose to fetch additional older chatlines to provide a better conte
        <rect>
         <x>0</x>
         <y>0</y>
-        <width>100</width>
-        <height>30</height>
+        <width>415</width>
+        <height>216</height>
        </rect>
       </property>
       <layout class="QVBoxLayout" name="verticalLayout_4" >