[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    branches/KDE/4.2/kdepim/akregator/src
From:       Frank Osterfeld <frank.osterfeld () kdemail ! net>
Date:       2009-02-25 13:25:23
Message-ID: 1235568323.164283.17288.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 931550 by osterfeld:

backport:

------------------------------------------------------------------------
r918194 | marten | 2009-01-29 16:46:41 +0100 (Thu, 29 Jan 2009) | 3 lines

Maintain separate column states and sizes for the Group and Feed modes,
instead of simply hiding or showing the feed column.

------------------------------------------------------------------------
------------------------------------------------------------------------
r918196 | marten | 2009-01-29 17:03:24 +0100 (Thu, 29 Jan 2009) | 5 lines

Work around possible Qt 4.4 bug causing the last column to expand beyond
the viewport width.  Re-evaluate this after the transition to Qt 4.5.

CCBUG:152702

------------------------------------------------------------------------
------------------------------------------------------------------------
r919567 | osterfeld | 2009-02-01 12:38:34 +0100 (Sun, 01 Feb 2009) | 6 lines

fix some issues I had with the feed/group settings separation:
Settings weren't saved when switching modes, also save state when saving settings
Remove useless "Unspecified" state and redundant m_aggregationMode flag. 
CCBUG:152702
CCMAIL:jjm@keelhaul.me.uk

------------------------------------------------------------------------


 M  +48 -15    articlelistview.cpp  
 M  +3 -4      articlelistview.h  


--- branches/KDE/4.2/kdepim/akregator/src/articlelistview.cpp #931549:931550
@@ -201,16 +201,24 @@
 
 void ArticleListView::saveHeaderSettings()
 {
-    if ( model() )
-        m_headerState = header()->saveState();
+    if ( model() ) {
+        const QByteArray state = header()->saveState();
+        if ( m_columnMode == FeedMode )
+            m_feedHeaderState = state;
+        else
+            m_groupHeaderState = state;
+    }
+
     KConfigGroup conf( Settings::self()->config(), "General" );
-    conf.writeEntry( "ArticleListHeaders", m_headerState.toBase64() );
+    conf.writeEntry( "ArticleListFeedHeaders", m_feedHeaderState.toBase64() );
+    conf.writeEntry( "ArticleListGroupHeaders", m_groupHeaderState.toBase64() );
 }
 
 void ArticleListView::loadHeaderSettings()
 {
     KConfigGroup conf( Settings::self()->config(), "General" );
-    m_headerState = QByteArray::fromBase64( conf.readEntry( "ArticleListHeaders" \
).toAscii() ); +    m_feedHeaderState = QByteArray::fromBase64( conf.readEntry( \
"ArticleListFeedHeaders" ).toAscii() ); +    m_groupHeaderState = \
QByteArray::fromBase64( conf.readEntry( "ArticleListGroupHeaders" ).toAscii() );  }
 
 QItemSelectionModel* ArticleListView::articleSelectionModel() const
@@ -244,7 +252,19 @@
 {
     if ( m_columnMode == GroupMode )
         return;
-    setColumnHidden( ArticleListView::FeedTitleColumn, false );
+
+    // The next line (used three times in this file) is a workaround for a
+    // possible Qt 4.4.3 bug that causes the last column to expand beyond
+    // the viewport width.  QHeaderViewPrivate::lastSectionSize may not be
+    // initialised when QHeaderViewPrivate::resizeSections() is called,
+    // doing the resizeSection() here ensures that it has a sensible value.
+    // This may not be necessary with Qt 4.5.
+    header()->resizeSection( header()->count() - 1, 1 );
+
+    if ( model() )
+        m_feedHeaderState = header()->saveState();
+
+    header()->restoreState( m_groupHeaderState );
     m_columnMode = GroupMode;
 }
 
@@ -252,7 +272,11 @@
 {
     if ( m_columnMode == FeedMode )
         return;
-    setColumnHidden( ArticleListView::FeedTitleColumn, true );
+
+    header()->resizeSection( header()->count() - 1, 1 );
+    if ( model() )
+        m_groupHeaderState = header()->saveState();
+    header()->restoreState( m_feedHeaderState );
     m_columnMode = FeedMode;
 }
 
@@ -263,9 +287,6 @@
 
 void ArticleListView::setIsAggregation( bool aggregation )
 {
-    if ( aggregation == m_isAggregation )
-        return;
-    m_isAggregation = aggregation;
     if ( aggregation )
         setGroupMode();
     else
@@ -274,8 +295,7 @@
 
 ArticleListView::ArticleListView( QWidget* parent )
     : QTreeView(parent),
-    m_columnMode( Unspecified ),
-    m_isAggregation( false )
+    m_columnMode( FeedMode )
 {
     setSortingEnabled( true );
     setAlternatingRowColors( true );
@@ -377,13 +397,26 @@
 }
 
 
-void ArticleListView::setModel( QAbstractItemModel* m ) {
+void ArticleListView::setModel( QAbstractItemModel* m )
+{
+    const bool groupMode = m_columnMode == GroupMode;
+
     QAbstractItemModel* const oldModel = model();
-    if ( oldModel )
-        m_headerState = header()->saveState();
+    if ( oldModel ) {
+        const QByteArray state = header()->saveState();
+        if ( groupMode )
+            m_groupHeaderState = state;
+        else
+            m_feedHeaderState = state;
+    }
+
     QTreeView::setModel( m );
+
     if ( m )
-        header()->restoreState( m_headerState );
+    {
+        header()->resizeSection( header()->count() - 1, 1 );
+        header()->restoreState( groupMode ? m_groupHeaderState : m_feedHeaderState \
); +    }
 }
 
 void ArticleListView::slotClear()
--- branches/KDE/4.2/kdepim/akregator/src/articlelistview.h #931549:931550
@@ -159,13 +159,12 @@
 
 private:
 
-    enum Column { ItemTitleColumn=0, FeedTitleColumn, DateColumn, ColumnCount };
-    enum ColumnMode { Unspecified, GroupMode, FeedMode };
+    enum ColumnMode { GroupMode, FeedMode };
     ColumnMode m_columnMode;
-    bool m_isAggregation;
     QPointer<SortColorizeProxyModel> m_proxy;
     std::vector<boost::shared_ptr<const Filters::AbstractMatcher> > m_matchers;
-    QByteArray m_headerState;
+    QByteArray m_feedHeaderState;
+    QByteArray m_groupHeaderState;
 };
 
 } // namespace Akregator


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic