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

List:       kde-commits
Subject:    KDE/kdepim/views/conversationview
From:       Aron Boström <c02ab () efd ! lth ! se>
Date:       2006-06-30 15:39:17
Message-ID: 1151681957.592661.6537.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 556536 by bostrom:

SoC. More refacts, and some enhanced implementations, though not as fast.

 M  +38 -54    conversationdelegate.cpp  
 M  +4 -1      conversationdelegate.h  


--- trunk/KDE/kdepim/views/conversationview/conversationdelegate.cpp #556535:556536
@@ -72,51 +72,26 @@
   DummyKonadiConversation *c = \
fmodel->conversation(pmodel->mapToSource(index).row());  QString ctitle = \
c->conversationTitle();  QString ctime = c->arrivalTimeInText();
-	int tmpLineWidth = option.rect.width();
-  int dotsWidth = option.fontMetrics.width("...");
-
   int messageCount = c->count();
   QString messageCountText = QString("(%L1)").arg(messageCount);
-  int messageCountWidth = option.fontMetrics.width(messageCountText);
-  
 	QRect countBox = messageCount > 1 ? getCountBox(option, messageCountText) : \
QRect();  QRect authorsBox = getAuthorsBox(option, countBox);
-  QString cauthors = getAuthors(option, c, authorsBox.width());//c->author(0);
-	
-  int linePos = option.rect.top();
-  int authorWidth = qMin(leftBaseWidth - (messageCount > 1 ? messageCountWidth + \
                margin : 0), 
-                         tmpLineWidth - (messageCount > 1 ? messageCountWidth + \
                2*margin : 0) - margin);
-//  int authorPos = margin + option.rect.left();
-  int tmpAuthorWidth = authorWidth;
-  if (option.fontMetrics.width(cauthors) > authorWidth && authorWidth > dotsWidth) {
-    tmpAuthorWidth = authorWidth - dotsWidth;
-//    painter->drawText(authorPos+tmpAuthorWidth, linePos, dotsWidth, \
                option.fontMetrics.height(), flags, "...");
-  }
-//  painter->drawText(authorPos, linePos, tmpAuthorWidth, \
option.fontMetrics.height(), flags, cauthors); +  QString cauthors = \
getAuthors(option, c, authorsBox.width()); +  QRect timeBox = getRightBox(option, \
option.fontMetrics.width(ctime));  +  QRect leftBox = countBox.isNull() ? authorsBox \
: countBox; +	QRect subjectBox = getMiddleBox(option, leftBox, timeBox);
 
   painter->drawText(authorsBox, flags, cauthors);
-  if (messageCount > 1) {
+  if (messageCount > 1)
     painter->drawText(countBox, flags, messageCountText);
+	if (subjectBox.width() > margin) {
+	  chop(option, ctitle, subjectBox.width());
+  	painter->drawText(subjectBox, flags, ctitle);
   }
-
-  int subjectPos = leftBaseWidth + 2*margin + option.rect.left();
-  int timeWidth = option.fontMetrics.width(ctime);
-  int subjectWidth = tmpLineWidth - subjectPos - timeWidth - 2*margin;
-  int tmpSubjectWidth = subjectWidth;
-  if (option.fontMetrics.width(ctitle) > subjectWidth && subjectWidth > dotsWidth) {
-    tmpSubjectWidth = subjectWidth - dotsWidth;
-    painter->drawText(subjectPos+tmpSubjectWidth, linePos, dotsWidth, \
                option.fontMetrics.height(), flags, "...");
-  }
-  painter->drawText(subjectPos, linePos, tmpSubjectWidth, \
                option.fontMetrics.height(), flags, ctitle);
-
-  int timePos = qMax(tmpLineWidth - margin - timeWidth, leftBaseWidth + \
                2*margin)+option.rect.left();
-  timeWidth = qMax(tmpLineWidth - (timePos + margin), 0);
-  int tmpTimeWidth = timeWidth;
-  if (option.fontMetrics.width(ctime) > timeWidth && timeWidth > dotsWidth) {
-    tmpTimeWidth = timeWidth - dotsWidth;
-    painter->drawText(timePos+tmpTimeWidth, linePos, dotsWidth, \
                option.fontMetrics.height(), flags, "...");
-  }
-  painter->drawText(timePos, linePos, tmpTimeWidth, option.fontMetrics.height(), \
flags, ctime); +	if (timeBox.width() > margin) {
+		chop(option, ctime, timeBox.width());
+  	painter->drawText(timeBox, flags, ctime);
+	}
 }
 
 inline QRect ConversationDelegate::getAuthorsBox(const QStyleOptionViewItem &option, \
const QRect &decoBox) const @@ -129,7 +104,7 @@
   return QRect(x, y, width, height);
 }
 
