Hi

Today I've simplified the avatar selector dialog a bit.
Screenshot at:
http://people.mandriva.com/~boiko/kopete/avatars/kopete_avatar_dialog.png

Please review the changes.

Cheers
-- 
Gustavo Pichorim Boiko
Index: libkopete/ui/avatardialog.cpp
===================================================================
--- libkopete/ui/avatardialog.cpp	(revisão 736213)
+++ libkopete/ui/avatardialog.cpp	(cópia de trabalho)
@@ -46,6 +46,7 @@
 AvatarDialog::AvatarDialog(QWidget *parent)
  : KDialog(parent), d(new Private)
 {
+	showButtonSeparator(true);
 	setCaption( i18n("Select an avatar") );
 	setButtons( KDialog::Ok | KDialog::Cancel );
 
Index: libkopete/ui/avatarselectorwidget.ui
===================================================================
--- libkopete/ui/avatarselectorwidget.ui	(revisão 736213)
+++ libkopete/ui/avatarselectorwidget.ui	(cópia de trabalho)
@@ -5,225 +5,86 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>423</width>
-    <height>363</height>
+    <width>478</width>
+    <height>331</height>
    </rect>
   </property>
+  <property name="minimumSize" >
+   <size>
+    <width>400</width>
+    <height>300</height>
+   </size>
+  </property>
   <layout class="QGridLayout" >
-   <property name="leftMargin" >
-    <number>0</number>
-   </property>
-   <property name="topMargin" >
-    <number>0</number>
-   </property>
-   <property name="rightMargin" >
-    <number>0</number>
-   </property>
-   <property name="bottomMargin" >
-    <number>0</number>
-   </property>
-   <item row="0" column="0" >
-    <widget class="QTabWidget" name="tabAvatar" >
-     <property name="sizePolicy" >
-      <sizepolicy vsizetype="MinimumExpanding" hsizetype="Expanding" >
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
+   <item row="0" column="0" colspan="3" >
+    <widget class="QListWidget" name="listUserAvatar" >
+     <property name="showDropIndicator" stdset="0" >
+      <bool>false</bool>
      </property>
-     <property name="currentIndex" >
-      <number>0</number>
+     <property name="dragDropMode" >
+      <enum>QAbstractItemView::NoDragDrop</enum>
      </property>
-     <widget class="QWidget" name="tabUser" >
-      <attribute name="title" >
-       <string>User</string>
-      </attribute>
-      <layout class="QGridLayout" >
-       <property name="leftMargin" >
-        <number>9</number>
-       </property>
-       <property name="topMargin" >
-        <number>9</number>
-       </property>
-       <property name="rightMargin" >
-        <number>9</number>
-       </property>
-       <property name="bottomMargin" >
-        <number>9</number>
-       </property>
-       <property name="horizontalSpacing" >
-        <number>6</number>
-       </property>
-       <property name="verticalSpacing" >
-        <number>6</number>
-       </property>
-       <item row="0" column="0" >
-        <widget class="QListWidget" name="listUserAvatar" >
-         <property name="alternatingRowColors" >
-          <bool>true</bool>
-         </property>
-         <property name="iconSize" >
-          <size>
-           <width>64</width>
-           <height>64</height>
-          </size>
-         </property>
-        </widget>
-       </item>
-      </layout>
-     </widget>
-     <widget class="QWidget" name="tabContacts" >
-      <attribute name="title" >
-       <string>Contacts</string>
-      </attribute>
-      <layout class="QGridLayout" >
-       <property name="leftMargin" >
-        <number>9</number>
-       </property>
-       <property name="topMargin" >
-        <number>9</number>
-       </property>
-       <property name="rightMargin" >
-        <number>9</number>
-       </property>
-       <property name="bottomMargin" >
-        <number>9</number>
-       </property>
-       <property name="horizontalSpacing" >
-        <number>6</number>
-       </property>
-       <property name="verticalSpacing" >
-        <number>6</number>
-       </property>
-       <item row="0" column="0" >
-        <widget class="QListWidget" name="listUserContact" >
-         <property name="alternatingRowColors" >
-          <bool>true</bool>
-         </property>
-         <property name="iconSize" >
-          <size>
-           <width>64</width>
-           <height>64</height>
-          </size>
-         </property>
-        </widget>
-       </item>
-      </layout>
-     </widget>
+     <property name="alternatingRowColors" >
+      <bool>false</bool>
+     </property>
+     <property name="selectionBehavior" >
+      <enum>QAbstractItemView::SelectRows</enum>
+     </property>
+     <property name="iconSize" >
+      <size>
+       <width>96</width>
+       <height>96</height>
+      </size>
+     </property>
+     <property name="textElideMode" >
+      <enum>Qt::ElideNone</enum>
+     </property>
+     <property name="movement" >
+      <enum>QListView::Static</enum>
+     </property>
+     <property name="resizeMode" >
+      <enum>QListView::Adjust</enum>
+     </property>
+     <property name="layoutMode" >
+      <enum>QListView::Batched</enum>
+     </property>
+     <property name="viewMode" >
+      <enum>QListView::IconMode</enum>
+     </property>
+     <property name="uniformItemSizes" >
+      <bool>true</bool>
+     </property>
     </widget>
    </item>
-   <item row="0" column="1" >
-    <layout class="QVBoxLayout" >
-     <item>
-      <widget class="QGroupBox" name="groupBox" >
-       <property name="sizePolicy" >
-        <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="title" >
-        <string>Current avatar</string>
-       </property>
-       <layout class="QGridLayout" >
-        <property name="leftMargin" >
-         <number>9</number>
-        </property>
-        <property name="topMargin" >
-         <number>9</number>
-        </property>
-        <property name="rightMargin" >
-         <number>9</number>
-        </property>
-        <property name="bottomMargin" >
-         <number>9</number>
-        </property>
-        <property name="horizontalSpacing" >
-         <number>6</number>
-        </property>
-        <property name="verticalSpacing" >
-         <number>6</number>
-        </property>
-        <item row="0" column="0" >
-         <widget class="QLabel" name="labelAvatarImage" >
-          <property name="sizePolicy" >
-           <sizepolicy vsizetype="Expanding" hsizetype="Expanding" >
-            <horstretch>0</horstretch>
-            <verstretch>0</verstretch>
-           </sizepolicy>
-          </property>
-          <property name="minimumSize" >
-           <size>
-            <width>96</width>
-            <height>96</height>
-           </size>
-          </property>
-          <property name="maximumSize" >
-           <size>
-            <width>96</width>
-            <height>96</height>
-           </size>
-          </property>
-          <property name="baseSize" >
-           <size>
-            <width>96</width>
-            <height>96</height>
-           </size>
-          </property>
-          <property name="autoFillBackground" >
-           <bool>true</bool>
-          </property>
-          <property name="frameShape" >
-           <enum>QFrame::Box</enum>
-          </property>
-          <property name="scaledContents" >
-           <bool>true</bool>
-          </property>
-         </widget>
-        </item>
-       </layout>
-      </widget>
-     </item>
-     <item>
-      <widget class="QPushButton" name="buttonAddAvatar" >
-       <property name="text" >
-        <string>Add Avatar...</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QPushButton" name="buttonRemoveAvatar" >
-       <property name="text" >
-        <string>Remove Avatar</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <spacer>
-       <property name="orientation" >
-        <enum>Qt::Vertical</enum>
-       </property>
-       <property name="sizeHint" >
-        <size>
-         <width>20</width>
-         <height>40</height>
-        </size>
-       </property>
-      </spacer>
-     </item>
-    </layout>
+   <item row="1" column="2" >
+    <spacer>
+     <property name="orientation" >
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="sizeHint" >
+      <size>
+       <width>131</width>
+       <height>20</height>
+      </size>
+     </property>
+    </spacer>
    </item>
-   <item row="1" column="0" colspan="2" >
-    <widget class="KTitleWidget" native="1" name="labelErrorMessage" />
+   <item row="1" column="0" >
+    <widget class="QPushButton" name="buttonAddAvatar" >
+     <property name="text" >
+      <string>Add Avatar...</string>
+     </property>
+    </widget>
    </item>
+   <item row="1" column="1" >
+    <widget class="QPushButton" name="buttonRemoveAvatar" >
+     <property name="text" >
+      <string>Remove Avatar</string>
+     </property>
+    </widget>
+   </item>
   </layout>
  </widget>
- <customwidgets>
-  <customwidget>
-   <class>KTitleWidget</class>
-   <extends>QWidget</extends>
-   <header>ktitlewidget.h</header>
-  </customwidget>
- </customwidgets>
  <resources/>
  <connections/>
 </ui>
Index: libkopete/ui/avatarselectorwidget.cpp
===================================================================
--- libkopete/ui/avatarselectorwidget.cpp	(revisão 736213)
+++ libkopete/ui/avatarselectorwidget.cpp	(cópia de trabalho)
@@ -3,7 +3,8 @@
 /*
     avatarselectorwidget.cpp - Widget to manage and select user avatar
 
-    Copyright (c) 2007      by Michaël Larouche      <[EMAIL PROTECTED]>
+    Copyright (c) 2007      by Michaël Larouche       <[EMAIL PROTECTED]>
+    Copyright (c) 2007         Gustavo Pichorim Boiko <[EMAIL PROTECTED]>
 
     Kopete    (c) 2002-2007 by the Kopete developers <[email protected]>
 
@@ -19,9 +20,10 @@
 #include "avatarselectorwidget.h"
 
 // Qt includes
-#include <QtGui/QListWidget>
-#include <QtGui/QListWidgetItem>
-#include <QtGui/QIcon>
+#include <QListWidget>
+#include <QListWidgetItem>
+#include <QIcon>
+#include <QPainter>
 
 // KDE includes
 #include <kdebug.h>
@@ -47,8 +49,32 @@
 	void setAvatarEntry(Kopete::AvatarManager::AvatarEntry entry)
 	{
 		m_entry = entry;
-		setText( entry.name );
-		setIcon( QIcon(entry.path) );
+		
+		QSize s(96,96);
+
+		if (listWidget())
+		    s = listWidget()->iconSize();
+
+		QPixmap pix;
+		if (entry.path.isEmpty())
+		{
+			// draw a fake image telling there is no avatar
+			pix = QPixmap(s);
+			QPainter p(&pix);
+			p.fillRect(pix.rect(), Qt::white);
+			p.drawText(pix.rect(), Qt::TextWordWrap | Qt::AlignCenter, i18n("No Avatar"));
+		}
+		else
+		{
+			pix = QPixmap(entry.path).scaled(s);
+		}
+
+		// draw a border around the avatar
+		QPainter p(&pix);
+		p.setBrush(Qt::NoBrush);
+		p.drawRect(0,0,pix.width()-1,pix.height()-1);
+
+		setIcon(pix);
 	}
 
 	Kopete::AvatarManager::AvatarEntry avatarEntry() const
@@ -78,36 +104,34 @@
  : QWidget(parent), d(new Private)
 {
 	d->mainWidget.setupUi(this);
-	d->mainWidget.labelErrorMessage->setPixmap(KTitleWidget::ErrorMessage);
-	d->mainWidget.labelErrorMessage->setHidden(true);
 
+	// use icons on buttons
+	d->mainWidget.buttonAddAvatar->setIcon( KIcon("edit-add") );
+	d->mainWidget.buttonRemoveAvatar->setIcon( KIcon("edit-delete") );
+
 	// Connect signals/slots
 	connect(d->mainWidget.buttonAddAvatar, SIGNAL(clicked()), this, SLOT(buttonAddAvatarClicked()));
 	connect(d->mainWidget.buttonRemoveAvatar, SIGNAL(clicked()), this, SLOT(buttonRemoveAvatarClicked()));
-	connect(d->mainWidget.tabAvatar, SIGNAL(currentChanged(int)), this, SLOT(currentTabChanged(int)));
-	connect(d->mainWidget.listUserAvatar, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(listSelectionChanged(QListWidgetItem*)));
-	connect(d->mainWidget.listUserContact, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(listSelectionChanged(QListWidgetItem*)));
+	connect(d->mainWidget.listUserAvatar, SIGNAL(itemClicked(QListWidgetItem*)),
+	        this, SLOT(listSelectionChanged(QListWidgetItem*)));
+	connect(Kopete::AvatarManager::self(), SIGNAL(avatarAdded(Kopete::AvatarManager::AvatarEntry)),
+	        this, SLOT(avatarAdded(Kopete::AvatarManager::AvatarEntry)));
+	connect(Kopete::AvatarManager::self(), SIGNAL(avatarRemoved(Kopete::AvatarManager::AvatarEntry)),
+	        this, SLOT(avatarRemoved(Kopete::AvatarManager::AvatarEntry)));
 
-	connect(Kopete::AvatarManager::self(), SIGNAL(avatarAdded(Kopete::AvatarManager::AvatarEntry)), this, SLOT(avatarAdded(Kopete::AvatarManager::AvatarEntry)));
-	connect(Kopete::AvatarManager::self(), SIGNAL(avatarRemoved(Kopete::AvatarManager::AvatarEntry)), this, SLOT(avatarRemoved(Kopete::AvatarManager::AvatarEntry)));
-
-
-	// Add a No Avatar option
+	// Add a "No Avatar" option
 	Kopete::AvatarManager::AvatarEntry empty;
 	empty.name = i18n("No Avatar");
 	empty.contact = 0;
 	empty.category = Kopete::AvatarManager::User;
 	d->addItem(empty);
 
-	// List avatars in lists
+	// List avatars of User category
 	Kopete::AvatarQueryJob *queryJob = new Kopete::AvatarQueryJob(this);
 	connect(queryJob, SIGNAL(result(KJob*)), this, SLOT(queryJobFinished(KJob*)));
-	queryJob->setQueryFilter( Kopete::AvatarManager::All );
+	queryJob->setQueryFilter( Kopete::AvatarManager::User );
 
 	queryJob->start();
-
-	// select the User tab by default
-	d->mainWidget.tabAvatar->setCurrentWidget( d->mainWidget.tabUser );
 }
 
 AvatarSelectorWidget::~AvatarSelectorWidget()
@@ -156,10 +180,7 @@
 	{
 		// TODO: Download image
 		if( !imageUrl.isLocalFile() )
-		{
-			d->mainWidget.labelErrorMessage->setText( i18n("You can only add avatar from local file.") );
 			return;
-		}
 
 		// Crop the image
 		QImage avatar = KPixmapRegionSelectorDialog::getSelectedImage( QPixmap(imageUrl.path()), 96, 96, this );
@@ -175,7 +196,8 @@
 		Kopete::AvatarManager::AvatarEntry addedEntry = Kopete::AvatarManager::self()->add( newEntry );
 		if( addedEntry.path.isEmpty() )
 		{
-			d->mainWidget.labelErrorMessage->setText( i18n("Kopete cannot add this new avatar because it could not save the avatar image in user directory.") );
+			//TODO add a real error message
+			//d->mainWidget.labelErrorMessage->setText( i18n("Kopete cannot add this new avatar because it could not save the avatar image in user directory.") );
 			return;
 		}
 
@@ -186,11 +208,7 @@
 			AvatarSelectorWidgetItem *item = dynamic_cast<AvatarSelectorWidgetItem*>( foundItems.first() );
 			if ( !item )
 				return;
-
 			item->setSelected( true );	
-			// show the User tab
-			d->mainWidget.tabAvatar->setCurrentWidget(d->mainWidget.tabUser);	
-			listSelectionChanged( item );
 		}
 
 
@@ -209,7 +227,6 @@
 	{
 		if( !Kopete::AvatarManager::self()->remove( selectedItem->avatarEntry() ) )
 		{
-			d->mainWidget.labelErrorMessage->setText( i18n("Kopete cannot remove selected avatar.") );
 			kDebug(14010) << "Removing of avatar failed for unknown reason.";
 		}
 	}
@@ -229,7 +246,8 @@
 	}
 	else
 	{
-		d->mainWidget.labelErrorMessage->setText( queryJob->errorText() );
+		//TODO add a real error message
+		//d->mainWidget.labelErrorMessage->setText( queryJob->errorText() );
 	}
 }
 
@@ -264,60 +282,18 @@
 
 void AvatarSelectorWidget::listSelectionChanged(QListWidgetItem *item)
 {
-	if( item )
-	{
-		d->mainWidget.labelAvatarImage->setPixmap( item->icon().pixmap(96, 96) );
-		d->selectedItem = item;
-	}
-	else
-	{
-		d->selectedItem = 0;
-	}
-
-	// I know sender() is evil
-	// Disable Remove Avatar button when selecting an item in listUserContact.
-	// I don't know anyone who will want to remove avatar received from contacts.
-	if( sender() == d->mainWidget.listUserContact )
-	{
-		d->mainWidget.buttonRemoveAvatar->setEnabled(false);
-	}
-	else
-	{
-		d->mainWidget.buttonRemoveAvatar->setEnabled(true);
-	}
+	d->selectedItem = item;
 }
 
-void AvatarSelectorWidget::currentTabChanged(int index)
-{
-	
-	// only enable the Remove button when the User tab is selected	
-	if (index == d->mainWidget.tabAvatar->indexOf(d->mainWidget.tabUser)) 
-		d->mainWidget.buttonRemoveAvatar->setEnabled(true);
-	else
-		d->mainWidget.buttonRemoveAvatar->setEnabled(false);
-	
-}
-
-
 void AvatarSelectorWidget::Private::addItem(Kopete::AvatarManager::AvatarEntry entry)
 {
 	kDebug(14010) << "Entry(" << entry.name << "): " << entry.category;
 
-	QListWidget *listWidget  = 0;
-	if( entry.category & Kopete::AvatarManager::User )
-	{
-		listWidget = mainWidget.listUserAvatar;
-	}
-	else if( entry.category & Kopete::AvatarManager::Contact )
-	{
-		listWidget = mainWidget.listUserContact;
-	}
-	else
-	{
-		return;
-	}
+	// only use User avatars
+	if( !(entry.category & Kopete::AvatarManager::User) )
+	    return;
 
-	AvatarSelectorWidgetItem *item = new AvatarSelectorWidgetItem(listWidget);
+	AvatarSelectorWidgetItem *item = new AvatarSelectorWidgetItem(mainWidget.listUserAvatar);
 	item->setAvatarEntry(entry);
 	if (entry.path == currentAvatar)
 		item->setSelected(true);
Index: libkopete/ui/avatarselectorwidget.h
===================================================================
--- libkopete/ui/avatarselectorwidget.h	(revisão 736213)
+++ libkopete/ui/avatarselectorwidget.h	(cópia de trabalho)
@@ -2,6 +2,7 @@
     avatarselectorwidget.h - Widget to manage and select user avatar
 
     Copyright (c) 2007      by Michaël Larouche      <[EMAIL PROTECTED]>
+                  2007         Gustavo Pichorim Boiko <[EMAIL PROTECTED]>
 
     Kopete    (c) 2002-2007 by the Kopete developers <[email protected]>
 
@@ -70,12 +71,7 @@
 	 * This is used to select the avatar in the avatar list
 	 */
 	void setCurrentAvatar(const QString &path);
-Q_SIGNALS:
-	/**
-	 * User has selected another avatar in the list.
-	 */
-	void avatarChanged();
-	
+
 private Q_SLOTS:
 	/**
 	 * @internal
@@ -116,13 +112,6 @@
 	 */
 	void listSelectionChanged(QListWidgetItem *item);
 
-	/**
-	 * @internal
-	 * The current tab has changed
-	 * @param index the index of the selected tab
-	 */
-	void currentTabChanged(int index);
-
 private:
 	Q_DISABLE_COPY(AvatarSelectorWidget)
 
_______________________________________________
kopete-devel mailing list
[email protected]
https://mail.kde.org/mailman/listinfo/kopete-devel

Reply via email to