add new/old age indicator for shared files

git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@1725 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
alexandrut 2009-10-13 20:36:29 +00:00
parent d9d77c0cef
commit c7c9163c2c
5 changed files with 144 additions and 17 deletions

View File

@ -1,4 +1,4 @@
/**************************************************************** /*************************************:***************************
* RetroShare is distributed under the following license: * RetroShare is distributed under the following license:
* *
* Copyright (C) 2006 - 2009 RetroShare Team * Copyright (C) 2006 - 2009 RetroShare Team
@ -15,7 +15,7 @@
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, * Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA. * Boston, MA 02110-1301, USA.
****************************************************************/ ****************************************************************/
@ -39,11 +39,11 @@
RemoteDirModel::RemoteDirModel(bool mode, QObject *parent) RemoteDirModel::RemoteDirModel(bool mode, QObject *parent)
: QAbstractItemModel(parent), : QAbstractItemModel(parent),
RemoteMode(mode), nIndex(1), indexSet(1) /* ass zero index cant be used */ RemoteMode(mode), nIndex(1), indexSet(1) /* ass zero index cant be used */,
ageIndicator(0)
{ {
setSupportedDragActions(Qt::CopyAction); setSupportedDragActions(Qt::CopyAction);
treeStyle(); treeStyle();
} }
void RemoteDirModel::treeStyle() void RemoteDirModel::treeStyle()
@ -156,7 +156,7 @@ void RemoteDirModel::treeStyle()
int RemoteDirModel::columnCount(const QModelIndex &parent) const int RemoteDirModel::columnCount(const QModelIndex &parent) const
{ {
return 4; return 5;
} }
QString RemoteDirModel::getFlagsString(uint32_t flags) QString RemoteDirModel::getFlagsString(uint32_t flags)
{ {
@ -170,6 +170,35 @@ QString RemoteDirModel::getFlagsString(uint32_t flags)
} }
} }
QString RemoteDirModel::getAgeIndicatorString(const DirDetails &details) const
{
QString ret("");
QString nind("NEW");
QString oind("OLD");
uint32_t age = details.age;
switch (ageIndicator) {
case IND_LAST_DAY:
if (age < 24 * 60 * 60) return nind;
break;
case IND_LAST_WEEK:
if (age < 7 * 24 * 60 * 60) return nind;
break;
case IND_LAST_MONTH:
if (age < 30 * 24 * 60 * 60) return nind;
break;
case IND_OLDER:
if (age >= 30 * 24 * 60 * 60) return oind;
break;
case IND_DEFAULT:
return ret;
default:
return ret;
}
return ret;
}
QVariant RemoteDirModel::data(const QModelIndex &index, int role) const QVariant RemoteDirModel::data(const QModelIndex &index, int role) const
{ {
#ifdef RDM_DEBUG #ifdef RDM_DEBUG
@ -192,7 +221,7 @@ QString RemoteDirModel::getFlagsString(uint32_t flags)
else else
flags |= DIR_FLAGS_LOCAL; flags |= DIR_FLAGS_LOCAL;
if (!rsFiles->RequestDirDetails(ref, details, flags)) if (!rsFiles->RequestDirDetails(ref, details, flags))
{ {
return QVariant(); return QVariant();
@ -456,6 +485,14 @@ QString RemoteDirModel::getFlagsString(uint32_t flags)
return misc::userFriendlyDuration(details.age); return misc::userFriendlyDuration(details.age);
} }
break; break;
case 4:
{
QString ind("");
if (ageIndicator != IND_DEFAULT)
ind = getAgeIndicatorString(details);
return ind;
}
break;
default: default:
return QString(tr("FILE")); return QString(tr("FILE"));
break; break;
@ -479,10 +516,24 @@ QString RemoteDirModel::getFlagsString(uint32_t flags)
case 2: case 2:
return getFlagsString(details.flags); return getFlagsString(details.flags);
break; break;
case 3: case 3:
return misc::userFriendlyDuration(details.age); return misc::userFriendlyDuration(details.age);
break; break;
case 4:
{
if (ageIndicator == IND_DEFAULT)
return QString("");
QModelIndex pidx = parent(index);
QModelIndex pidxs = pidx.sibling(pidx.row(), 4);
if (pidxs.isValid() && pidxs.data() != tr(""))
return pidxs.data();
else {
QString ind("");
getAgeIndicatorRec(details, ind);
return ind;
}
}
break;
default: default:
return QString(tr("DIR")); return QString(tr("DIR"));
break; break;
@ -503,7 +554,27 @@ QString RemoteDirModel::getFlagsString(uint32_t flags)
return QVariant(); return QVariant();
} }
void RemoteDirModel::getAgeIndicatorRec(DirDetails &details, QString &ret) const {
if (details.type == DIR_TYPE_FILE) {
ret = getAgeIndicatorString(details);
return;
} else if (details.type == DIR_TYPE_DIR && ret == tr("")) {
std::list<DirStub>::iterator it;
for (it = details.children.begin(); it != details.children.end(); it++) {
void *ref = it->ref;
DirDetails childDetails;
uint32_t flags;
if (RemoteMode)
flags |= DIR_FLAGS_REMOTE;
else
flags |= DIR_FLAGS_LOCAL;
if (rsFiles->RequestDirDetails(ref, childDetails, flags) && ret == tr(""))
getAgeIndicatorRec(childDetails, ret);
}
}
}
QVariant RemoteDirModel::headerData(int section, Qt::Orientation orientation, QVariant RemoteDirModel::headerData(int section, Qt::Orientation orientation,
int role) const int role) const
@ -545,6 +616,9 @@ QString RemoteDirModel::getFlagsString(uint32_t flags)
case 3: case 3:
return QString(tr("Age")); return QString(tr("Age"));
break; break;
case 4:
return QString(tr("What's new"));
break;
} }
return QString("Column %1").arg(section); return QString("Column %1").arg(section);
} }

