(gtk) minimal mode now works, mostly
This commit is contained in:
parent
6b6a73a1b4
commit
9098cfbcf7
|
@ -243,18 +243,21 @@ torrent_cell_renderer_get_size( GtkCellRenderer * cell,
|
|||
char * str;
|
||||
int tmp_w, tmp_h;
|
||||
int w=0, h=0;
|
||||
struct TorrentCellRendererPrivate * p = self->priv;
|
||||
|
||||
g_object_set( p->text_renderer, "ellipsize", PANGO_ELLIPSIZE_NONE, NULL );
|
||||
|
||||
/* above the progressbar */
|
||||
if( self->priv->minimal )
|
||||
if( p->minimal )
|
||||
{
|
||||
int w1, w2, h1, h2;
|
||||
char * shortStatusString = getShortStatusString( torStat );
|
||||
g_object_set( self->priv->text_renderer, "text", name, NULL );
|
||||
gtk_cell_renderer_get_size( self->priv->text_renderer,
|
||||
g_object_set( p->text_renderer, "text", name, NULL );
|
||||
gtk_cell_renderer_get_size( p->text_renderer,
|
||||
widget, NULL, NULL, NULL, &w1, &h1 );
|
||||
str = g_markup_printf_escaped( "<small>%s</small>", shortStatusString );
|
||||
g_object_set( self->priv->text_renderer, "markup", name, NULL );
|
||||
gtk_cell_renderer_get_size( self->priv->text_renderer,
|
||||
g_object_set( p->text_renderer, "markup", str, NULL );
|
||||
gtk_cell_renderer_get_size( p->text_renderer,
|
||||
widget, NULL, NULL, NULL, &w2, &h2 );
|
||||
h += MAX( h1, h2 );
|
||||
w = MAX( w, w1+GUI_PAD_BIG+w2 );
|
||||
|
@ -266,8 +269,8 @@ torrent_cell_renderer_get_size( GtkCellRenderer * cell,
|
|||
char * progressString = getProgressString( tor, torStat );
|
||||
str = g_markup_printf_escaped( "<b>%s</b>\n<small>%s</small>",
|
||||
name, progressString );
|
||||
g_object_set( self->priv->text_renderer, "markup", str, NULL );
|
||||
gtk_cell_renderer_get_size( self->priv->text_renderer,
|
||||
g_object_set( p->text_renderer, "markup", str, NULL );
|
||||
gtk_cell_renderer_get_size( p->text_renderer,
|
||||
widget, NULL, NULL, NULL, &tmp_w, &tmp_h );
|
||||
h += tmp_h;
|
||||
w = MAX( w, tmp_w );
|
||||
|
@ -276,12 +279,12 @@ torrent_cell_renderer_get_size( GtkCellRenderer * cell,
|
|||
}
|
||||
|
||||
/* below the progressbar */
|
||||
if( !self->priv->minimal )
|
||||
if( !p->minimal )
|
||||
{
|
||||
char * statusString = getStatusString( torStat );
|
||||
str = g_markup_printf_escaped( "<small>%s</small>", statusString );
|
||||
g_object_set( self->priv->text_renderer, "markup", str, NULL );
|
||||
gtk_cell_renderer_get_size( self->priv->text_renderer,
|
||||
g_object_set( p->text_renderer, "markup", str, NULL );
|
||||
gtk_cell_renderer_get_size( p->text_renderer,
|
||||
widget, NULL, NULL, NULL, &tmp_w, &tmp_h );
|
||||
h += tmp_h;
|
||||
w = MAX( w, tmp_w );
|
||||
|
@ -289,7 +292,7 @@ torrent_cell_renderer_get_size( GtkCellRenderer * cell,
|
|||
g_free( statusString );
|
||||
}
|
||||
|
||||
h += self->priv->bar_height;
|
||||
h += p->bar_height;
|
||||
|
||||
if( cell_area ) {
|
||||
if( x_offset ) *x_offset = 0;
|
||||
|
@ -299,7 +302,6 @@ torrent_cell_renderer_get_size( GtkCellRenderer * cell,
|
|||
}
|
||||
}
|
||||
|
||||
g_message ("width %d height %d", *width, *height );
|
||||
*width = w + xpad*2;
|
||||
*height = h + ypad*2;
|
||||
}
|
||||
|
@ -479,6 +481,7 @@ torrent_cell_renderer_render( GtkCellRenderer * cell,
|
|||
GdkRectangle my_expose;
|
||||
int xpad, ypad;
|
||||
int w, h;
|
||||
struct TorrentCellRendererPrivate * p = self->priv;
|
||||
g_object_get( self, "xpad", &xpad, "ypad", &ypad, NULL );
|
||||
|
||||
my_bg = *background_area;
|
||||
|
@ -495,39 +498,102 @@ torrent_cell_renderer_render( GtkCellRenderer * cell,
|
|||
my_expose.width -= xpad*2;
|
||||
|
||||
/* above the progressbar */
|
||||
str = g_markup_printf_escaped( "<b>%s</b>\n<small>%s</small>",
|
||||
name, progressString );
|
||||
g_object_set( self->priv->text_renderer, "markup", str, NULL );
|
||||
gtk_cell_renderer_get_size( self->priv->text_renderer,
|
||||
widget, NULL, NULL, NULL, &w, &h );
|
||||
my_bg.height = h;
|
||||
my_cell.height = h;
|
||||
my_expose.height = h;
|
||||
gtk_cell_renderer_render( self->priv->text_renderer,
|
||||
window, widget,
|
||||
&my_bg, &my_cell, &my_expose, flags );
|
||||
my_bg.y += h;
|
||||
my_cell.y += h;
|
||||
my_expose.y += h;
|
||||
if( !p->minimal )
|
||||
{
|
||||
str = g_markup_printf_escaped( "<b>%s</b>\n<small>%s</small>",
|
||||
name, progressString );
|
||||
g_object_set( p->text_renderer, "markup", str,
|
||||
"ellipsize", PANGO_ELLIPSIZE_NONE,
|
||||
NULL );
|
||||
gtk_cell_renderer_get_size( p->text_renderer,
|
||||
widget, NULL, NULL, NULL, &w, &h );
|
||||
my_bg.height = h;
|
||||
my_cell.height = h;
|
||||
my_expose.height = h;
|
||||
g_object_set( p->text_renderer, "ellipsize", PANGO_ELLIPSIZE_END,
|
||||
NULL );
|
||||
gtk_cell_renderer_render( p->text_renderer,
|
||||
window, widget,
|
||||
&my_bg, &my_cell, &my_expose, flags );
|
||||
my_bg.y += h;
|
||||
my_cell.y += h;
|
||||
my_expose.y += h;
|
||||
}
|
||||
else
|
||||
{
|
||||
int w1, w2, h1, h2, tmp_h;
|
||||
char * shortStatusString = getShortStatusString( torStat );
|
||||
GdkRectangle tmp_bg, tmp_cell, tmp_expose;
|
||||
|
||||
/* get the dimensions for the name */
|
||||
g_object_set( p->text_renderer, "text", name,
|
||||
"ellipsize", PANGO_ELLIPSIZE_NONE,
|
||||
NULL );
|
||||
gtk_cell_renderer_get_size( p->text_renderer,
|
||||
widget, NULL, NULL, NULL, &w1, &h1 );
|
||||
|
||||
/* get the dimensions for the short status string */
|
||||
str = g_markup_printf_escaped( "<small>%s</small>", shortStatusString );
|
||||
g_object_set( p->text_renderer, "markup", str,
|
||||
"ellipsize", PANGO_ELLIPSIZE_NONE,
|
||||
NULL );
|
||||
gtk_cell_renderer_get_size( p->text_renderer,
|
||||
widget, NULL, NULL, NULL, &w2, &h2 );
|
||||
|
||||
tmp_h = MAX( h1, h2 );
|
||||
|
||||
/* short status */
|
||||
tmp_bg.x = my_bg.width - w2;
|
||||
tmp_bg.y = my_bg.y;
|
||||
tmp_bg.width = w2;
|
||||
tmp_bg.height = tmp_h;
|
||||
tmp_expose = tmp_cell = tmp_bg;
|
||||
g_object_set( p->text_renderer, "markup", str,
|
||||
"ellipsize", PANGO_ELLIPSIZE_NONE,
|
||||
NULL );
|
||||
gtk_cell_renderer_render( p->text_renderer,
|
||||
window, widget,
|
||||
&tmp_bg, &tmp_cell, &tmp_expose, flags );
|
||||
|
||||
/* name */
|
||||
tmp_bg.x = my_bg.x;
|
||||
tmp_bg.width = my_bg.width - w2 - GUI_PAD_BIG;
|
||||
tmp_expose = tmp_cell = tmp_bg;
|
||||
g_object_set( p->text_renderer, "text", name,
|
||||
"ellipsize", PANGO_ELLIPSIZE_END,
|
||||
NULL );
|
||||
gtk_cell_renderer_render( p->text_renderer,
|
||||
window, widget,
|
||||
&tmp_bg, &tmp_cell, &tmp_expose, flags );
|
||||
|
||||
g_free( str );
|
||||
g_free( shortStatusString );
|
||||
|
||||
my_bg.y = tmp_bg.y + tmp_bg.height;
|
||||
my_cell.y = tmp_cell.y + tmp_cell.height;
|
||||
my_expose.y += tmp_expose.y + tmp_cell.height;
|
||||
}
|
||||
|
||||
/* the progressbar */
|
||||
my_cell.height = self->priv->bar_height;
|
||||
my_cell.height = p->bar_height;
|
||||
drawRegularBar( self, info, torStat, window, widget, &my_cell );
|
||||
my_bg.y += my_cell.height;
|
||||
my_cell.y += my_cell.height;
|
||||
my_expose.y += my_cell.height;
|
||||
|
||||
/* below progressbar */
|
||||
if( !self->priv->minimal )
|
||||
if( !p->minimal )
|
||||
{
|
||||
str = g_markup_printf_escaped( "<small>%s</small>", statusString );
|
||||
g_object_set( self->priv->text_renderer, "markup", str, NULL );
|
||||
gtk_cell_renderer_get_size( self->priv->text_renderer,
|
||||
g_object_set( p->text_renderer, "markup", str,
|
||||
"ellipsize", PANGO_ELLIPSIZE_END,
|
||||
NULL );
|
||||
gtk_cell_renderer_get_size( p->text_renderer,
|
||||
widget, NULL, NULL, NULL, &w, &h );
|
||||
my_bg.height = h;
|
||||
my_cell.height = h;
|
||||
my_expose.height = h;
|
||||
gtk_cell_renderer_render( self->priv->text_renderer,
|
||||
gtk_cell_renderer_render( p->text_renderer,
|
||||
window, widget,
|
||||
&my_bg, &my_cell, &my_expose, flags );
|
||||
}
|
||||
|
@ -556,7 +622,7 @@ torrent_cell_renderer_set_property( GObject * object,
|
|||
{
|
||||
case P_TORRENT: p->tor = g_value_get_pointer( v ); break;
|
||||
case P_BAR_HEIGHT: p->bar_height = g_value_get_int( v ); break;
|
||||
case P_MINIMAL: { p->minimal = g_value_get_boolean( v ); g_message("setting minimal to %d", p->minimal ); break; }
|
||||
case P_MINIMAL: p->minimal = g_value_get_boolean( v ); break;
|
||||
case P_GRADIENT: p->gradient = g_value_get_boolean( v ); break;
|
||||
case P_SHOW_UNAVAILABLE: p->show_unavailable = g_value_get_boolean( v ); break;
|
||||
case P_COLOR_MISSING: v2c( &p->color_missing[0], v ); break;
|
||||
|
@ -731,7 +797,6 @@ torrent_cell_renderer_init( GTypeInstance * instance, gpointer g_class UNUSED )
|
|||
p->gradient = TRUE;
|
||||
p->show_unavailable = TRUE;
|
||||
p->bar_height = DEFAULT_BAR_HEIGHT;
|
||||
g_object_set( p->text_renderer, "ellipsize", PANGO_ELLIPSIZE_END, NULL );
|
||||
|
||||
gdk_color_parse( DEFAULT_COLOR_VERIFIED, &p->color_verified[0] );
|
||||
gdk_color_parse( DEFAULT_COLOR_VERIFIED_2, &p->color_verified[1] );
|
||||
|
|
|
@ -38,6 +38,16 @@
|
|||
#include "tr_window.h"
|
||||
#include "util.h"
|
||||
|
||||
#if !GTK_CHECK_VERSION(2,8,0)
|
||||
static void
|
||||
gtk_tree_view_column_queue_resize( GtkTreeViewColumn * column ) /* yuck */
|
||||
{
|
||||
const int spacing = gtk_tree_view_column_get_spacing( column );
|
||||
gtk_tree_view_column_set_spacing( column, spacing+1 );
|
||||
gtk_tree_view_column_set_spacing( column, spacing );
|
||||
}
|
||||
#endif
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GtkWidget * scroll;
|
||||
|
@ -45,8 +55,9 @@ typedef struct
|
|||
GtkWidget * status;
|
||||
GtkWidget * ul_lb;
|
||||
GtkWidget * dl_lb;
|
||||
GtkTreeSelection * selection;
|
||||
GtkCellRenderer * renderer;
|
||||
GtkTreeSelection * selection;
|
||||
GtkCellRenderer * renderer;
|
||||
GtkTreeViewColumn * column;
|
||||
TrCore * core;
|
||||
gulong pref_handler_id;
|
||||
}
|
||||
|
@ -96,7 +107,8 @@ makeview( PrivateData * p )
|
|||
p->selection = gtk_tree_view_get_selection( GTK_TREE_VIEW(view) );
|
||||
|
||||
p->renderer = r = torrent_cell_renderer_new( );
|
||||
col = gtk_tree_view_column_new_with_attributes( _("Torrent"), r, "torrent", MC_TORRENT_RAW, NULL );
|
||||
p->column = col = gtk_tree_view_column_new_with_attributes(
|
||||
_("Torrent"), r, "torrent", MC_TORRENT_RAW, NULL );
|
||||
gtk_tree_view_column_set_sizing( col, GTK_TREE_VIEW_COLUMN_AUTOSIZE );
|
||||
gtk_tree_view_append_column( GTK_TREE_VIEW( view ), col );
|
||||
g_object_set( r, "xpad", GUI_PAD_SMALL, "ypad", GUI_PAD_SMALL, NULL );
|
||||
|
@ -120,8 +132,10 @@ static void
|
|||
realized_cb ( GtkWidget * wind, gpointer unused UNUSED )
|
||||
{
|
||||
PrivateData * p = get_private_data( GTK_WINDOW( wind ) );
|
||||
sizingmagic( GTK_WINDOW(wind), GTK_SCROLLED_WINDOW( p->scroll ),
|
||||
GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS );
|
||||
sizingmagic( GTK_WINDOW(wind),
|
||||
GTK_SCROLLED_WINDOW( p->scroll ),
|
||||
GTK_POLICY_NEVER,
|
||||
GTK_POLICY_ALWAYS );
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -131,6 +145,7 @@ prefsChanged( TrCore * core UNUSED, const char * key, gpointer wind )
|
|||
{
|
||||
PrivateData * p = get_private_data( GTK_WINDOW( wind ) );
|
||||
g_object_set( p->renderer, "minimal", pref_flag_get( key ), NULL );
|
||||
gtk_tree_view_column_queue_resize( p->column );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue