Use real Gtk TreeView progress bars, finally!
[doldaconnect.git] / clients / gtk2 / dolcon.c
index be8b763..c96498f 100644 (file)
@@ -47,7 +47,6 @@
 #endif
 #include "dolcon.h"
 #include "hublist.h"
-#include "progressbar.h"
 
 #define TRHISTSIZE 10
 
@@ -279,26 +278,40 @@ char *bytes2si(long long bytes)
 {
     int i;
     double b;
-    char *sd;
     static char ret[64];
+    static char pfx[] = {'k', 'M', 'G', 'T'};
     
     b = bytes;
-    for(i = 0; (b >= 1024) && (i < 4); i++)
+    for(i = 0; (b >= 1024) && (i < sizeof(pfx)); i++)
        b /= 1024;
     if(i == 0)
-       sd = "B";
-    else if(i == 1)
-       sd = "kiB";
-    else if(i == 2)
-       sd = "MiB";
-    else if(i == 3)
-       sd = "GiB";
+       snprintf(ret, 64, "%.1f B", b);
     else
-       sd = "TiB";
-    snprintf(ret, 64, "%.1f %s", b, sd);
+       snprintf(ret, 64, "%.1f %ciB", b, pfx[i - 1]);
     return(ret);
 }
 
+void progressfunc(GtkTreeViewColumn *col, GtkCellRenderer *rend, GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
+{
+    int totalc, curc;
+    int total, cur;
+    char buf[64];
+    
+    totalc = (GPOINTER_TO_INT(data) & 0xff00) >> 8;
+    curc = GPOINTER_TO_INT(data) & 0xff;
+    gtk_tree_model_get(model, iter, totalc, &total, curc, &cur, -1);
+    if(total < 1)
+       g_object_set(rend, "value", GINT_TO_POINTER(0), NULL);
+    else
+       g_object_set(rend, "value", GINT_TO_POINTER((int)(((double)cur / (double)total) * 100)), NULL);
+    if(cur < 0) {
+       g_object_set(rend, "text", "", NULL);
+    } else {
+       snprintf(buf, 64, "%'i", cur);
+       g_object_set(rend, "text", buf, NULL);
+    }
+}
+
 void percentagefunc(GtkTreeViewColumn *col, GtkCellRenderer *rend, GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
 {
     int colnum;
@@ -2200,8 +2213,11 @@ void initchattags(void)
     gtk_text_tag_table_add(chattags, tag);
 }
 
+#include "../dolda-icon.xpm"
+
 int main(int argc, char **argv)
 {
+    int c, connlocal;
     GtkWidget *wnd;
     PangoFontDescription *monospacefont;
     GtkTreeModel *sortmodel;
@@ -2211,6 +2227,26 @@ int main(int argc, char **argv)
     bindtextdomain(PACKAGE, LOCALEDIR);
     textdomain(PACKAGE);
     gtk_init(&argc, &argv);
+    connlocal = 0;
+    while((c = getopt(argc, argv, "lhV")) != -1) {
+       switch(c) {
+       case 'l':
+           connlocal = 1;
+           break;
+       case 'h':
+           printf("usage: dolcon [-hlV]\n");
+           printf("\t-h\tDisplay this help message\n");
+           printf("\t-l\tConnect to the locally running daemon\n");
+           printf("\t-V\tDisplay version info and exit\n");
+           exit(0);
+       case 'V':
+           printf("%s", RELEASEINFO);
+           exit(0);
+       default:
+           fprintf(stderr, "usage: dolcon [-hlV]\n");
+           exit(1);
+       }
+    }
     dc_init();
     signal(SIGCHLD, SIG_IGN);
     pubhubaddr = sstrdup("http://www.hublist.org/PublicHubList.xml.bz2");
@@ -2221,6 +2257,7 @@ int main(int argc, char **argv)
        exit(1);
     }
     connectas = sstrdup(pwent->pw_name);
+    gtk_window_set_default_icon(gdk_pixbuf_new_from_xpm_data((const char **)dolda_icon_xpm));
     wnd = create_main_wnd();
     create_reslist_wnd();
     gtk_window_resize(GTK_WINDOW(reslist_wnd), 600, 400);
@@ -2274,7 +2311,9 @@ int main(int argc, char **argv)
     readconfigfile();
     updatesbar(_("Disconnected"));
     gtk_widget_show(wnd);
-    if(autoconn)
+    if(connlocal)
+       dcconnect(dc_srv_local);
+    else if(autoconn)
        dcconnect(dcserver);
     g_timeout_add(500, srchstatupdatecb, NULL);
     g_timeout_add(5000, ksupdatecb, NULL);