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

List:       kde-commits
Subject:    extragear/multimedia/amarok/src/playlist
From:       Nikolaj Hald Nielsen <nhnFreespirit () gmail ! com>
Date:       2009-01-11 10:02:33
Message-ID: 1231668153.452071.18795.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 909205 by nhnielsen:

More improvements to the new playist by Thomas Lübking <thomas.luebking@web.de>. Fix \
excessive escaping causing special characters to appear wrong in the playlist. Also \
add a number of new features to the layout handling allowing for more flexible \
playlist items.  See the "New Demo" layout for an example. 


 M  +0 -2      PlaylistDefines.h  
 M  +10 -10    PlaylistModel.cpp  
 M  +27 -0     view/listview/DefaultPlaylistLayouts.xml  
 M  +5 -4      view/listview/LayoutManager.cpp  
 M  +11 -4     view/listview/PrettyItemConfig.cpp  
 M  +5 -3      view/listview/PrettyItemConfig.h  
 M  +34 -35    view/listview/PrettyItemDelegate.cpp  


--- trunk/extragear/multimedia/amarok/src/playlist/PlaylistDefines.h #909204:909205
@@ -104,6 +104,4 @@
 
 }
 
-
 #endif
-
--- trunk/extragear/multimedia/amarok/src/playlist/PlaylistModel.cpp #909204:909205
@@ -181,20 +181,20 @@
             case Album:
             {
                 if ( m_items.at( row )->track()->album() )
-                    return Qt::escape( m_items.at( row )->track()->album()->name() \
); +                    return m_items.at( row )->track()->album()->name();
                 return QString();
             }
             case AlbumArtist:
             {
                 if ( m_items.at( row )->track()->album() )
                     if (  m_items.at( row )->track()->album()->albumArtist() )
-                        return Qt::escape( m_items.at( row \
)->track()->album()->albumArtist()->name() ); +                        return \
m_items.at( row )->track()->album()->albumArtist()->name();  return QString();
             }
             case Artist:
             {
                 if ( m_items.at( row )->track()->artist() )
-                    return Qt::escape( m_items.at( row )->track()->artist()->name() \
); +                    return m_items.at( row )->track()->artist()->name();
                 return QString();
             }
             case Bitrate:
@@ -207,12 +207,12 @@
             }
             case Comment:
             {
-                return Qt::escape( m_items.at( row )->track()->comment() );
+                return m_items.at( row )->track()->comment();
             }
             case Composer:
             {
                 if ( m_items.at( row )->track()->composer() )
-                    return Qt::escape( m_items.at( row \
)->track()->composer()->name() ); +                    return m_items.at( row \
)->track()->composer()->name();  return QString();
             }
             case CoverImage:
@@ -240,7 +240,7 @@
             case Genre:
             {
                 if ( m_items.at( row )->track()->genre() )
-                    return Qt::escape( m_items.at( row )->track()->genre()->name() \
); +                    return m_items.at( row )->track()->genre()->name();
                 return QString();
             }
             case LastPlayed:
@@ -285,7 +285,7 @@
                     sourceName = sic->sourceName();
                     delete sic;
                 }
-                return Qt::escape( sourceName );
+                return sourceName;
             }
             case SourceEmblem:
             {
@@ -302,7 +302,7 @@
             }
             case Title:
             {
-                return Qt::escape( m_items.at( row )->track()->prettyName() );
+                return m_items.at( row )->track()->prettyName();
             }
             case TitleWithTrackNum:
             {
@@ -315,7 +315,7 @@
                 } else
                     trackString = trackName;
                 
