*setme = gtk_widget_get_style(w)->text[GTK_STATE_NORMAL];
}
+static double
+get_percent_done( const tr_torrent * tor, const tr_stat * st, bool * seed )
+{
+ double d;
+
+ if( ( st->activity == TR_STATUS_SEED ) && tr_torrentGetSeedRatio( tor, &d ) )
+ {
+ *seed = true;
+ d = MAX( 0.0, st->seedRatioPercentDone );
+ }
+ else
+ {
+ *seed = false;
+ d = MAX( 0.0, st->percentDone );
+ }
+
+ return d;
+}
+
static void
render_compact( TorrentCellRenderer * cell,
GdkDrawable * window,
const char * name;
GdkPixbuf * icon;
GdkColor text_color;
+ bool seed;
struct TorrentCellRendererPrivate * p = cell->priv;
const tr_torrent * tor = p->tor;
const tr_stat * st = tr_torrentStatCached( (tr_torrent*)tor );
const gboolean active = st->activity != TR_STATUS_STOPPED;
- const double percentDone = MAX( 0.0, st->percentDone );
+ const double percentDone = get_percent_done( tor, st, &seed );
const gboolean sensitive = active || st->error;
GString * gstr_stat = p->gstr1;
g_object_set( p->icon_renderer, "pixbuf", icon, "sensitive", sensitive, NULL );
gtk_cell_renderer_render( p->icon_renderer, window, widget, &icon_area, &icon_area, &icon_area, flags );
- g_object_set( p->progress_renderer, "value", (int)(percentDone*100.0), "text", NULL, "sensitive", sensitive, NULL );
+ g_object_set( p->progress_renderer, "value", (int)(percentDone*100.0), "text", NULL, "sensitive", sensitive,
+#if GTK_CHECK_VERSION( 3,0,0 )
+ "inverted", seed,
+#elif GTK_CHECK_VERSION( 2,6,0 )
+ "orientation", (seed ? GTK_PROGRESS_RIGHT_TO_LEFT : GTK_PROGRESS_LEFT_TO_RIGHT),
+#endif
+ NULL );
gtk_cell_renderer_render( p->progress_renderer, window, widget, &prog_area, &prog_area, &prog_area, flags );
g_object_set( p->text_renderer, "text", gstr_stat->str, "scale", SMALL_SCALE, "ellipsize", PANGO_ELLIPSIZE_END, "foreground-gdk", &text_color, NULL );
gtk_cell_renderer_render( p->text_renderer, window, widget, &stat_area, &stat_area, &stat_area, flags );
const char * name;
GdkPixbuf * icon;
GdkColor text_color;
+ bool seed;
struct TorrentCellRendererPrivate * p = cell->priv;
const tr_torrent * tor = p->tor;
const tr_stat * st = tr_torrentStatCached( (tr_torrent*)tor );
const tr_info * inf = tr_torrentInfo( tor );
const gboolean active = st->activity != TR_STATUS_STOPPED;
- const double percentDone = MAX( 0.0, st->percentDone );
+ const double percentDone = get_percent_done( tor, st, &seed );
const gboolean sensitive = active || st->error;
GString * gstr_prog = p->gstr1;
GString * gstr_stat = p->gstr2;
gtk_cell_renderer_render( p->text_renderer, window, widget, &name_area, &name_area, &name_area, flags );
g_object_set( p->text_renderer, "text", gstr_prog->str, "scale", SMALL_SCALE, "weight", PANGO_WEIGHT_NORMAL, NULL );
gtk_cell_renderer_render( p->text_renderer, window, widget, &prog_area, &prog_area, &prog_area, flags );
- g_object_set( p->progress_renderer, "value", (int)(percentDone*100.0), "text", "", "sensitive", sensitive, NULL );
+ g_object_set( p->progress_renderer, "value", (int)(percentDone*100.0), "text", "", "sensitive", sensitive,
+#if GTK_CHECK_VERSION( 3,0,0 )
+ "inverted", seed,
+#elif GTK_CHECK_VERSION( 2,6,0 )
+ "orientation", (seed ? GTK_PROGRESS_RIGHT_TO_LEFT : GTK_PROGRESS_LEFT_TO_RIGHT),
+#endif
+ NULL );
gtk_cell_renderer_render( p->progress_renderer, window, widget, &prct_area, &prct_area, &prct_area, flags );
g_object_set( p->text_renderer, "text", gstr_stat->str, NULL );
gtk_cell_renderer_render( p->text_renderer, window, widget, &stat_area, &stat_area, &stat_area, flags );
painter->restore( );
}
+void
+TorrentDelegate :: setProgressBarPercentDone( const QStyleOptionViewItem& option, const Torrent& tor ) const
+{
+ double seedRatioLimit;
+ if (tor.isSeeding() && tor.getSeedRatio(seedRatioLimit))
+ {
+ const double seedRateRatio = tor.ratio() / seedRatioLimit;
+ const double invertedRatio = 1. - seedRateRatio;
+ const int scaledProgress = invertedRatio * (myProgressBarStyle->maximum - myProgressBarStyle->minimum);
+ myProgressBarStyle->progress = myProgressBarStyle->minimum + scaledProgress;
+ myProgressBarStyle->direction = (option.direction == Qt::RightToLeft ? Qt::LeftToRight : Qt::RightToLeft);
+ }
+ else
+ {
+ const bool isMagnet( !tor.hasMetadata( ) );
+ myProgressBarStyle->direction = option.direction;
+ myProgressBarStyle->progress = int(myProgressBarStyle->minimum + (((isMagnet ? tor.metadataPercentDone() : tor.percentDone()) * (myProgressBarStyle->maximum - myProgressBarStyle->minimum))));
+ }
+}
+
void
TorrentDelegate :: drawTorrent( QPainter * painter, const QStyleOptionViewItem& option, const Torrent& tor ) const
{
painter->drawText( statusArea, 0, statusFM.elidedText( statusStr, Qt::ElideRight, statusArea.width( ) ) );
painter->setFont( progressFont );
painter->drawText( progArea, 0, progressFM.elidedText( progressStr, Qt::ElideRight, progArea.width( ) ) );
- const bool isMagnet( !tor.hasMetadata( ) );
myProgressBarStyle->rect = barArea;
- myProgressBarStyle->direction = option.direction;
myProgressBarStyle->palette = option.palette;
myProgressBarStyle->palette.setCurrentColorGroup( cg );
myProgressBarStyle->state = progressBarState;
- myProgressBarStyle->progress = int(myProgressBarStyle->minimum + (((isMagnet ? tor.metadataPercentDone() : tor.percentDone()) * (myProgressBarStyle->maximum - myProgressBarStyle->minimum))));
+ setProgressBarPercentDone( option, tor );
+
style->drawControl( QStyle::CE_ProgressBar, myProgressBarStyle, painter );
painter->restore( );