add context menu action to reset chat column widths
authorDaniel Albers <daniel@lbe.rs>
Sat, 1 Mar 2014 18:51:29 +0000 (19:51 +0100)
committerDaniel Albers <daniel@lbe.rs>
Tue, 4 Mar 2014 19:07:55 +0000 (20:07 +0100)
If a ChatScene column has been resized during the current Quassel client
session or a column is <= 10 px wide, offer to reset the columns to sane
widths.

src/qtui/chatscene.cpp
src/qtui/chatscene.h
src/qtui/columnhandleitem.cpp

index a7f2360..4dfd813 100644 (file)
@@ -89,12 +89,12 @@ ChatScene::ChatScene(QAbstractItemModel *model, const QString &idString, qreal w
     connect(this, SIGNAL(sceneRectChanged(const QRectF &)), _markerLine, SLOT(sceneRectChanged(const QRectF &)));
 
     ChatViewSettings defaultSettings;
-    int defaultFirstColHandlePos = defaultSettings.value("FirstColumnHandlePos", 80).toInt();
-    int defaultSecondColHandlePos = defaultSettings.value("SecondColumnHandlePos", 200).toInt();
+    _defaultFirstColHandlePos = defaultSettings.value("FirstColumnHandlePos", 80).toInt();
+    _defaultSecondColHandlePos = defaultSettings.value("SecondColumnHandlePos", 200).toInt();
 
     ChatViewSettings viewSettings(this);
-    _firstColHandlePos = viewSettings.value("FirstColumnHandlePos", defaultFirstColHandlePos).toInt();
-    _secondColHandlePos = viewSettings.value("SecondColumnHandlePos", defaultSecondColHandlePos).toInt();
+    _firstColHandlePos = viewSettings.value("FirstColumnHandlePos", _defaultFirstColHandlePos).toInt();
+    _secondColHandlePos = viewSettings.value("SecondColumnHandlePos", _defaultSecondColHandlePos).toInt();
 
     _firstColHandle = new ColumnHandleItem(QtUi::style()->firstColumnSeparator());
     addItem(_firstColHandle);
@@ -159,6 +159,17 @@ ColumnHandleItem *ChatScene::secondColumnHandle() const
     return _secondColHandle;
 }
 
+void ChatScene::resetColumnWidths()
+{
+    //make sure first column is at least 80 px wide, second 120 px
+    int firstColHandlePos = qMax(_defaultFirstColHandlePos,
+                                 80);
+    int secondColHandlePos = qMax(_defaultSecondColHandlePos,
+                                  firstColHandlePos + 120);
+
+    _firstColHandle->setXPos(firstColHandlePos);
+    _secondColHandle->setXPos(secondColHandlePos);
+}
 
 ChatLine *ChatScene::chatLine(MsgId msgId, bool matchExact, bool ignoreDayChange) const
 {
@@ -827,6 +838,11 @@ void ChatScene::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
     if (QtUi::mainWindow()->menuBar()->isHidden())
         menu.addAction(QtUi::actionCollection("General")->action("ToggleMenuBar"));
 
+    // show column reset action if columns have been resized in this session or there is at least one very narrow column
+    if ((_firstColHandlePos != _defaultFirstColHandlePos) || (_secondColHandlePos != _defaultSecondColHandlePos) ||
+        (_firstColHandlePos <= 10) || (_secondColHandlePos - _firstColHandlePos <= 10))
+        menu.addAction(new Action(tr("Reset Column Widths"), &menu, this, SLOT(resetColumnWidths()), 0));
+
     menu.exec(event->screenPos());
 }
 
index c640b6a..d8c4db9 100644 (file)
@@ -130,6 +130,8 @@ public slots:
     void setWidth(qreal width);
     void layout(int start, int end, qreal width);
 
+    void resetColumnWidths();
+
     void setMarkerLineVisible(bool visible = true);
     void setMarkerLine(MsgId msgId = MsgId());
     void jumpToMarkerLine(bool requestBacklog);
@@ -206,6 +208,7 @@ private:
 
     ColumnHandleItem *_firstColHandle, *_secondColHandle;
     qreal _firstColHandlePos, _secondColHandlePos;
+    int _defaultFirstColHandlePos, _defaultSecondColHandlePos;
     CutoffMode _cutoffMode;
 
     ChatItem *_selectingItem;
index 916748a..e67c7a1 100644 (file)
@@ -58,6 +58,7 @@ void ColumnHandleItem::setXPos(qreal xpos)
     QRectF sceneBRect = _boundingRect.translated(x(), 0);
     _sceneLeft = sceneBRect.left();
     _sceneRight = sceneBRect.right();
+    emit positionChanged(xpos);
 }