View File

@ -30,6 +30,12 @@
#include "util/misc.h" #include "util/misc.h"
#include "rsiface/rstypes.h" #include "rsiface/rstypes.h"
#define IND_DEFAULT 0
#define IND_LAST_DAY 1
#define IND_LAST_WEEK 2
#define IND_LAST_MONTH 3
#define IND_OLDER 4
class RemoteDirModel : public QAbstractItemModel class RemoteDirModel : public QAbstractItemModel
{ {
Q_OBJECT Q_OBJECT
@ -76,6 +82,9 @@ public:
void getFilePaths(QModelIndexList list, std::list<std::string> &fullpaths); void getFilePaths(QModelIndexList list, std::list<std::string> &fullpaths);
void changeAgeIndicator(int indicator) { ageIndicator = indicator; }
public slots: public slots:
void collapsed ( const QModelIndex & index ) { update(index); } void collapsed ( const QModelIndex & index ) { update(index); }
@ -92,6 +101,10 @@ virtual QStringList mimeTypes () const;
void treeStyle(); void treeStyle();
void downloadDirectory(const DirDetails & details, int prefixLen); void downloadDirectory(const DirDetails & details, int prefixLen);
static QString getFlagsString(uint32_t) ; static QString getFlagsString(uint32_t) ;
QString getAgeIndicatorString(const DirDetails &) const;
void getAgeIndicatorRec(DirDetails &details, QString &ret) const;
int ageIndicator;
QIcon categoryIcon; QIcon categoryIcon;
QIcon peerIcon; QIcon peerIcon;

View File

@ -95,7 +95,7 @@ SharedFilesDialog::SharedFilesDialog(QWidget *parent)
connect( ui.remoteDirTreeView, SIGNAL( doubleClicked(const QModelIndex&)), this, SLOT( downloadRemoteSelected())); connect( ui.remoteDirTreeView, SIGNAL( doubleClicked(const QModelIndex&)), this, SLOT( downloadRemoteSelected()));
connect( ui.downloadButton, SIGNAL( clicked()), this, SLOT( downloadRemoteSelected())); connect( ui.downloadButton, SIGNAL( clicked()), this, SLOT( downloadRemoteSelected()));
connect(ui.indicatorCBox, SIGNAL(currentIndexChanged(int)), this, SLOT(indicatorChanged(int)));
/* /*
connect( ui.remoteDirTreeView, SIGNAL( itemExpanded( QTreeWidgetItem * ) ), connect( ui.remoteDirTreeView, SIGNAL( itemExpanded( QTreeWidgetItem * ) ),
@ -128,11 +128,13 @@ SharedFilesDialog::SharedFilesDialog(QWidget *parent)
l_header->setResizeMode (1, QHeaderView::Fixed); l_header->setResizeMode (1, QHeaderView::Fixed);
l_header->setResizeMode (2, QHeaderView::Interactive); l_header->setResizeMode (2, QHeaderView::Interactive);
l_header->setResizeMode (3, QHeaderView::Interactive); l_header->setResizeMode (3, QHeaderView::Interactive);
l_header->setResizeMode (4, QHeaderView::Interactive);
l_header->resizeSection ( 0, 490 ); l_header->resizeSection ( 0, 490 );
l_header->resizeSection ( 1, 70 ); l_header->resizeSection ( 1, 70 );
l_header->resizeSection ( 2, 130 ); l_header->resizeSection ( 2, 130 );
l_header->resizeSection ( 3, 100 ); l_header->resizeSection ( 3, 100 );
l_header->resizeSection ( 4, 100 );
/* Set header resize modes and initial section sizes */ /* Set header resize modes and initial section sizes */
QHeaderView * r_header = ui.remoteDirTreeView->header () ; QHeaderView * r_header = ui.remoteDirTreeView->header () ;
@ -143,12 +145,14 @@ SharedFilesDialog::SharedFilesDialog(QWidget *parent)
r_header->setResizeMode (1, QHeaderView::Fixed); r_header->setResizeMode (1, QHeaderView::Fixed);
r_header->setResizeMode (2, QHeaderView::Interactive); r_header->setResizeMode (2, QHeaderView::Interactive);
r_header->setResizeMode (3, QHeaderView::Fixed); r_header->setResizeMode (3, QHeaderView::Fixed);
r_header->setResizeMode (4, QHeaderView::Interactive);
r_header->resizeSection ( 0, 490 ); r_header->resizeSection ( 0, 490 );
r_header->resizeSection ( 1, 70 ); r_header->resizeSection ( 1, 70 );
r_header->resizeSection ( 2, 130 ); r_header->resizeSection ( 2, 130 );
r_header->resizeSection ( 3, 100 ); r_header->resizeSection ( 3, 100 );
r_header->resizeSection ( 4, 100 );
l_header->setHighlightSections(false); l_header->setHighlightSections(false);
r_header->setHighlightSections(false); r_header->setHighlightSections(false);
@ -734,7 +738,7 @@ void SharedFilesDialog::showFrame(bool show)
ui.remoteButton->setChecked(false); ui.remoteButton->setChecked(false);
ui.splittedButton->setChecked(false); ui.splittedButton->setChecked(false);
/* set textcolor for Channel name */ /* set textcolor for Channel name */
QString labelStr("<span style=\"font-size:11pt; font-weight:500;" QString labelStr("<span style=\"font-size:11pt; font-weight:500;"
"color:#000000;\">%1</span>"); "color:#000000;\">%1</span>");
@ -771,7 +775,7 @@ void SharedFilesDialog::showFrameSplitted(bool show)
ui.localButton->setChecked(false); ui.localButton->setChecked(false);
ui.remoteButton->setChecked(false); ui.remoteButton->setChecked(false);
/* set textcolor for Channel name */ /* set textcolor for Channel name */
QString label2Str("<span style=\"font-size:11pt; font-weight:500;" QString label2Str("<span style=\"font-size:11pt; font-weight:500;"
"color:#000000;\">%1</span>"); "color:#000000;\">%1</span>");
@ -779,3 +783,10 @@ void SharedFilesDialog::showFrameSplitted(bool show)
ui.labeltext->setText( label2Str.arg(tr("<strong>Files</strong>"))); ui.labeltext->setText( label2Str.arg(tr("<strong>Files</strong>")));
} }
} }
void SharedFilesDialog::indicatorChanged(int index)
{
model->changeAgeIndicator(index);
localModel->changeAgeIndicator(index);
}

