You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
konversation/konversation/src/serverlistview.cpp

115 lines
2.5 KiB

/*
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.
*/
/*
ServerListView is derived from TDEListView and implements custom
drag'n'drop behavior needed in ServerListDialog.
Copyright (C) 2006 Eike Hein <hein@kde.org>
*/
#include "serverlistview.h"
#include <tqdragobject.h>
#include <kdebug.h>
ServerListView::ServerListView(TQWidget *parent)
: TDEListView(parent)
{
}
ServerListView::~ServerListView()
{
}
TQPtrList<TQListViewItem> ServerListView::selectedServerListItems()
{
TQPtrList<TQListViewItem> selectedItems = TDEListView::selectedItems();
TQPtrList<TQListViewItem> selectedServerListItems;
TQListViewItem* item = selectedItems.first();
while (item)
{
if (item->parent())
{
if (!item->parent()->isSelected())
selectedServerListItems.append(item);
}
else
{
selectedServerListItems.append(item);
}
item = selectedItems.next();
}
return selectedServerListItems;
}
void ServerListView::findDrop(const TQPoint &pos, TQListViewItem *&parent, TQListViewItem *&after)
{
TQPoint p (contentsToViewport(pos));
// Get the position to put it in
TQListViewItem *atpos = itemAt(p);
TQListViewItem *above;
if (!atpos) // put it at the end
above = lastItem();
else
{
// Get the closest item before us ('atpos' or the one above, if any)
if (p.y() - itemRect(atpos).topLeft().y() < (atpos->height()/2))
above = atpos->itemAbove();
else
above = atpos;
}
if (above)
{
if (above->firstChild())
{
after = above;
parent = after->parent();
return;
}
else
{
after = above->parent();
parent = after ? after->parent() : 0L;
return;
}
}
// set as sibling
after = above;
parent = after ? after->parent() : 0L;
}
TQDragObject* ServerListView::dragObject()
{
if (!currentItem())
return 0;
TQPtrList<TQListViewItem> selected = selectedItems();
TQListViewItem* item = selected.first();
while (item)
{
if (!item->dragEnabled())
return 0;
item = selected.next();
}
return new TQStoredDrag("application/x-qlistviewitem", viewport());
}
#include "serverlistview.moc"