-                return Qt::escape( trackString );
+                return trackString;
             }
             case TrackNumber:
             {
@@ -328,7 +328,7 @@
             case Year:
             {
                 if ( m_items.at( row )->track()->year() )
-                    return Qt::escape( m_items.at( row )->track()->year()->name() );
+                    return m_items.at( row )->track()->year()->name();
                 return QString();
             }
 
--- trunk/extragear/multimedia/amarok/src/playlist/view/listview/DefaultPlaylistLayouts.xml \
#909204:909205 @@ -130,4 +130,31 @@
             </row>
         </group_body>
     </layout>
+
+    <layout name="New Demo">
+        <single_track show_cover="false">
+            <row>
+                <element value="Artist" suffix=": " />
+                <element value="Title" suffix=" " bold="true"/>
+                <element value="Album" prefix="(" suffix=")" />
+                <element value="Length" bold="false" alignment="right"/>
+            </row>
+        </single_track>
+        <group_head show_cover="false" active_indicator_row="-1">
+            <row>
+                <!-- SIC, for right alignment, we want an inversed order -->
+                <element value="Artist" prefix =" by " alignment="right"/>
+                <element value="Album" bold="true" alignment="right"/>
+                <!--                 <element value="Length" alignment="right"/> // \
how to get album length? --> +            </row>
+        </group_head>
+        <group_body show_cover="false">
+            <row>
+                <element value="Track number" suffix = ". "/>
+                <element value="Title"/>
+                <element value="Length" alignment="right"/>
+            </row>
+        </group_body>
+    </layout>
+    
 </playlist_layouts>
\ No newline at end of file
--- trunk/extragear/multimedia/amarok/src/playlist/view/listview/LayoutManager.cpp \
#909204:909205 @@ -152,9 +152,10 @@
 
             debug() << "element!";
 
-            QString valStr = elementNode.toElement().attribute( "value", "Title" );
-            int value = columnNames.indexOf( valStr );
-            qreal size = elementNode.toElement().attribute( "size", "1.0" \
).toDouble(); +            int value = columnNames.indexOf( \
elementNode.toElement().attribute( "value", "Title" ) ); +            QString prefix \
= elementNode.toElement().attribute( "prefix", QString() ); +            QString \
sufix = elementNode.toElement().attribute( "suffix", QString() ); +            qreal \
                size = elementNode.toElement().attribute( "size", "0.0" ).toDouble();
             bool bold = ( elementNode.toElement().attribute( "bold", "false" \
                ).compare( "true", Qt::CaseInsensitive ) == 0 );
             QString alignmentString = elementNode.toElement().attribute( \
"alignment", "left" );  int alignment;
@@ -167,7 +168,7 @@
             else
                 alignment = Qt::AlignCenter| Qt::AlignVCenter;
 
-            row.addElement( PrettyItemConfigRowElement( value, size, bold, \
alignment, value < 0 ? valStr : QString() ) ); +            row.addElement( \
PrettyItemConfigRowElement( value, size, bold, alignment, prefix, sufix ) );  }
 
         config.addRow( row );
--- trunk/extragear/multimedia/amarok/src/playlist/view/listview/PrettyItemConfig.cpp \
#909204:909205 @@ -21,12 +21,14 @@
 
 namespace Playlist {
 
-    PrettyItemConfigRowElement::PrettyItemConfigRowElement( int value, qreal size, \
bool bold, int alignment, const QString &string ) +    \
PrettyItemConfigRowElement::PrettyItemConfigRowElement( int value, qreal size, bool \
bold, int alignment, +                                                            \
const QString &prefix , const QString &suffix )  : m_value( value )
     , m_size( size )
     , m_bold( bold )
     , m_alignment( alignment )
-    , m_string( string )
+    , m_prefix( prefix )
+    , m_suffix( suffix )
 {
 }
 
@@ -50,11 +52,16 @@
     return m_alignment;
 }
 
-QString PrettyItemConfigRowElement::string() const
+QString PrettyItemConfigRowElement::prefix() const
 {
-    return m_string;
+    return m_prefix;
 }
 
+QString PrettyItemConfigRowElement::suffix() const
+{
+    return m_suffix;
+}
+
 //////////////////////////////////////////////
 
 void PrettyItemConfigRow::addElement( PrettyItemConfigRowElement element )