View File

@ -72,8 +72,6 @@ private slots:
void showFrameRemote(bool show); void showFrameRemote(bool show);
void showFrameSplitted(bool show); void showFrameSplitted(bool show);
// void recommendfile(); // void recommendfile();
void playselectedfiles(); void playselectedfiles();
void openfile(); void openfile();
@ -84,6 +82,8 @@ private slots:
void recommendFilesToMsg( std::string rsid ); void recommendFilesToMsg( std::string rsid );
void runCommandForFile(); void runCommandForFile();
void tryToAddNewAssotiation(); void tryToAddNewAssotiation();
void indicatorChanged(int index);
signals: signals:
void playFiles(QStringList files); void playFiles(QStringList files);

View File

@ -578,7 +578,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</spacer> </spacer>
</item> </item>
<item row="0" column="3"> <item row="0" column="4">
<widget class="QPushButton" name="splittedButton"> <widget class="QPushButton" name="splittedButton">
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
@ -607,7 +607,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="4"> <item row="0" column="5">
<widget class="QPushButton" name="remoteButton"> <widget class="QPushButton" name="remoteButton">
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
@ -636,7 +636,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="5"> <item row="0" column="6">
<widget class="QPushButton" name="localButton"> <widget class="QPushButton" name="localButton">
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
@ -665,6 +665,35 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="3">
<widget class="QComboBox" name="indicatorCBox">
<item>
<property name="text">
<string>No indicator</string>
</property>
</item>
<item>
<property name="text">
<string>Last day</string>
</property>
</item>
<item>
<property name="text">
<string>Last week</string>
</property>
</item>
<item>
<property name="text">
<string>Last month</string>
</property>
</item>
<item>
<property name="text">
<string>Older</string>
</property>
</item>
</widget>
</item>
</layout> </layout>
</widget> </widget>
</item> </item>