-inline QString ConversationDelegate::getAuthors(const QStyleOptionViewItem &option, \
const DummyKonadiConversation *conversation, int maxWidth) const +inline QString \
ConversationDelegate::getAuthors(const QStyleOptionViewItem &option, const \
DummyKonadiConversation *conversation, const int maxWidth) const  {
   QString authors = conversation->author(0);
   QString me;
@@ -147,36 +122,51 @@
       authors.append(tmpAuthor);
     }
   }
+  chop(option, authors, maxWidth);
+  return authors;
+}
+
+inline void ConversationDelegate::chop(const QStyleOptionViewItem &option, QString \
&orig, int width) const +{
   QString dots = QString("...");
-  while (option.fontMetrics.width(authors) > maxWidth && authors.size() > 1) {
-    authors.chop(4);
-    authors.append("...");
+  while (option.fontMetrics.width(orig) > width && orig.size() > 4) {
+    orig.chop(4);
+    orig.append(dots);
   }
-  return authors;
 }
 
 inline QRect ConversationDelegate::getCountBox(const QStyleOptionViewItem &option, \
const QString &count) const  {
-  int y = option.rect.top();
   QRect tmpAuthorBox = getAuthorsBox(option);
   int right = tmpAuthorBox.left() + tmpAuthorBox.width();
 	int width = option.fontMetrics.width(count);
   int x = right - width;
+  int y = option.rect.top();
 	int height = option.fontMetrics.height();
   return QRect(x, y, width, height);
 }
 
-inline QRect ConversationDelegate::getBox(const QStyleOptionViewItem &option, const \
QRect &left, const QRect &right) const +inline QRect \
ConversationDelegate::getMiddleBox(const QStyleOptionViewItem &option, const QRect \
&left, const QRect &right) const  {
-  int x1 = left.right() + margin;
-  int x2 = right.left() + margin;
-  int width = option.rect.width() - x1 - x2;
-	if (width <= option.rect.width()) return QRect();
+  int x1 = left.left() + left.width() + margin;
+  int x2 = right.left() - margin;
+  int width = x2 - x1;
+	if (width <= 0) return QRect();
   int y = option.rect.top();
 	int height = option.fontMetrics.height();
   return QRect(x1, y, width, height);
 }
 
+inline QRect ConversationDelegate::getRightBox(const QStyleOptionViewItem &option, \
int neededWidth) const +{
+  int x2 = option.rect.right() - margin;
+  int x1 = qMax(x2 - neededWidth, option.rect.left() + leftBaseWidth + 2*margin);
+  int width = x2 - x1;
+  int y = option.rect.top();
+	int height = option.fontMetrics.height();
+  return QRect(x1, y, width, height);
+}
+
 inline void ConversationDelegate::resizeBox(QRect &box, const QRect &deco) const
 {
 	box.setWidth(box.width() - margin - deco.width());
@@ -187,12 +177,6 @@
 	return (box.width() >= margin + 2*deco.width());
 }
 
-/*inline QString ConversationDelegate::getTitle(const QStyleOptionViewItem &option, \
                const) const
-{
-	return QRect();
-}*/
-
-
 QSize ConversationDelegate::sizeHint(const QStyleOptionViewItem &option, const \
QModelIndex &/*index*/) const  {
   int lineHeight = option.fontMetrics.height() + 2;
--- trunk/KDE/kdepim/views/conversationview/conversationdelegate.h #556535:556536
@@ -26,6 +26,7 @@
 #include <QFontMetrics>
 #include <QModelIndex>
 #include <QSize>
+#include <QRect>
 #include <QStringList>
 #include <QSortFilterProxyModel>
 #include <QStyleOptionViewItem>
@@ -56,7 +57,9 @@
 	bool isOdd(int row) const;
 	void resizeBox(QRect &box, const QRect &deco) const;
 	bool printDecoBox(const QRect &box, const QRect &deco) const;
-	QRect getBox(const QStyleOptionViewItem &option, const QRect &left, const QRect \
&right) const; +	QRect getMiddleBox(const QStyleOptionViewItem &option, const QRect \
&left, const QRect &right) const; +	QRect getRightBox(const QStyleOptionViewItem \
&option, int neededWidth) const; +	void chop(const QStyleOptionViewItem &option, \
QString &orig, int width) const;  };
 
 #endif


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

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