File: queuemodel.cpp

package info (click to toggle)
dc-qt 0.2.0.alpha-1
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 1,936 kB
  • ctags: 5,361
  • sloc: cpp: 28,936; makefile: 19
file content (125 lines) | stat: -rw-r--r-- 3,230 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
//
// C++ Implementation: QueueModel
//
// Description: 
//
//
// Author: Rikard Björklind <olof@linux.nu>, (C) 2005
//
// Copyright: See COPYING file that comes with this distribution
//
//
#include "queuemodel.h"
#include <QtCore>
#include "log.h"
#include "user.h"
#include "util.h"

QVariant QueueModel::data ( const QModelIndex & index, int role ) const
{
	User *u;
	if(!index.isValid()) return QVariant();
    if(index.row() < 0 || index.row() >= itemList.size()) return QVariant();
    if(index.column() < 0 || index.column()>6) return QVariant();
    if(role == Qt::DisplayRole) {
        int i = index.row();
        switch(index.column()) {

            case 0:
				return itemList[i]->status ? tr("RUN") : tr("WAIT");
            case 1:
                return itemList[i]->target;
            case 2:
				return Util::bytesToStr(itemList[i]->size);
            case 3:
                return itemList[i]->downloadedBytes;
            case 4:
				if(itemList[i]->currentSource==-1) return QVariant();
				//u = sessionCfg->findUser(itemList[i]->currentSource);
				u = userModel->getUser( itemList[i]->currentSource);
				if(u) return u->nick;
                return itemList[i]->currentSource;
            case 5:
                return itemList[i]->priority;
        }
    }
    return QVariant();
}

QVariant QueueModel::headerData ( int section, Qt::Orientation orientation, int role ) const
{
    if (role != Qt::DisplayRole)
        return QVariant();

    if(orientation==Qt::Horizontal) {
		
		if(section==0) return tr("Status");
		if(section==1) return tr("Target");
		if(section==2) return tr("Size");
		if(section==3) return tr("Downloaded");
		if(section==4) return tr("Current Source");
		if(section==5) return tr("Priority");

    }
    return QVariant();
}

void QueueModel::onItemAdded( const QueueItem& item)
{
	logger->debug("onItemAdded: %d",item.id);
    items[item.id] = item;
    itemList.append( &items[item.id] );
	emit layoutChanged();
}

void QueueModel::onItemsAdded( const QList< QueueItem > &ql )
{
	for(int i = 0;i < ql.size(); i++ )
	{
		items[ql[i].id] = ql[i];
		itemList.append( &items[ql[i].id] );
	}
	emit layoutChanged();
}

void QueueModel::onItemRemoved( int id )
{
	logger->debug("onItemRemoved: %d",id);
    itemList.removeAll(&items[id]);   
    items.remove(id);
	emit layoutChanged();
}

void QueueModel::onFinished( int id)
{
	logger->debug("queueFinished: %d",id);
    // hmm skip this for now...
}

void QueueModel::onSourcesUpdated( int id, QList<int> sources)
{
	logger->debug("sourcesUpdated: %d",id );
    items[id].sources = sources;
	if(sources.size()==0) {
		items[id].currentSource=-1;
		items[id].status=0;
	}
	emit layoutChanged();
}

void QueueModel::onStatusUpdated(int id,int status,int currentSource,int priority)
{
	logger->debug("statusUpdated: %id",id);
    items[id].status = status;
	items[id].currentSource = currentSource;
	items[id].priority = priority;
	int index = itemList.indexOf(&items[id],0);
	emit dataChanged(createIndex(index,4),createIndex(index,4));
}

QueueItem * QueueModel::getItem( int row ) const throw( IndexOutOfBoundsException )
{
	if(row < 0 || row>= itemList.size()) throw IndexOutOfBoundsException();
	return itemList[row];
}