summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Alan Fitton <ajf@eth0.org.uk>2012-08-27 12:28:20 +0100
committerGravatar Alan Fitton <ajf@eth0.org.uk>2012-08-27 12:28:20 +0100
commita24407ea83d00b4f9f0c4f491c58e9c751088968 (patch)
treea2c2a7600d9eec69a7b3f9d44107321b75df9ce4 /src
parent8ba9cdd592fdc47771c9b3bd8491db9d4510b5e7 (diff)
a details tab similar to transmission
Diffstat (limited to 'src')
-rw-r--r--src/hig.c28
-rw-r--r--src/hig.h26
-rw-r--r--src/protocol-constants.h4
-rw-r--r--src/requests.c3
-rw-r--r--src/torrent.c15
-rw-r--r--src/torrent.h3
-rw-r--r--src/trg-preferences-dialog.c10
-rw-r--r--src/trg-prefs.c12
-rw-r--r--src/trg-remote-prefs-dialog.c8
-rw-r--r--src/trg-torrent-add-url-dialog.c2
-rw-r--r--src/trg-torrent-move-dialog.c2
-rw-r--r--src/trg-torrent-props-dialog.c690
-rw-r--r--src/trg-tree-view.c2
13 files changed, 469 insertions, 336 deletions
diff --git a/src/hig.c b/src/hig.c
index af58bf3..f5c7e5f 100644
--- a/src/hig.c
+++ b/src/hig.c
@@ -24,7 +24,7 @@ GtkWidget *hig_workarea_create(void)
return t;
}
-void hig_workarea_add_section_divider(GtkWidget * t, int *row)
+void hig_workarea_add_section_divider(GtkWidget * t, guint *row)
{
GtkWidget *w = gtk_alignment_new(0.0f, 0.0f, 0.0f, 0.0f);
@@ -34,7 +34,7 @@ void hig_workarea_add_section_divider(GtkWidget * t, int *row)
}
void
-hig_workarea_add_section_title_widget(GtkWidget * t, int *row,
+hig_workarea_add_section_title_widget(GtkWidget * t, guint *row,
GtkWidget * w)
{
gtk_table_attach(GTK_TABLE(t), w, 0, 2, *row, *row + 1, ~0, 0, 0, 0);
@@ -43,7 +43,7 @@ hig_workarea_add_section_title_widget(GtkWidget * t, int *row,
void
hig_workarea_add_section_title(GtkWidget * t,
- int *row, const char *section_title)
+ guint *row, const char *section_title)
{
char buf[512];
GtkWidget *l;
@@ -75,7 +75,7 @@ static GtkWidget *rowNew(GtkWidget * w)
return h;
}
-void hig_workarea_add_wide_control(GtkWidget * t, int *row, GtkWidget * w)
+void hig_workarea_add_wide_control(GtkWidget * t, guint *row, GtkWidget * w)
{
GtkWidget *r = rowNew(w);
@@ -85,7 +85,7 @@ void hig_workarea_add_wide_control(GtkWidget * t, int *row, GtkWidget * w)
}
void
-hig_workarea_add_wide_tall_control(GtkWidget * t, int *row, GtkWidget * w)
+hig_workarea_add_wide_tall_control(GtkWidget * t, guint *row, GtkWidget * w)
{
GtkWidget *r = rowNew(w);
@@ -97,7 +97,7 @@ hig_workarea_add_wide_tall_control(GtkWidget * t, int *row, GtkWidget * w)
}
GtkWidget *hig_workarea_add_wide_checkbutton(GtkWidget * t,
- int *row,
+ guint *row,
const char *mnemonic_string,
gboolean is_active)
{
@@ -108,7 +108,7 @@ GtkWidget *hig_workarea_add_wide_checkbutton(GtkWidget * t,
return w;
}
-void hig_workarea_add_label_w(GtkWidget * t, int row, GtkWidget * l)
+void hig_workarea_add_label_w(GtkWidget * t, guint row, GtkWidget * l)
{
GtkWidget *w = rowNew(l);
@@ -116,7 +116,7 @@ void hig_workarea_add_label_w(GtkWidget * t, int row, GtkWidget * l)
GTK_FILL, 0, 0);
}
-GtkWidget *hig_workarea_add_label(GtkWidget * t, int row,
+GtkWidget *hig_workarea_add_label(GtkWidget * t, guint row,
const char *mnemonic_string)
{
GtkWidget *l = gtk_label_new_with_mnemonic(mnemonic_string);
@@ -126,7 +126,7 @@ GtkWidget *hig_workarea_add_label(GtkWidget * t, int row,
}
static void
-hig_workarea_add_tall_control(GtkWidget * t, int row, GtkWidget * control)
+hig_workarea_add_tall_control(GtkWidget * t, guint row, GtkWidget * control)
{
if (GTK_IS_MISC(control))
gtk_misc_set_alignment(GTK_MISC(control), 0.0f, 0.5f);
@@ -137,7 +137,7 @@ hig_workarea_add_tall_control(GtkWidget * t, int row, GtkWidget * control)
GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
}
-void hig_workarea_add_control(GtkWidget * t, int row, GtkWidget * control)
+void hig_workarea_add_control(GtkWidget * t, guint row, GtkWidget * control)
{
if (GTK_IS_MISC(control))
gtk_misc_set_alignment(GTK_MISC(control), 0.0f, 0.5f);
@@ -149,7 +149,7 @@ void hig_workarea_add_control(GtkWidget * t, int row, GtkWidget * control)
void
hig_workarea_add_row_w(GtkWidget * t,
- int *row,
+ guint *row,
GtkWidget * label,
GtkWidget * control, GtkWidget * mnemonic)
{
@@ -162,7 +162,7 @@ hig_workarea_add_row_w(GtkWidget * t,
}
GtkWidget *hig_workarea_add_row(GtkWidget * t,
- int *row,
+ guint *row,
const char *mnemonic_string,
GtkWidget * control, GtkWidget * mnemonic)
{
@@ -173,7 +173,7 @@ GtkWidget *hig_workarea_add_row(GtkWidget * t,
}
GtkWidget *hig_workarea_add_tall_row(GtkWidget * table,
- int *row,
+ guint *row,
const char *mnemonic_string,
GtkWidget * control,
GtkWidget * mnemonic)
@@ -195,7 +195,7 @@ GtkWidget *hig_workarea_add_tall_row(GtkWidget * table,
return l;
}
-void hig_workarea_finish(GtkWidget * t, int *row)
+void hig_workarea_finish(GtkWidget * t, guint *row)
{
gtk_table_resize(GTK_TABLE(t), *row, 2);
}
diff --git a/src/hig.h b/src/hig.h
index 63a6b76..c2b006b 100644
--- a/src/hig.h
+++ b/src/hig.h
@@ -22,54 +22,54 @@
GtkWidget *hig_workarea_create(void);
-void hig_workarea_add_section_divider(GtkWidget * table, int *row);
+void hig_workarea_add_section_divider(GtkWidget * table, guint *row);
void hig_workarea_add_section_title_widget(GtkWidget * t,
- int *row, GtkWidget * w);
+ guint *row, GtkWidget * w);
void hig_workarea_add_section_title(GtkWidget * table,
- int *row, const char *section_title);
+ guint *row, const char *section_title);
void hig_workarea_add_wide_tall_control(GtkWidget * table,
- int *row, GtkWidget * w);
+ guint *row, GtkWidget * w);
void hig_workarea_add_wide_control(GtkWidget * table,
- int *row, GtkWidget * w);
+ guint *row, GtkWidget * w);
GtkWidget *hig_workarea_add_wide_checkbutton(GtkWidget * table,
- int *row,
+ guint *row,
const char *mnemonic_string,
gboolean is_active);
GtkWidget *hig_workarea_add_label(GtkWidget * table,
- int row, const char *mnemonic_string);
+ guint row, const char *mnemonic_string);
void hig_workarea_add_label_w(GtkWidget * table,
- int row, GtkWidget * label_widget);
+ guint row, GtkWidget * label_widget);
void hig_workarea_add_control(GtkWidget * table,
- int row, GtkWidget * control);
+ guint row, GtkWidget * control);
GtkWidget *hig_workarea_add_tall_row(GtkWidget * table,
- int *row,
+ guint *row,
const char *mnemonic_string,
GtkWidget * control,
GtkWidget *
mnemonic_or_null_for_control);
GtkWidget *hig_workarea_add_row(GtkWidget * table,
- int *row,
+ guint *row,
const char *mnemonic_string,
GtkWidget * control,
GtkWidget * mnemonic_or_null_for_control);
void hig_workarea_add_row_w(GtkWidget * table,
- int *row,
+ guint *row,
GtkWidget * label,
GtkWidget * control,
GtkWidget * mnemonic_or_null_for_control);
-void hig_workarea_finish(GtkWidget * table, int *row);
+void hig_workarea_finish(GtkWidget * table, guint *row);
void hig_message_dialog_set_text(GtkMessageDialog * dialog,
const char *primary,
diff --git a/src/protocol-constants.h b/src/protocol-constants.h
index 8d1605b..3f29e33 100644
--- a/src/protocol-constants.h
+++ b/src/protocol-constants.h
@@ -40,14 +40,16 @@
#define FIELD_TOTAL_SIZE "totalSize"
#define FIELD_DONE_DATE "doneDate"
#define FIELD_ADDED_DATE "addedDate"
+#define FIELD_DATE_CREATED "dateCreated"
#define FIELD_TRACKER_STATS "trackerStats"
#define FIELD_DOWNLOAD_DIR "downloadDir"
#define FIELD_HASH_STRING "hashString"
-#define FIELD_SWARM_SPEED "swarmSpeed"
+#define FIELD_SWARM_SPEED g "swarmSpeed"
#define FIELD_NAME "name"
#define FIELD_SIZEWHENDONE "sizeWhenDone"
#define FIELD_STATUS "status"
#define FIELD_MOVE "move"
+#define FIELD_CREATOR "creator"
#define FIELD_LOCATION "location"
#define FIELD_RATEDOWNLOAD "rateDownload"
#define FIELD_RATEUPLOAD "rateUpload"
diff --git a/src/requests.c b/src/requests.c
index 4e8d27e..edd39ba 100644
--- a/src/requests.c
+++ b/src/requests.c
@@ -191,9 +191,10 @@ JsonNode *torrent_get(gint64 id)
json_array_add_string_element(fields, FIELD_LEFT_UNTIL_DONE);
json_array_add_string_element(fields, FIELD_ANNOUNCE_URL);
json_array_add_string_element(fields, FIELD_ERROR_STRING);
- json_array_add_string_element(fields, FIELD_SWARM_SPEED);
json_array_add_string_element(fields, FIELD_TRACKER_STATS);
+ json_array_add_string_element(fields, FIELD_DATE_CREATED);
json_array_add_string_element(fields, FIELD_DOWNLOAD_DIR);
+ json_array_add_string_element(fields, FIELD_CREATOR);
json_array_add_string_element(fields, FIELD_HASH_STRING);
json_array_add_string_element(fields, FIELD_DONE_DATE);
json_array_add_string_element(fields, FIELD_HONORS_SESSION_LIMITS);
diff --git a/src/torrent.c b/src/torrent.c
index 18bc5da..21da80e 100644
--- a/src/torrent.c
+++ b/src/torrent.c
@@ -333,6 +333,21 @@ gint64 torrent_get_error(JsonObject * t)
return json_object_get_int_member(t, FIELD_ERROR);
}
+const gchar *torrent_get_creator(JsonObject *t)
+{
+ return json_object_get_string_member(t, FIELD_CREATOR);
+}
+
+gint64 torrent_get_date_created(JsonObject *t)
+{
+ return json_object_get_int_member(t, FIELD_DATE_CREATED);
+}
+
+const gchar *torrent_get_hash(JsonObject *t)
+{
+ return json_object_get_string_member(t, FIELD_HASH_STRING);
+}
+
gchar *torrent_get_status_string(gint64 rpcv, gint64 value, guint flags)
{
if (rpcv >= NEW_STATUS_RPC_VERSION) {
diff --git a/src/torrent.h b/src/torrent.h
index ae6c432..9c4845f 100644
--- a/src/torrent.h
+++ b/src/torrent.h
@@ -59,6 +59,9 @@ const gchar *torrent_get_comment(JsonObject * t);
gint64 torrent_get_have_unchecked(JsonObject * t);
gint64 torrent_get_have_valid(JsonObject * t);
gint64 torrent_get_status(JsonObject * t);
+const gchar *torrent_get_creator(JsonObject *t);
+gint64 torrent_get_date_created(JsonObject *t);
+const gchar *torrent_get_hash(JsonObject *t);
gchar *torrent_get_status_string(gint64 rpcv, gint64 value, guint flags);
gchar *torrent_get_status_icon(gint64 rpcv, guint flags);
guint32 torrent_get_flags(JsonObject * t, gint64 rpcv, gint64 status,
diff --git a/src/trg-preferences-dialog.c b/src/trg-preferences-dialog.c
index 30f0faa..e8cfb15 100644
--- a/src/trg-preferences-dialog.c
+++ b/src/trg-preferences-dialog.c
@@ -394,7 +394,7 @@ static GtkWidget *trg_prefs_generalPage(TrgPreferencesDialog * dlg)
TRG_PREFERENCES_DIALOG_GET_PRIVATE(dlg);
GtkWidget *w, *activeOnly, *t;
- gint row = 0;
+ guint row = 0;
t = hig_workarea_create();
@@ -592,7 +592,7 @@ static GtkWidget *trg_prefs_openExecPage(TrgPreferencesDialog * dlg)
TrgPersistentTreeView *ptv;
GtkListStore *model;
trg_pref_widget_desc *wd;
- gint row = 0;
+ guint row = 0;
t = hig_workarea_create();
@@ -629,7 +629,7 @@ static GtkWidget *trg_prefs_dirsPage(TrgPreferencesDialog * dlg)
TrgPersistentTreeView *ptv;
GtkListStore *model;
trg_pref_widget_desc *wd;
- gint row = 0;
+ guint row = 0;
t = hig_workarea_create();
@@ -665,7 +665,7 @@ static GtkWidget *trg_prefs_viewPage(TrgPreferencesDialog * dlg)
TRG_PREFERENCES_DIALOG_GET_PRIVATE(dlg);
GtkWidget *w, *dep, *t, *tray;
- gint row = 0;
+ guint row = 0;
gboolean _is_unity = is_unity();
t = hig_workarea_create();
@@ -760,7 +760,7 @@ static GtkWidget *trg_prefs_serverPage(TrgPreferencesDialog * dlg)
GtkWidget *w, *t, *frame, *frameHbox, *profileLabel;
GtkWidget *profileButtonsHbox;
- gint row = 0;
+ guint row = 0;
t = hig_workarea_create();
diff --git a/src/trg-prefs.c b/src/trg-prefs.c
index 126737b..a1a2c8f 100644
--- a/src/trg-prefs.c
+++ b/src/trg-prefs.c
@@ -69,22 +69,14 @@ static void
trg_prefs_get_property(GObject * object, guint property_id,
GValue * value, GParamSpec * pspec)
{
- switch (property_id) {
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
- break;
- }
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
}
static void
trg_prefs_set_property(GObject * object, guint property_id,
const GValue * value, GParamSpec * pspec)
{
- switch (property_id) {
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
- break;
- }
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
}
static void trg_prefs_dispose(GObject * object)
diff --git a/src/trg-remote-prefs-dialog.c b/src/trg-remote-prefs-dialog.c
index acf689b..22b29af 100644
--- a/src/trg-remote-prefs-dialog.c
+++ b/src/trg-remote-prefs-dialog.c
@@ -298,7 +298,7 @@ static GtkWidget *trg_rprefs_bandwidthPage(TrgRemotePrefsDialog * win,
TrgRemotePrefsDialogPrivate *priv =
TRG_REMOTE_PREFS_DIALOG_GET_PRIVATE(win);
GtkWidget *w, *tb, *t;
- gint row = 0;
+ guint row = 0;
t = hig_workarea_create();
@@ -353,7 +353,7 @@ static GtkWidget *trg_rprefs_limitsPage(TrgRemotePrefsDialog * win,
TrgRemotePrefsDialogPrivate *priv =
TRG_REMOTE_PREFS_DIALOG_GET_PRIVATE(win);
GtkWidget *w, *tb, *t;
- gint row = 0;
+ guint row = 0;
t = hig_workarea_create();
@@ -509,7 +509,7 @@ static GtkWidget *trg_rprefs_connPage(TrgRemotePrefsDialog * win,
GtkWidget *w, *tb, *t;
const gchar *stringValue;
- gint row = 0;
+ guint row = 0;
t = hig_workarea_create();
@@ -596,7 +596,7 @@ static GtkWidget *trg_rprefs_generalPage(TrgRemotePrefsDialog * win,
TRG_REMOTE_PREFS_DIALOG_GET_PRIVATE(win);
GtkWidget *w, *tb, *t;
- gint row = 0;
+ guint row = 0;
gint64 cache_size_mb;
t = hig_workarea_create();
diff --git a/src/trg-torrent-add-url-dialog.c b/src/trg-torrent-add-url-dialog.c
index 6fe07e8..ef97725 100644
--- a/src/trg-torrent-add-url-dialog.c
+++ b/src/trg-torrent-add-url-dialog.c
@@ -109,7 +109,7 @@ static void trg_torrent_add_url_dialog_init(TrgTorrentAddUrlDialog * self)
TrgTorrentAddUrlDialogPrivate *priv =
TRG_TORRENT_ADD_URL_DIALOG_GET_PRIVATE(self);
GtkWidget *w, *t, *contentvbox;
- gint row = 0;
+ guint row = 0;
contentvbox = gtk_dialog_get_content_area(GTK_DIALOG(self));
diff --git a/src/trg-torrent-move-dialog.c b/src/trg-torrent-move-dialog.c
index 744b821..381ed86 100644
--- a/src/trg-torrent-move-dialog.c
+++ b/src/trg-torrent-move-dialog.c
@@ -103,7 +103,7 @@ static GObject *trg_torrent_move_dialog_constructor(GType type,
gchar *msg;
GtkWidget *w, *t;
- gint row = 0;
+ guint row = 0;
t = hig_workarea_create();
diff --git a/src/trg-torrent-props-dialog.c b/src/trg-torrent-props-dialog.c
index b237949..669f322 100644
--- a/src/trg-torrent-props-dialog.c
+++ b/src/trg-torrent-props-dialog.c
@@ -52,20 +52,14 @@
* values and then send it with the IDs.
*/
-G_DEFINE_TYPE(TrgTorrentPropsDialog, trg_torrent_props_dialog,
- GTK_TYPE_DIALOG)
+G_DEFINE_TYPE(TrgTorrentPropsDialog, trg_torrent_props_dialog, GTK_TYPE_DIALOG)
enum {
- PROP_0,
- PROP_TREEVIEW,
- PROP_TORRENT_MODEL,
- PROP_PARENT_WINDOW,
- PROP_CLIENT
+ PROP_0, PROP_TREEVIEW, PROP_TORRENT_MODEL, PROP_PARENT_WINDOW, PROP_CLIENT
};
-#define TRG_TORRENT_PROPS_DIALOG_GET_PRIVATE(o) \
+#define GET_PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE ((o), TRG_TYPE_TORRENT_PROPS_DIALOG, TrgTorrentPropsDialogPrivate))
-typedef struct _TrgTorrentPropsDialogPrivate
- TrgTorrentPropsDialogPrivate;
+typedef struct _TrgTorrentPropsDialogPrivate TrgTorrentPropsDialogPrivate;
struct _TrgTorrentPropsDialogPrivate {
TrgTorrentTreeView *tv;
@@ -84,16 +78,27 @@ struct _TrgTorrentPropsDialogPrivate {
TrgTrackersModel *trackersModel;
TrgFilesTreeView *filesTv;
TrgFilesModel *filesModel;
+ JsonObject *lastJson;
+
+ GtkWidget * size_lb;
+ GtkWidget * have_lb;
+ GtkWidget * dl_lb;
+ GtkWidget * ul_lb;
+ GtkWidget * state_lb;
+ GtkWidget * date_started_lb;
+ GtkWidget * eta_lb;
+ GtkWidget * last_activity_lb;
+ GtkWidget * error_lb;
+ GtkWidget * destination_lb;
+ GtkWidget * hash_lb;
+ GtkWidget * privacy_lb;
+ GtkWidget * origin_lb;
+ GtkTextBuffer * comment_buffer;
};
-static void
-trg_torrent_props_dialog_set_property(GObject * object,
- guint prop_id,
- const GValue * value,
- GParamSpec * pspec G_GNUC_UNUSED)
-{
- TrgTorrentPropsDialogPrivate *priv =
- TRG_TORRENT_PROPS_DIALOG_GET_PRIVATE(object);
+static void trg_torrent_props_dialog_set_property(GObject * object,
+ guint prop_id, const GValue * value, GParamSpec * pspec G_GNUC_UNUSED) {
+ TrgTorrentPropsDialogPrivate *priv = GET_PRIVATE(object);
switch (prop_id) {
case PROP_PARENT_WINDOW:
@@ -111,318 +116,462 @@ trg_torrent_props_dialog_set_property(GObject * object,
}
}
-static void
-trg_torrent_props_dialog_get_property(GObject * object,
- guint prop_id,
- GValue * value,
- GParamSpec * pspec G_GNUC_UNUSED)
-{
- TrgTorrentPropsDialogPrivate *priv =
- TRG_TORRENT_PROPS_DIALOG_GET_PRIVATE(object);
-
- switch (prop_id) {
- case PROP_TREEVIEW:
- g_value_set_object(value, priv->tv);
- break;
- case PROP_TORRENT_MODEL:
- g_value_set_object(value, priv->torrentModel);
- break;
- case PROP_PARENT_WINDOW:
- g_value_set_object(value, priv->parent);
- break;
- case PROP_CLIENT:
- g_value_set_pointer(value, priv->client);
- break;
- }
+static void trg_torrent_props_dialog_get_property(GObject * object,
+ guint prop_id, GValue * value, GParamSpec * pspec G_GNUC_UNUSED) {
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
}
-static void
-trg_torrent_props_response_cb(GtkDialog * dlg, gint res_id,
- gpointer data G_GNUC_UNUSED)
-{
- TrgTorrentPropsDialogPrivate *priv;
+static void trg_torrent_props_response_cb(GtkDialog * dialog, gint res_id,
+ gpointer data G_GNUC_UNUSED) {
+ TrgTorrentPropsDialogPrivate *priv = GET_PRIVATE(dialog);
JsonNode *request;
JsonObject *args;
- priv = TRG_TORRENT_PROPS_DIALOG_GET_PRIVATE(dlg);
-
if (priv->peersTv) {
trg_tree_view_persist(TRG_TREE_VIEW(priv->peersTv),
- TRG_TREE_VIEW_PERSIST_SORT |
- TRG_TREE_VIEW_PERSIST_LAYOUT);
- trg_tree_view_persist(TRG_TREE_VIEW(priv->filesTv),
- TRG_TREE_VIEW_PERSIST_SORT |
- TRG_TREE_VIEW_PERSIST_LAYOUT);
- trg_tree_view_persist(TRG_TREE_VIEW(priv->trackersTv),
- TRG_TREE_VIEW_PERSIST_SORT |
- TRG_TREE_VIEW_PERSIST_LAYOUT);
+ TRG_TREE_VIEW_PERSIST_SORT | TRG_TREE_VIEW_PERSIST_LAYOUT);
+ if (priv->filesTv)
+ trg_tree_view_persist(TRG_TREE_VIEW(priv->filesTv),
+ TRG_TREE_VIEW_PERSIST_SORT | TRG_TREE_VIEW_PERSIST_LAYOUT);
+
+ if (priv->trackersTv)
+ trg_tree_view_persist(TRG_TREE_VIEW(priv->trackersTv),
+ TRG_TREE_VIEW_PERSIST_SORT | TRG_TREE_VIEW_PERSIST_LAYOUT);
+
+ if (res_id != GTK_RESPONSE_OK) {
+ gtk_widget_destroy(GTK_WIDGET(dialog) );
+ json_array_unref(priv->targetIds);
+ return;
+ }
+
+ request = torrent_set(priv->targetIds);
+ args = node_get_arguments(request);
+
+ json_object_set_int_member(args, FIELD_SEED_RATIO_MODE,
+ gtk_combo_box_get_active(GTK_COMBO_BOX
+ (priv->seedRatioMode) ));
+ json_object_set_int_member(args, FIELD_BANDWIDTH_PRIORITY,
+ gtk_combo_box_get_active(GTK_COMBO_BOX
+ (priv->bandwidthPriorityCombo) ) - 1);
+
+ trg_json_widgets_save(priv->widgets, args);
+ trg_json_widget_desc_list_free(priv->widgets);
+
+ dispatch_async(priv->client, request, on_generic_interactive_action,
+ priv->parent);
+
+ gtk_widget_destroy(GTK_WIDGET(dialog) );
+ }
+}
+
+static void seed_ratio_mode_changed_cb(GtkWidget * w, gpointer data) {
+ gtk_widget_set_sensitive(GTK_WIDGET(data),
+ gtk_combo_box_get_active(GTK_COMBO_BOX(w) ) == 1 ? TRUE : FALSE);
+}
+
+static GtkWidget*
+info_page_new(TrgTorrentPropsDialog * dialog) {
+ TrgTorrentPropsDialogPrivate *priv = GET_PRIVATE(dialog);
+ guint row = 0;
+ GtkTextBuffer * b;
+ GtkWidget *l, *w, *fr, *sw;
+ GtkWidget *t = hig_workarea_create();
+
+ hig_workarea_add_section_title(t, &row, _( "Activity" ));
+
+ /* size */
+ l = priv->size_lb = gtk_label_new(NULL );
+ gtk_label_set_single_line_mode(GTK_LABEL( l ), TRUE);
+ hig_workarea_add_row(t, &row, _( "Torrent size:" ), l, NULL );
+
+ /* have */
+ l = priv->have_lb = gtk_label_new(NULL );
+ gtk_label_set_single_line_mode(GTK_LABEL( l ), TRUE);
+ hig_workarea_add_row(t, &row, _( "Have:" ), l, NULL );
+
+ /* downloaded */
+ l = priv->dl_lb = gtk_label_new(NULL );
+ gtk_label_set_single_line_mode(GTK_LABEL( l ), TRUE);
+ hig_workarea_add_row(t, &row, _( "Downloaded:" ), l, NULL );
+
+ /* uploaded */
+ l = priv->ul_lb = gtk_label_new(NULL );
+ gtk_label_set_single_line_mode(GTK_LABEL( l ), TRUE);
+ hig_workarea_add_row(t, &row, _( "Uploaded:" ), l, NULL );
+
+ /* state */
+ l = priv->state_lb = gtk_label_new(NULL );
+ gtk_label_set_single_line_mode(GTK_LABEL( l ), TRUE);
+ hig_workarea_add_row(t, &row, _( "State:" ), l, NULL );
+
+ /* running for */
+ l = priv->date_started_lb = gtk_label_new(NULL );
+ gtk_label_set_single_line_mode(GTK_LABEL( l ), TRUE);
+ hig_workarea_add_row(t, &row, _( "Running time:" ), l, NULL );
+
+ /* eta */
+ l = priv->eta_lb = gtk_label_new(NULL );
+ gtk_label_set_single_line_mode(GTK_LABEL( l ), TRUE);
+ hig_workarea_add_row(t, &row, _( "Remaining time:" ), l, NULL );
+
+ /* last activity */
+ l = priv->last_activity_lb = gtk_label_new(NULL );
+ gtk_label_set_single_line_mode(GTK_LABEL( l ), TRUE);
+ hig_workarea_add_row(t, &row, _( "Last activity:" ), l, NULL );
+
+ /* error */
+ l = g_object_new(GTK_TYPE_LABEL, "selectable", TRUE, "ellipsize",
+ PANGO_ELLIPSIZE_END, NULL );
+ hig_workarea_add_row(t, &row, _( "Error:" ), l, NULL );
+ priv->error_lb = l;
+
+ hig_workarea_add_section_divider(t, &row);
+ hig_workarea_add_section_title(t, &row, _( "Details" ));
+
+ /* destination */
+ l = g_object_new(GTK_TYPE_LABEL, "selectable", TRUE, "ellipsize",
+ PANGO_ELLIPSIZE_END, NULL );
+ hig_workarea_add_row(t, &row, _( "Location:" ), l, NULL );
+ priv->destination_lb = l;
+
+ /* hash */
+ l = g_object_new(GTK_TYPE_LABEL, "selectable", TRUE, "ellipsize",
+ PANGO_ELLIPSIZE_END, NULL );
+ hig_workarea_add_row(t, &row, _( "Hash:" ), l, NULL );
+ priv->hash_lb = l;
+
+ /* privacy */
+ l = gtk_label_new(NULL );
+ gtk_label_set_single_line_mode(GTK_LABEL( l ), TRUE);
+ hig_workarea_add_row(t, &row, _( "Privacy:" ), l, NULL );
+ priv->privacy_lb = l;
+
+ /* origins */
+ l = g_object_new(GTK_TYPE_LABEL, "selectable", TRUE, "ellipsize",
+ PANGO_ELLIPSIZE_END, NULL );
+ hig_workarea_add_row(t, &row, _( "Origin:" ), l, NULL );
+ priv->origin_lb = l;
+
+ /* comment */
+ b = priv->comment_buffer = gtk_text_buffer_new(NULL );
+ w = gtk_text_view_new_with_buffer(b);
+ gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW( w ), GTK_WRAP_WORD);
+ gtk_text_view_set_editable(GTK_TEXT_VIEW( w ), FALSE);
+ sw = gtk_scrolled_window_new(NULL, NULL );
+ gtk_widget_set_size_request(sw, 350, 36);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW( sw ),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+ gtk_container_add(GTK_CONTAINER( sw ), w);
+ fr = gtk_frame_new(NULL );
+ gtk_frame_set_shadow_type(GTK_FRAME( fr ), GTK_SHADOW_IN);
+ gtk_container_add(GTK_CONTAINER( fr ), sw);
+ w = hig_workarea_add_tall_row(t, &row, _( "Comment:" ), fr, NULL );
+ gtk_misc_set_alignment(GTK_MISC( w ), 0.0f, 0.0f);
+
+ hig_workarea_add_section_divider(t, &row);
+ return t;
+}
+
+static void info_page_update(TrgTorrentPropsDialog *dialog, JsonObject *t,
+ TrgTorrentModel *torrentModel, GtkTreeIter *iter) {
+ TrgTorrentPropsDialogPrivate *priv = GET_PRIVATE(dialog);
+ GtkTreeModel *model = GTK_TREE_MODEL(torrentModel);
+ gint64 sizeWhenDone, haveValid, downloaded, uploaded, percentDone, eta, activityDate, error;
+ gchar *statusString;
+ guint flags;
+ //const gchar * creator;
+ const gchar * str;
+
+ char buf[512];
+
+ gtk_tree_model_get(model, iter,
+ TORRENT_COLUMN_SIZEWHENDONE, &sizeWhenDone,
+ TORRENT_COLUMN_UPLOADED, &uploaded,
+ TORRENT_COLUMN_DOWNLOADED, &downloaded,
+ TORRENT_COLUMN_HAVE_VALID, &haveValid,
+ TORRENT_COLUMN_PERCENTDONE, &percentDone,
+ TORRENT_COLUMN_ETA, &eta,
+ TORRENT_COLUMN_LASTACTIVE, &activityDate,
+ TORRENT_COLUMN_STATUS, &statusString,
+ TORRENT_COLUMN_FLAGS, &flags,
+ TORRENT_COLUMN_ERROR, &error,
+ -1);
+
+ if (torrent_get_is_private(t))
+ str = _( "Private to this tracker -- DHT and PEX disabled" );
+ else
+ str = _( "Public torrent" );
+
+ gtk_label_set_text(GTK_LABEL( priv->privacy_lb ), str);
+
+ {
+ const gchar* creator = torrent_get_creator(t);
+ gint64 dateCreated = torrent_get_date_created(t);
+ gchar *dateStr = epoch_to_string(dateCreated);
+
+ if (!creator)
+ g_snprintf(buf, sizeof(buf), _( "Created on %1$s" ), dateStr);
+ else
+ g_snprintf(buf, sizeof(buf), _( "Created by %1$s on %2$s" ),
+ creator, dateStr);
+
+ g_free(dateStr);
+ gtk_label_set_text(GTK_LABEL( priv->origin_lb ), buf);
}
- if (res_id != GTK_RESPONSE_OK) {
- gtk_widget_destroy(GTK_WIDGET(dlg));
- json_array_unref(priv->targetIds);
- return;
+ gtk_text_buffer_set_text( priv->comment_buffer, torrent_get_comment(t), -1 );
+ gtk_label_set_text( GTK_LABEL( priv->destination_lb ), torrent_get_download_dir(t) );
+
+ gtk_label_set_text( GTK_LABEL( priv->state_lb ), statusString );
+ g_free(statusString);
+
+ {
+ gchar *addedStr = epoch_to_string( torrent_get_added_date(t) );
+ gtk_label_set_text( GTK_LABEL( priv->date_started_lb ), addedStr );
+ g_free(addedStr);
}
- request = torrent_set(priv->targetIds);
- args = node_get_arguments(request);
+ /* eta */
- json_object_set_int_member(args, FIELD_SEED_RATIO_MODE,
- gtk_combo_box_get_active(GTK_COMBO_BOX
- (priv->seedRatioMode)));
- json_object_set_int_member(args, FIELD_BANDWIDTH_PRIORITY,
- gtk_combo_box_get_active(GTK_COMBO_BOX
- (priv->bandwidthPriorityCombo))
- - 1);
+ if (eta > 0) {
+ tr_strltime_long(buf, eta, sizeof( buf ));
+ gtk_label_set_text(GTK_LABEL(priv->eta_lb), buf);
+ } else {
+ gtk_label_set_text(GTK_LABEL(priv->eta_lb), _( "Unknown" ));
+ }
- trg_json_widgets_save(priv->widgets, args);
- trg_json_widget_desc_list_free(priv->widgets);
+ gtk_label_set_text( GTK_LABEL( priv->hash_lb ), torrent_get_hash(t) );
+ gtk_label_set_text( GTK_LABEL(priv->error_lb), error ? torrent_get_errorstr(t) : _("No errors"));
- dispatch_async(priv->client, request,
- on_generic_interactive_action, priv->parent);
+ if (flags & TORRENT_FLAG_ACTIVE) {
+ gtk_label_set_text(GTK_LABEL (priv->last_activity_lb),
+ _( "Active now" ));
+ } else {
+ gchar *activityStr = epoch_to_string(activityDate);
+ gtk_label_set_text(GTK_LABEL (priv->last_activity_lb), activityStr);
+ g_free(activityStr);
+ }
- gtk_widget_destroy(GTK_WIDGET(dlg));
-}
+ tr_strlsize(buf, sizeWhenDone, sizeof(buf));
+ gtk_label_set_text(GTK_LABEL( priv->size_lb ), buf);
-static void seed_ratio_mode_changed_cb(GtkWidget * w, gpointer data)
-{
- gtk_widget_set_sensitive(GTK_WIDGET(data),
- gtk_combo_box_get_active(GTK_COMBO_BOX(w))
- == 1 ? TRUE : FALSE);
+ tr_strlsize(buf, downloaded, sizeof(buf));
+ gtk_label_set_text(GTK_LABEL( priv->dl_lb ), buf);
+
+ tr_strlsize(buf, uploaded, sizeof(buf));
+ gtk_label_set_text(GTK_LABEL( priv->ul_lb ), buf);
+
+ tr_strlsize(buf, haveValid, sizeof(buf));
+ gtk_label_set_text(GTK_LABEL( priv->have_lb ), buf);
}
-static GtkWidget *trg_props_limitsPage(TrgTorrentPropsDialog * win,
- JsonObject * json)
-{
- TrgTorrentPropsDialogPrivate *priv =
- TRG_TORRENT_PROPS_DIALOG_GET_PRIVATE(win);
+static GtkWidget *trg_props_limits_page_new(TrgTorrentPropsDialog * win,
+ JsonObject * json) {
+ TrgTorrentPropsDialogPrivate *priv = GET_PRIVATE(win);
GtkWidget *w, *tb, *t;
- gint row = 0;
+ guint row = 0;
t = hig_workarea_create();
hig_workarea_add_section_title(t, &row, _("Bandwidth"));
w = trg_json_widget_check_new(&priv->widgets, json,
- FIELD_HONORS_SESSION_LIMITS,
- _("Honor global limits"), NULL);
+ FIELD_HONORS_SESSION_LIMITS, _("Honor global limits"), NULL );
hig_workarea_add_wide_control(t, &row, w);
- w = priv->bandwidthPriorityCombo =
- gtr_combo_box_new_enum(_("Low"), 0, _("Normal"), 1, _("High"), 2,
- NULL);
+ w = priv->bandwidthPriorityCombo = gtr_combo_box_new_enum(_("Low"), 0,
+ _("Normal"), 1, _("High"), 2, NULL );
gtk_combo_box_set_active(GTK_COMBO_BOX(w),
- torrent_get_bandwidth_priority(json) + 1);
+ torrent_get_bandwidth_priority(json) + 1);
- hig_workarea_add_row(t, &row, _("Torrent priority:"), w, NULL);
+ hig_workarea_add_row(t, &row, _("Torrent priority:"), w, NULL );
if (json_object_has_member(json, FIELD_QUEUE_POSITION)) {
- w = trg_json_widget_spin_new(&priv->widgets, json,
- FIELD_QUEUE_POSITION, NULL, 0,
- INT_MAX, 1);
+ w = trg_json_widget_spin_new(&priv->widgets, json, FIELD_QUEUE_POSITION,
+ NULL, 0, INT_MAX, 1);
hig_workarea_add_row(t, &row, _("Queue Position:"), w, w);
}
- tb = trg_json_widget_check_new(&priv->widgets, json,
- FIELD_DOWNLOAD_LIMITED,
- _("Limit download speed (KiB/s)"),
- NULL);
- w = trg_json_widget_spin_new(&priv->widgets, json,
- FIELD_DOWNLOAD_LIMIT, tb, 0, INT_MAX, 1);
- hig_workarea_add_row_w(t, &row, tb, w, NULL);
-
- tb = trg_json_widget_check_new(&priv->widgets, json,
- FIELD_UPLOAD_LIMITED,
- _("Limit upload speed (KiB/s)"), NULL);
- w = trg_json_widget_spin_new(&priv->widgets, json,
- FIELD_UPLOAD_LIMIT, tb, 0, INT_MAX, 1);
- hig_workarea_add_row_w(t, &row, tb, w, NULL);
+ tb = trg_json_widget_check_new(&priv->widgets, json, FIELD_DOWNLOAD_LIMITED,
+ _("Limit download speed (KiB/s)"), NULL );
+ w = trg_json_widget_spin_new(&priv->widgets, json, FIELD_DOWNLOAD_LIMIT, tb,
+ 0, INT_MAX, 1);
+ hig_workarea_add_row_w(t, &row, tb, w, NULL );
+
+ tb = trg_json_widget_check_new(&priv->widgets, json, FIELD_UPLOAD_LIMITED,
+ _("Limit upload speed (KiB/s)"), NULL );
+ w = trg_json_widget_spin_new(&priv->widgets, json, FIELD_UPLOAD_LIMIT, tb,
+ 0, INT_MAX, 1);
+ hig_workarea_add_row_w(t, &row, tb, w, NULL );
hig_workarea_add_section_title(t, &row, _("Seeding"));
- w = priv->seedRatioMode =
- gtr_combo_box_new_enum(_("Use global settings"), 0,
- _("Stop seeding at ratio"), 1,
- _("Seed regardless of ratio"), 2, NULL);
+ w = priv->seedRatioMode = gtr_combo_box_new_enum(_("Use global settings"),
+ 0, _("Stop seeding at ratio"), 1, _("Seed regardless of ratio"),
+ 2, NULL );
gtk_combo_box_set_active(GTK_COMBO_BOX(w),
- torrent_get_seed_ratio_mode(json));
- hig_workarea_add_row(t, &row, _("Seed ratio mode:"), w, NULL);
+ torrent_get_seed_ratio_mode(json));
+ hig_workarea_add_row(t, &row, _("Seed ratio mode:"), w, NULL );
- w = trg_json_widget_spin_new(&priv->widgets, json,
- FIELD_SEED_RATIO_LIMIT, NULL, 0,
- INT_MAX, 0.2);
+ w = trg_json_widget_spin_new(&priv->widgets, json, FIELD_SEED_RATIO_LIMIT,
+ NULL, 0, INT_MAX, 0.2);
seed_ratio_mode_changed_cb(priv->seedRatioMode, w);
g_signal_connect(G_OBJECT(priv->seedRatioMode), "changed",
- G_CALLBACK(seed_ratio_mode_changed_cb), w);
+ G_CALLBACK(seed_ratio_mode_changed_cb), w);
hig_workarea_add_row(t, &row, _("Seed ratio limit:"), w, w);
hig_workarea_add_section_title(t, &row, _("Peers"));
- w = trg_json_widget_spin_new(&priv->widgets, json,
- FIELD_PEER_LIMIT, NULL, 0, INT_MAX, 5);
+ w = trg_json_widget_spin_new(&priv->widgets, json, FIELD_PEER_LIMIT, NULL,
+ 0, INT_MAX, 5);
hig_workarea_add_row(t, &row, _("Peer limit:"), w, w);
return t;
}
-static void models_updated(TrgTorrentModel * model, gpointer data)
-{
- TrgTorrentPropsDialogPrivate *priv =
- TRG_TORRENT_PROPS_DIALOG_GET_PRIVATE(data);
+static void models_updated(TrgTorrentModel * model, gpointer data) {
+ TrgTorrentPropsDialogPrivate *priv = GET_PRIVATE(data);
GHashTable *ht = get_torrent_table(model);
gint64 serial = trg_client_get_serial(priv->client);
JsonObject *t;
-
- if (get_torrent_data
- (ht, json_array_get_int_element(priv->targetIds, 0), &t, NULL)) {
- trg_files_model_update(priv->filesModel,
- GTK_TREE_VIEW(priv->filesTv), serial, t,
- TORRENT_GET_MODE_UPDATE);
- trg_peers_model_update(priv->peersModel,
- TRG_TREE_VIEW(priv->peersTv), serial, t,
- TORRENT_GET_MODE_UPDATE);
+ GtkTreeIter iter;
+
+ if (get_torrent_data(ht, json_array_get_int_element(priv->targetIds, 0), &t,
+ &iter) && t != priv->lastJson) {
+ trg_files_model_update(priv->filesModel, GTK_TREE_VIEW(priv->filesTv),
+ serial, t, TORRENT_GET_MODE_UPDATE);
+ trg_peers_model_update(priv->peersModel, TRG_TREE_VIEW(priv->peersTv),
+ serial, t, TORRENT_GET_MODE_UPDATE);
trg_trackers_model_update(priv->trackersModel, serial, t,
TORRENT_GET_MODE_UPDATE);
+ info_page_update(TRG_TORRENT_PROPS_DIALOG(data), t, model, &iter);
+
+ priv->lastJson = t;
}
}
static GObject *trg_torrent_props_dialog_constructor(GType type,
- guint
- n_construct_properties,
- GObjectConstructParam
- * construct_params)
-{
- GObject *object;
- TrgTorrentPropsDialogPrivate *priv;
+ guint n_construct_properties, GObjectConstructParam * construct_params) {
+ GObject *object = G_OBJECT_CLASS
+ (trg_torrent_props_dialog_parent_class) ->constructor(type,
+ n_construct_properties, construct_params);
+
+ TrgTorrentPropsDialog *propsDialog = TRG_TORRENT_PROPS_DIALOG(object);
+ GtkWindow *window = GTK_WINDOW(object);
+ TrgTorrentPropsDialogPrivate *priv = GET_PRIVATE(object);
+
+ GtkTreeSelection *selection = gtk_tree_view_get_selection(
+ GTK_TREE_VIEW(priv->tv) );
+ gint rowCount = gtk_tree_selection_count_selected_rows(selection);
+ TrgPrefs *prefs = trg_client_get_prefs(priv->client);
+ gboolean showDetails = trg_prefs_get_int(prefs, TRG_PREFS_KEY_STYLE,
+ TRG_PREFS_GLOBAL) != TRG_STYLE_CLASSIC && rowCount == 1;
+
JsonObject *json;
- GtkTreeSelection *selection;
- gint rowCount;
- gint64 style;
- TrgPrefs *prefs;
+ GtkTreeIter iter;
GtkWidget *notebook, *contentvbox;
- object = G_OBJECT_CLASS
- (trg_torrent_props_dialog_parent_class)->constructor(type,
- n_construct_properties,
- construct_params);
-
- priv = TRG_TORRENT_PROPS_DIALOG_GET_PRIVATE(object);
-
- prefs = trg_client_get_prefs(priv->client);
- style =
- trg_prefs_get_int(prefs, TRG_PREFS_KEY_STYLE, TRG_PREFS_GLOBAL);
-
- selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->tv));
- rowCount = gtk_tree_selection_count_selected_rows(selection);
get_torrent_data(trg_client_get_torrent_table(priv->client),
- trg_mw_get_selected_torrent_id(priv->parent), &json,
- NULL);
+ trg_mw_get_selected_torrent_id(priv->parent), &json, &iter);
priv->targetIds = build_json_id_array(priv->tv);
if (rowCount > 1) {
- gchar *windowTitle =
- g_strdup_printf(_("Multiple (%d) torrent properties"),
- rowCount);
- gtk_window_set_title(GTK_WINDOW(object), windowTitle);
+ gchar *windowTitle = g_strdup_printf(
+ _("Multiple (%d) torrent properties"), rowCount);
+ gtk_window_set_title(window, windowTitle);
g_free(windowTitle);
} else if (rowCount == 1) {
- gtk_window_set_title(GTK_WINDOW(object), torrent_get_name(json));
+ gtk_window_set_title(window, torrent_get_name(json));
}
- gtk_window_set_transient_for(GTK_WINDOW(object),
- GTK_WINDOW(priv->parent));
- gtk_window_set_destroy_with_parent(GTK_WINDOW(object), TRUE);
+ gtk_window_set_transient_for(window, GTK_WINDOW(priv->parent) );
+ gtk_window_set_destroy_with_parent(window, TRUE);
gtk_dialog_add_button(GTK_DIALOG(object), GTK_STOCK_CLOSE,
- GTK_RESPONSE_CLOSE);
- gtk_dialog_add_button(GTK_DIALOG(object), GTK_STOCK_OK,
- GTK_RESPONSE_OK);
+ GTK_RESPONSE_CLOSE);
+ gtk_dialog_add_button(GTK_DIALOG(object), GTK_STOCK_OK, GTK_RESPONSE_OK);
gtk_container_set_border_width(GTK_CONTAINER(object), GUI_PAD);
gtk_dialog_set_default_response(GTK_DIALOG(object), GTK_RESPONSE_OK);
- g_signal_connect(G_OBJECT(object),
- "response",
- G_CALLBACK(trg_torrent_props_response_cb), NULL);
+ g_signal_connect(G_OBJECT(object), "response",
+ G_CALLBACK(trg_torrent_props_response_cb), NULL);
notebook = gtk_notebook_new();
- gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
- trg_props_limitsPage
- (TRG_TORRENT_PROPS_DIALOG(object), json),
- gtk_label_new(_("Limits")));
-
- if (style != TRG_STYLE_CLASSIC && rowCount == 1) {
+ if (showDetails) {
gint64 serial = trg_client_get_serial(priv->client);
+ /* Information */
+
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
+ info_page_new(propsDialog), gtk_label_new(_("Information")));
+ info_page_update(propsDialog, json, priv->torrentModel, &iter);
+
+ /* Files */
+
priv->filesModel = trg_files_model_new();
- priv->filesTv =
- trg_files_tree_view_new(priv->filesModel, priv->parent,
- priv->client,
- "TrgFilesTreeView-dialog");
- trg_files_model_update(priv->filesModel,
- GTK_TREE_VIEW(priv->filesTv), serial, json,
- TORRENT_GET_MODE_FIRST);
+ priv->filesTv = trg_files_tree_view_new(priv->filesModel, priv->parent,
+ priv->client, "TrgFilesTreeView-dialog");
+ trg_files_model_update(priv->filesModel, GTK_TREE_VIEW(priv->filesTv),
+ serial, json, TORRENT_GET_MODE_FIRST);
gtk_widget_set_sensitive(GTK_WIDGET(priv->filesTv), TRUE);
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
+ my_scrolledwin_new(GTK_WIDGET
+ (priv->filesTv) ), gtk_label_new(_("Files")));
+
+ /* Peers */
priv->peersModel = trg_peers_model_new();
- priv->peersTv =
- trg_peers_tree_view_new(prefs, priv->peersModel,
- "TrgPeersTreeView-dialog");
- trg_peers_model_update(priv->peersModel,
- TRG_TREE_VIEW(priv->peersTv), serial, json,
- TORRENT_GET_MODE_FIRST);
+ priv->peersTv = trg_peers_tree_view_new(prefs, priv->peersModel,
+ "TrgPeersTreeView-dialog");
+ trg_peers_model_update(priv->peersModel, TRG_TREE_VIEW(priv->peersTv),
+ serial, json, TORRENT_GET_MODE_FIRST);
gtk_widget_set_sensitive(GTK_WIDGET(priv->peersTv), TRUE);
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
+ my_scrolledwin_new(GTK_WIDGET
+ (priv->peersTv) ), gtk_label_new(_("Peers")));
+
+ /* Trackers */
priv->trackersModel = trg_trackers_model_new();
- priv->trackersTv =
- trg_trackers_tree_view_new(priv->trackersModel, priv->client,
- priv->parent,
- "TrgTrackersTreeView-dialog");
- trg_trackers_tree_view_new_connection(priv->trackersTv,
- priv->client);
+ priv->trackersTv = trg_trackers_tree_view_new(priv->trackersModel,
+ priv->client, priv->parent, "TrgTrackersTreeView-dialog");
+ trg_trackers_tree_view_new_connection(priv->trackersTv, priv->client);
trg_trackers_model_update(priv->trackersModel, serial, json,
- TORRENT_GET_MODE_FIRST);
+ TORRENT_GET_MODE_FIRST);
gtk_widget_set_sensitive(GTK_WIDGET(priv->trackersTv), TRUE);
-
- gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
- my_scrolledwin_new(GTK_WIDGET
- (priv->filesTv)),
- gtk_label_new(_("Files")));
-
gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
- my_scrolledwin_new(GTK_WIDGET
- (priv->peersTv)),
- gtk_label_new(_("Peers")));
-
- gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
- my_scrolledwin_new(GTK_WIDGET
- (priv->trackersTv)),
- gtk_label_new(_("Trackers")));
+ my_scrolledwin_new(GTK_WIDGET
+ (priv->trackersTv) ), gtk_label_new(_("Trackers")));
g_object_unref(priv->trackersModel);
g_object_unref(priv->filesModel);
g_object_unref(priv->peersModel);
- g_signal_connect_object(priv->torrentModel, "update",
- G_CALLBACK
- (models_updated), object, G_CONNECT_AFTER);
+ g_signal_connect_object(priv->torrentModel, "update", G_CALLBACK
+ (models_updated), object, G_CONNECT_AFTER);
+
+ priv->lastJson = json;
}
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
+ trg_props_limits_page_new(propsDialog, json),
+ gtk_label_new(_("Limits")));
+
gtk_container_set_border_width(GTK_CONTAINER(notebook), GUI_PAD);
- contentvbox = gtk_dialog_get_content_area(GTK_DIALOG(object));
+ contentvbox = gtk_dialog_get_content_area(GTK_DIALOG(object) );
gtk_box_pack_start(GTK_BOX(contentvbox), notebook, TRUE, TRUE, 0);
- gtk_window_set_default_size(GTK_WINDOW(object), 500, 500);
+ gtk_window_set_default_size(window, 500, 500);
return object;
}
-static void
-trg_torrent_props_dialog_class_init(TrgTorrentPropsDialogClass * klass)
-{
+static void trg_torrent_props_dialog_class_init(
+ TrgTorrentPropsDialogClass * klass) {
GObjectClass *object_class = G_OBJECT_CLASS(klass);
object_class->constructor = trg_torrent_props_dialog_constructor;
@@ -431,71 +580,42 @@ trg_torrent_props_dialog_class_init(TrgTorrentPropsDialogClass * klass)
g_type_class_add_private(klass, sizeof(TrgTorrentPropsDialogPrivate));
- g_object_class_install_property(object_class,
- PROP_TREEVIEW,
- g_param_spec_object
- ("torrent-tree-view",
- "TrgTorrentTreeView",
- "TrgTorrentTreeView",
- TRG_TYPE_TORRENT_TREE_VIEW,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY |
- G_PARAM_STATIC_NAME |
- G_PARAM_STATIC_NICK |
- G_PARAM_STATIC_BLURB));
-
- g_object_class_install_property(object_class,
- PROP_TORRENT_MODEL,
- g_param_spec_object
- ("torrent-model",
- "TrgTorrentModel",
- "TrgTorrentModel",
- TRG_TYPE_TORRENT_MODEL,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY |
- G_PARAM_STATIC_NAME |
- G_PARAM_STATIC_NICK |
- G_PARAM_STATIC_BLURB));
-
- g_object_class_install_property(object_class,
- PROP_PARENT_WINDOW,
- g_param_spec_object
- ("parent-window", "Parent window",
- "Parent window", TRG_TYPE_MAIN_WINDOW,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY |
- G_PARAM_STATIC_NAME |
- G_PARAM_STATIC_NICK |
- G_PARAM_STATIC_BLURB));
-
- g_object_class_install_property(object_class,
- PROP_CLIENT,
- g_param_spec_pointer
- ("trg-client", "TClient",
- "Client",
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY |
- G_PARAM_STATIC_NAME |
- G_PARAM_STATIC_NICK |
- G_PARAM_STATIC_BLURB));
+ g_object_class_install_property(object_class, PROP_TREEVIEW,
+ g_param_spec_object("torrent-tree-view", "TrgTorrentTreeView",
+ "TrgTorrentTreeView", TRG_TYPE_TORRENT_TREE_VIEW,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+ | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK
+ | G_PARAM_STATIC_BLURB));
+
+ g_object_class_install_property(object_class, PROP_TORRENT_MODEL,
+ g_param_spec_object("torrent-model", "TrgTorrentModel",
+ "TrgTorrentModel", TRG_TYPE_TORRENT_MODEL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+ | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK
+ | G_PARAM_STATIC_BLURB));
+
+ g_object_class_install_property(object_class, PROP_PARENT_WINDOW,
+ g_param_spec_object("parent-window", "Parent window",
+ "Parent window", TRG_TYPE_MAIN_WINDOW,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+ | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK
+ | G_PARAM_STATIC_BLURB));
+
+ g_object_class_install_property(object_class, PROP_CLIENT,
+ g_param_spec_pointer("trg-client", "TClient", "Client",
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+ | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK
+ | G_PARAM_STATIC_BLURB));
}
-static void
-trg_torrent_props_dialog_init(TrgTorrentPropsDialog * self G_GNUC_UNUSED)
-{
-
+static void trg_torrent_props_dialog_init(
+ TrgTorrentPropsDialog * self G_GNUC_UNUSED) {
}
TrgTorrentPropsDialog *trg_torrent_props_dialog_new(GtkWindow * window,
- TrgTorrentTreeView *
- treeview,
- TrgTorrentModel *
- torrentModel,
- TrgClient * client)
-{
- return g_object_new(TRG_TYPE_TORRENT_PROPS_DIALOG,
- "torrent-tree-view", treeview,
- "torrent-model", torrentModel,
- "parent-window", window,
- "trg-client", client, NULL);
+ TrgTorrentTreeView * treeview, TrgTorrentModel * torrentModel,
+ TrgClient * client) {
+ return g_object_new(TRG_TYPE_TORRENT_PROPS_DIALOG, "torrent-tree-view",
+ treeview, "torrent-model", torrentModel, "parent-window", window,
+ "trg-client", client, NULL );
}
diff --git a/src/trg-tree-view.c b/src/trg-tree-view.c
index 1fc98a8..3f7a289 100644
--- a/src/trg-tree-view.c
+++ b/src/trg-tree-view.c
@@ -538,7 +538,7 @@ trg_tree_view_add_column_after(TrgTreeView * tv,
gtk_tree_view_column_set_reorderable(column, TRUE);
gtk_tree_view_column_set_sort_column_id(column, desc->model_column);
- if (width >= 0) {
+ if (width > 0) {
gtk_tree_view_column_set_sizing(column,
GTK_TREE_VIEW_COLUMN_FIXED);
gtk_tree_view_column_set_fixed_width(column, width);