--- trunk/extragear/multimedia/amarok/src/playlist/view/listview/PrettyItemConfig.h \
#909204:909205 @@ -36,20 +36,22 @@
 class PrettyItemConfigRowElement{
 
 public:
-    PrettyItemConfigRowElement( int value, qreal size, bool bold, int alignment, \
const QString &string = QString() ); +    PrettyItemConfigRowElement( int value, \
qreal size, bool bold, int alignment, +                                const QString \
&prefix = QString(), const QString &suffix = QString() );  
     int value() const;
     qreal size() const;
     bool bold() const;
     int alignment() const;
-    QString string() const;
+    QString prefix() const;
+    QString suffix() const;
     
 private:
     int m_value;
     qreal m_size;
     bool m_bold;
     int m_alignment;
-    QString m_string;
+    QString m_prefix, m_suffix;
 };
 
 class PrettyItemConfigRow{
--- trunk/extragear/multimedia/amarok/src/playlist/view/listview/PrettyItemDelegate.cpp \
#909204:909205 @@ -263,55 +263,54 @@
                                   "active_overlay" ) );
         }
 
-        for ( int j = 0; j < elementCount; j++ ) {
+        QRectF rowBox( itemOffsetX, rowOffsetY, rowWidth-itemOffsetX, rowHeight );
 
+        for ( int j = 0; j < elementCount; ++j ) {
+
             PrettyItemConfigRowElement element = row.element( j );
 
             int value = element.value();
-            bool bold = element.bold();
-            int alignment = element.alignment();
 
-            QString text;
-            if (value < 0)
-                text = element.string();
-            else
+            QModelIndex textIndex = index.model()->index( index.row(), value );
+            QString text = textIndex.data( Qt::DisplayRole ).toString();
+
+            qreal itemWidth = 0.0;
+            if ( !text.isEmpty() )
             {
-                QModelIndex textIndex = index.model()->index( index.row(), value );
-                text = textIndex.data( Qt::DisplayRole ).toString();
-            }
+                text = element.prefix() + text + element.suffix();
+                
+                bool bold = element.bold();
+                int alignment = element.alignment();
+                
+                QFont font = option.font;
+                font.setBold( bold );
+                painter->setFont( font );
 
-            QFont font = option.font;
-            font.setBold( bold );
-            painter->setFont( font );
+                QRectF elementBox;
+                if ( element.size() > 0 )
+                {
+                    elementBox = rowBox;
+                    itemWidth = rowWidth * element.size();
+                    elementBox.setWidth(itemWidth);
+                    text = QFontMetricsF( font ).elidedText( text, Qt::ElideRight, \
itemWidth ); +                    painter->drawText( rowBox, alignment, text );
+                    rowBox.setLeft( elementBox.right() + PADDING );
+                }
+                else
+                {
+                    painter->drawText( rowBox, alignment, text, &elementBox );
+                    if (alignment & Qt::AlignRight)
+                        rowBox.setRight( elementBox.left() - PADDING );
+                    else
+                        rowBox.setLeft( elementBox.right() + PADDING );
+                }
 
-            qreal itemWidth;
-
-            if (element.size() > 0)
-            {
-                itemWidth = rowWidth * element.size();
-                QRectF textBox( itemOffsetX, rowOffsetY, itemWidth, rowHeight );
-                text = QFontMetricsF(font).elidedText( text, Qt::ElideRight, \
                itemWidth );
-                painter->drawText( textBox, alignment, text );
             }
-            else
-            {
-                QRectF textBox( itemOffsetX, rowOffsetY, rowWidth-itemOffsetX, \
                rowHeight );
-                painter->drawText( textBox, alignment, text, &textBox );
-                itemWidth = textBox.width();
-            }
 
-            //if not the last item, add a PADDING
-            if ( j < elementCount - 1 )
-                itemWidth += PADDING;
-            
-            itemOffsetX += itemWidth;
-
         }
 
-
         rowOffsetY += rowHeight;
 
-
     }
 }
 


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

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