summaryrefslogtreecommitdiffstats
path: root/kopete/kopete/contactlist/kopetecontactlistview.h
diff options
context:
space:
mode:
Diffstat (limited to 'kopete/kopete/contactlist/kopetecontactlistview.h')
-rw-r--r--kopete/kopete/contactlist/kopetecontactlistview.h252
1 files changed, 252 insertions, 0 deletions
diff --git a/kopete/kopete/contactlist/kopetecontactlistview.h b/kopete/kopete/contactlist/kopetecontactlistview.h
new file mode 100644
index 00000000..43c60ebe
--- /dev/null
+++ b/kopete/kopete/contactlist/kopetecontactlistview.h
@@ -0,0 +1,252 @@
+/*
+ kopetecontactlistview.h
+
+ Kopete Contactlist GUI
+
+ Copyright (c) 2001-2002 by Duncan Mac-Vicar Prett <duncan@kde.org>
+ Copyright (c) 2002 by Nick Betcher <nbetcher@usinternet.com>
+ Copyright (c) 2002 by Stefan Gehn <metz AT gehn.net>
+ Copyright (c) 2002-2005 by Olivier Goffart <ogoffart @ kde.org>
+ Copyright (c) 2004 by Richard Smith <kde@metafoo.co.uk>
+
+ Kopete (c) 2002-2003 by the Kopete developers <kopete-devel@kde.org>
+
+ *************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ *************************************************************************
+*/
+
+#ifndef KOPETE_CONTACTLISTVIEW_H
+#define KOPETE_CONTACTLISTVIEW_H
+
+#include "kopetelistview.h"
+#include "kopetemetacontact.h"
+
+#include <qpixmap.h>
+#include <qptrlist.h>
+#include <qstringlist.h>
+#include <qrect.h>
+#include <qtimer.h>
+#include <qguardedptr.h>
+
+class KopeteMetaContactLVI;
+class KopeteGroupViewItem;
+class KopeteStatusGroupViewItem;
+class KRootPixmap;
+class KActionCollection;
+class KAction;
+class KListAction;
+class KActionMenu;
+
+class KopeteContactListViewPrivate;
+
+namespace Kopete
+{
+class Contact;
+class MetaContact;
+class Group;
+class MessageEvent;
+}
+
+/**
+ * @author Duncan Mac-Vicar P. <duncan@kde.org>
+ */
+class KopeteContactListView : public Kopete::UI::ListView::ListView
+{
+ Q_OBJECT
+
+public:
+ KopeteContactListView( QWidget *parent = 0, const char *name = 0 );
+ ~KopeteContactListView();
+
+ /**
+ * Init MetaContact related actions
+ */
+ void initActions(KActionCollection*);
+
+ /**
+ * Add a given group name and return it
+ */
+ void addGroup( const QString &groupName );
+
+ /**
+ * Are we displaying as a tree view (true), or in a flat list (false)?
+ * @todo make this an enum
+ */
+ bool showAsTree() { return mShowAsTree; }
+
+public slots:
+ /**
+ * Remove all KopeteMetaContactLVI of a metaContact
+ */
+ void removeContact( Kopete::MetaContact *contact );
+
+ /**
+ * Prompt the user for the group name (slot)
+ */
+ void addGroup();
+
+protected:
+ virtual void contentsMousePressEvent( QMouseEvent *e );
+
+ virtual bool acceptDrag(QDropEvent *e) const;
+
+ /**
+ * Start a drag operation
+ * @return a KMultipleDrag containing: 1) A QStoredDrag of type "application/x-qlistviewitem", 2) If the MC is associated with a KABC entry, i) a QTextDrag containing their email address, and ii) their vCard representation.
+ */
+ virtual QDragObject *dragObject();
+
+ /**
+ * Since KDE 3.1.1 , the original find Drop return 0L for afterme if the group is open.
+ * This woraround allow us to keep the highlight of the item, and give always a correct position
+ */
+ virtual void findDrop(const QPoint &pos, QListViewItem *&parent, QListViewItem *&after);
+
+ /**
+ * The selected items have changed; update our actions to show what's possible.
+ */
+ void updateActionsForSelection( QPtrList<Kopete::MetaContact> contacts, QPtrList<Kopete::Group> groups );
+
+private slots:
+ /**
+ * When an account is added, so we add it to the menu action
+ */
+ void slotAddSubContactActionNewAccount(Kopete::Account*);
+ /**
+ * When an account is destroyed, the child add subcontact action is deleted
+ * so we remove it from the menu action
+ */
+ void slotAddSubContactActionAccountDeleted(const Kopete::Account *);
+
+ void slotViewSelectionChanged();
+ void slotListSelectionChanged();
+ void slotContextMenu(KListView*,QListViewItem *item, const QPoint &point );
+ void slotExpanded( QListViewItem *item );
+ void slotCollapsed( QListViewItem *item );
+
+ void slotSettingsChanged( void );
+ void slotUpdateAllGroupIcons();
+ void slotExecuted( QListViewItem *item, const QPoint &pos, int c );
+
+ void slotAddedToGroup( Kopete::MetaContact *mc, Kopete::Group *to );
+ void slotRemovedFromGroup( Kopete::MetaContact *mc, Kopete::Group *from );
+ void slotMovedToGroup( Kopete::MetaContact *mc, Kopete::Group *from, Kopete::Group *to );
+
+ /**
+ * A meta contact was added to the contact list - update the view
+ */
+ void slotMetaContactAdded( Kopete::MetaContact *mc );
+ void slotMetaContactDeleted( Kopete::MetaContact *mc );
+ void slotMetaContactSelected( bool sel );
+
+ void slotGroupAdded(Kopete::Group *);
+
+ void slotContactStatusChanged( Kopete::MetaContact *mc );
+
+ void slotDropped(QDropEvent *e, QListViewItem *parent, QListViewItem*);
+
+ void slotShowAddContactDialog();
+ void slotNewMessageEvent(Kopete::MessageEvent *);
+
+ /**
+ * Handle renamed items by renaming the meta contact
+ */
+ void slotItemRenamed( QListViewItem *item );
+
+ /** Actions related slots **/
+ void slotSendMessage();
+ void slotStartChat();
+ void slotSendFile();
+ void slotSendEmail();
+ void slotMoveToGroup();
+ void slotCopyToGroup();
+ void slotRemove();
+ void slotRename();
+ void slotAddContact();
+ void slotAddTemporaryContact();
+ void slotProperties();
+ void slotUndo();
+ void slotRedo();
+
+ void slotTimeout();
+
+private:
+ bool mShowAsTree;
+
+ // TODO: do we really need to store these?
+ QPtrList<KopeteMetaContactLVI> m_selectedContacts;
+ QPtrList<KopeteGroupViewItem> m_selectedGroups;
+
+ bool mSortByGroup;
+ KRootPixmap *root;
+
+ QRect m_onItem;
+
+ QPoint m_startDragPos;
+
+ /* ACTIONS */
+ KAction *actionSendMessage;
+ KAction *actionStartChat;
+ KAction *actionSendFile;
+ KAction *actionSendEmail;
+ KListAction *actionMove;
+ KListAction *actionCopy;
+ KAction *actionRename;
+ KAction *actionRemove;
+ KAction *actionAddTemporaryContact;
+ KAction *actionProperties;
+ KAction *actionUndo;
+ KAction *actionRedo;
+
+ KopeteContactListViewPrivate *d;
+
+ void moveDraggedContactToGroup( Kopete::MetaContact *contact, Kopete::Group *from, Kopete::Group *to );
+ void addDraggedContactToGroup( Kopete::MetaContact *contact, Kopete::Group *group );
+ void addDraggedContactToMetaContact( Kopete::Contact *contact, Kopete::MetaContact *parent );
+ void addDraggedContactByInfo( const QString &protocolId, const QString &accountId,
+ const QString &contactId, QListViewItem *after );
+
+public:
+ struct UndoItem;
+ UndoItem *m_undo;
+ UndoItem *m_redo;
+ void insertUndoItem(UndoItem *u);
+ QTimer undoTimer;
+
+public:
+ // This is public so the chatwinodw can handle sub actions
+ // FIXME: do we not believe in accessor functions any more?
+ KActionMenu *actionAddContact;
+ QMap<const Kopete::Account *, KAction *> m_accountAddContactMap;
+};
+
+struct KopeteContactListView::UndoItem
+{
+ enum Type { MetaContactAdd, MetaContactRemove , MetaContactCopy , MetaContactRename, MetaContactChange, ContactAdd, GroupRename } type;
+ QStringList args;
+ QGuardedPtr<Kopete::MetaContact> metacontact;
+ QGuardedPtr<Kopete::Group> group;
+ UndoItem *next;
+ bool isStep;
+ Kopete::MetaContact::PropertySource nameSource;
+
+ UndoItem() : isStep(true) {}
+ UndoItem(Type t, Kopete::MetaContact *m=0L ,Kopete::Group *g=0L)
+ {
+ isStep=true;
+ type=t;
+ metacontact=m;
+ group=g;
+ next=0L;
+ }
+};
+
+
+#endif
+// vim: set noet ts=4 sts=4 sw=4: