Changeset 714

Show
Ignore:
Timestamp:
07/10/08 10:33:29 (4 months ago)
Author:
sylvain
Message:

Started to add group model support as well as drag/drop between groups and contacts

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • oss/jlib/designer/ui/contacts.ui

    r709 r714  
    2222    </rect> 
    2323   </property> 
     24   <property name="dragEnabled" > 
     25    <bool>true</bool> 
     26   </property> 
     27   <property name="dragDropMode" > 
     28    <enum>QAbstractItemView::InternalMove</enum> 
     29   </property> 
     30   <property name="alternatingRowColors" > 
     31    <bool>true</bool> 
     32   </property> 
    2433  </widget> 
    2534 </widget> 
  • oss/jlib/jlib/core/contact.py

    r713 r714  
    2929                               self.addContact)   
    3030        QtCore.QObject.connect(self, QtCore.SIGNAL("addContact(PyQt_PyObject, PyQt_PyObject)"), 
    31                                self.addContactWithGroups)  
     31                               self.addContactWithGroups) 
     32        QtCore.QObject.connect(self, QtCore.SIGNAL("changeGroup(PyQt_PyObject, PyQt_PyObject)"), 
     33                               self.addContactWithGroups) 
    3234 
    3335    def setComponent(self, component): 
     
    172174    def type(self): 
    173175        return QtGui.QStandardItem.UserType + 102 
     176     
     177    def flags(self): 
     178        return  QtCore.Qt.ItemIsDropEnabled | QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled 
    174179 
    175180class jlibContactModel(QtGui.QStandardItemModel): 
     
    178183        self.contact_items = {} 
    179184        self.group_items = {} 
     185 
     186    def flags(self, index): 
     187        if index.isValid(): 
     188            item = self.itemFromIndex(index) 
     189            if item and item.type() == QtGui.QStandardItem.UserType + 102: 
     190                return item.flags() 
     191 
     192        return QtGui.QStandardItemModel.flags(self, index) 
     193 
     194    def mimeData(self, indexes): 
     195        mimeData = QtCore.QMimeData() 
     196        urls = [] 
     197        for index in indexes: 
     198             if index.isValid(): 
     199                 contact = self.getContact(index) 
     200                 urls.append(QtCore.QUrl('xmpp:%s' % str(contact.jid))) 
     201              
     202        mimeData.setUrls(urls) 
     203        return mimeData 
    180204 
    181205    def setRoster(self, roster): 
     
    189213        return self.itemFromIndex(index).type() == QtGui.QStandardItem.UserType + 101 
    190214 
     215    def isAGroupItem(self, index): 
     216        return self.itemFromIndex(index).type() == QtGui.QStandardItem.UserType + 102 
     217     
    191218    def getContact(self, index): 
    192219        return self.itemFromIndex(index).contact 
     220 
     221    def getContactByJID(self, contact_jid): 
     222        contact_jid = str(contact_jid) 
     223        if contact_jid in self.contact_items: 
     224            return self.contact_items[contact_jid].contact 
     225 
     226    def getContactItem(self, index): 
     227        return self.itemFromIndex(index) 
    193228 
    194229    def hasContact(self, contact_jid): 
     
    201236        return QtCore.QModelIndex() 
    202237 
     238    def getGroup(self, index): 
     239        return self.itemFromIndex(index).group 
     240 
    203241    def getGroupIndex(self, group): 
    204242        if group in self.group_items: 
     
    207245        return QtCore.QModelIndex() 
    208246 
    209     def getGroup(self, group): 
     247    def getGroupItem(self, group): 
    210248        if group in self.group_items: 
    211249            return self.group_items[group] 
     
    229267        if contact.groups: 
    230268            for group in contact.groups: 
    231                 groupItem = self.getGroup(group) 
     269                groupItem = self.getGroupItem(group) 
    232270                groupItem.appendRow(item) 
    233271        else: 
  • oss/jlib/jlib/gui/contact.py

    r713 r714  
    66    jlibContactModel, jlibPresence, jlibPresenceComponent 
    77from jlib.gui.subscriptiondialog import jlibSubscriptionDialog 
     8from jlib.gui.groupdialog import jlibNewGroupDialog 
    89 
    910__all__ = ['jlibContactWidget'] 
     
    1819 
    1920        self.contacts.contextMenuEvent = self.contextMenuEvent 
     21        self.contacts.dragEnterEvent = self.dragEnterEvent 
    2022 
    2123        self.contact = jlibContact(parent=self) 
     
    9799            self.presence.emit(QtCore.SIGNAL("requestSubscription(PyQt_PyObject)"), contact_jid) 
    98100 
     101    def createNewGroup(self): 
     102        ui = jlibNewGroupDialog() 
     103        ui.show() 
     104        if ui.exec_() == QtGui.QDialog.Accepted: 
     105            model = self.contacts.model() 
     106            model.setGroup(str(ui.group.text())) 
     107 
    99108    def contextMenuEvent(self, event): 
    100109        menu = QtGui.QMenu(self.parent()) 
     
    104113        menu.addAction(actionUnsub) 
    105114 
    106         actionSub = QtGui.QAction(QtCore.QString("Subscribe to contact..."), self.parent()) 
     115        actionSub = QtGui.QAction(QtCore.QString("Subscribe to contact"), self.parent()) 
    107116        QtCore.QObject.connect(actionSub, QtCore.SIGNAL("triggered()"), self.subscribeToContact) 
    108117        menu.addAction(actionSub) 
    109118 
     119        actionNewGroup = QtGui.QAction(QtCore.QString("Add a new group"), self.parent()) 
     120        QtCore.QObject.connect(actionNewGroup, QtCore.SIGNAL("triggered()"), self.createNewGroup) 
     121        menu.addAction(actionNewGroup) 
     122 
    110123        menu.exec_(event.globalPos()) 
    111124 
     125    def dragEnterEvent(self, event): 
     126        data = event.mimeData() 
     127        if not data.hasFormat('text/uri-list'): 
     128            event.ignore() 
     129            return 
     130         
     131        model = self.contacts.model() 
     132        index = self.contacts.indexAt(event.pos()) 
     133        parentIndex = index.parent() 
     134        if parentIndex.isValid() and model.isAGroupItem(parentIndex): 
     135            group = model.getGroup(parentIndex) 
     136            contact = model.getContact(index) 
     137            if group in contact.groups: 
     138                contact.groups.remove(group) 
     139 
     140        event.accept() 
     141 
     142    def dropEvent(self, event): 
     143        model = self.contacts.model() 
     144         
     145        index = self.contacts.indexAt(event.pos()) 
     146        parentIndex = index.parent() 
     147        group = model.getGroup(parentIndex) 
     148         
     149        urls = event.data().urls() 
     150        for url in urls: 
     151            xmppUrl = str(url.toString()) 
     152            jid = xmppUrl[5:] 
     153            contact = model.getContactByJID(jid) 
     154            contact.groups.append(group) 
     155 
     156        print contact.groups 
     157             
     158             
     159 
  • oss/jlib/jlib/gui/contactui.py

    r709 r714  
    11# -*- coding: utf-8 -*- 
    22 
    3 # Form implementation generated from reading ui file 'designer/ui/contacts.ui' 
     3# Form implementation generated from reading ui file 'contacts.ui' 
    44# 
    5 # Created: Sun Jul  6 12:03:40 2008 
    6 #      by: PyQt4 UI code generator 4.3.3 
     5# Created: Thu Jul 10 17:31:17 2008 
     6#      by: PyQt4 UI code generator 4.4.2 
    77# 
    88# WARNING! All changes made in this file will be lost! 
     
    1313    def setupUi(self, jlibContacts): 
    1414        jlibContacts.setObjectName("jlibContacts") 
    15         jlibContacts.resize(QtCore.QSize(QtCore.QRect(0,0,324,416).size()).expandedTo(jlibContacts.minimumSizeHint())) 
    16  
     15        jlibContacts.resize(324,416) 
    1716        self.contacts = QtGui.QTreeView(jlibContacts) 
    1817        self.contacts.setGeometry(QtCore.QRect(4,4,316,408)) 
     18        self.contacts.setDragEnabled(True) 
     19        self.contacts.setDragDropMode(QtGui.QAbstractItemView.InternalMove) 
     20        self.contacts.setAlternatingRowColors(True) 
    1921        self.contacts.setObjectName("contacts") 
    2022 
  • oss/jlib/jlib/gui/subscriptiondialog.py

    r712 r714  
    44from jlib.gui.subscriptiondialogui import Ui_jlibsubscriptiondialog 
    55 
     6__all__ = ['jlibSubscriptionDialog'] 
     7 
    68class jlibSubscriptionDialog(QtGui.QDialog, Ui_jlibsubscriptiondialog): 
    79    def __init__(self, parent=None): 
    810        QtGui.QDialog.__init__(self, parent) 
    9         self.setupUi(parent=self) 
    10  
    11     def setupUi(self, parent=None): 
    12         Ui_jlibsubscriptiondialog.setupUi(self, parent) 
     11        self.setupUi(self)