item___::item___(const Glib::ustring& filename,int pix_limit_width,int pix_limit_height,bool pix_limit_aspect) { filename_=filename; pix_limit_width_=pix_limit_width; pix_limit_height_=pix_limit_height; pix_limit_aspect_=pix_limit_aspect; is_stock_=(filename[0]=='-'); if(is_stock_) { GdkPixbuf *p=obtain_pixbuf_from_stock(filename.c_str()+1); if(p) { if(pix_limit_width>0&&pix_limit_height>0) p=gdk_pixbuf_scale_simple(p,pix_limit_width,pix_limit_height,GDK_INTERP_BILINEAR); pb_ = Glib::wrap(p); } } else from_file__(); tm_=is_stock_?0:tm__(filename); }
/** * 显示信息/文件接收UI(是否显示信息或文件接收). * */ void DialogPeer::ShowInfoEnclosure(DialogPeer *dlgpr) { PalInfo *palinfor; GtkTreeModel *mdltorcv,*mdlrcvd,*mdltmp; GSList *ecslist; GtkWidget *widget,*hpaned,*pbar; float progress; GdkPixbuf *pixbuf, *rpixbuf, *dpixbuf; FileInfo *file; gchar *filesize,*path; char progresstip[MAX_BUFLEN]; GtkTreeIter iter; gint receiving;//标记是不是窗口在正传送文件时被关闭,又打开的。 receiving = 0; /* 获取文件图标 */ rpixbuf = obtain_pixbuf_from_stock(GTK_STOCK_FILE); dpixbuf = obtain_pixbuf_from_stock(GTK_STOCK_DIRECTORY); //设置界面显示 palinfor = (PalInfo *)(dlgpr->grpinf->member->data); mdltorcv = (GtkTreeModel*)g_datalist_get_data(&(dlgpr->mdlset), "file-to-receive-model"); gtk_list_store_clear(GTK_LIST_STORE(mdltorcv)); mdlrcvd = (GtkTreeModel*)g_datalist_get_data(&(dlgpr->mdlset), "file-received-model"); gtk_list_store_clear(GTK_LIST_STORE(mdlrcvd)); ecslist = cthrd.GetPalEnclosure(palinfor); if(ecslist) { //只要有该好友的接收文件信息(不分待接收和未接收),就显示 hpaned = GTK_WIDGET(g_datalist_get_data(&(dlgpr->widset), "main-paned")); widget = GTK_WIDGET(g_datalist_get_data(&(dlgpr->widset), "info-frame")); gtk_widget_hide(widget); widget = GTK_WIDGET(g_datalist_get_data(&(dlgpr->widset),"file-enclosure-frame-widget")); gtk_paned_pack2(GTK_PANED(hpaned), widget, FALSE, TRUE); widget = GTK_WIDGET(g_datalist_get_data(&(dlgpr->widset),"file-receive-paned-widget")); gtk_widget_show(widget); //将从中心节点取到的数据向附件接收列表填充 dlgpr->torcvsize = 0; while (ecslist) { file = (FileInfo *)ecslist->data; filesize = numeric_to_size(file->filesize); switch (GET_MODE(file->fileattr)) { case IPMSG_FILE_REGULAR: pixbuf = rpixbuf; break; case IPMSG_FILE_DIR: pixbuf = dpixbuf; break; default: pixbuf = NULL; break; } if(file->finishedsize < file->filesize) { file->filepath = ipmsg_get_filename_me(file->filepath,&path); if(file->finishedsize > 0) receiving += 1; mdltmp = mdltorcv; dlgpr->torcvsize += file->filesize; } else mdltmp = mdlrcvd; gtk_list_store_append(GTK_LIST_STORE(mdltmp), &iter); gtk_list_store_set(GTK_LIST_STORE(mdltmp), &iter, 0, pixbuf, 1, file->fileown->name, 2, file->filepath, 3, filesize, 5,file, -1); g_free(filesize); ecslist = g_slist_next(ecslist); } g_slist_free(ecslist); //设置进度条,如果接收完成重新载入待接收和已接收列表 if(dlgpr->torcvsize == 0) { progress = 0; snprintf(progresstip, MAX_BUFLEN,_("Receiving Progress.")); } else { if(dlgpr->rcvdsize == 0) snprintf(progresstip, MAX_BUFLEN,_("%s to Receive."), numeric_to_size(dlgpr->torcvsize)); else { progress = percent(dlgpr->rcvdsize,dlgpr->torcvsize)/100; snprintf(progresstip, MAX_BUFLEN, _("%s Of %s Received."), numeric_to_size(dlgpr->rcvdsize),numeric_to_size(dlgpr->torcvsize)); } } if(progress == 1.0){ g_source_remove(dlgpr->timerrcv); snprintf(progresstip, MAX_BUFLEN,_("Mission Completed!")); } pbar = GTK_WIDGET(g_datalist_get_data(&(dlgpr->widset), "file-receive-progress-bar-widget")); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(pbar),progress); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(pbar),progresstip); } else { widget = GTK_WIDGET(g_datalist_get_data(&(dlgpr->widset), "file-receive-paned-widget")); gtk_widget_hide(widget); } /* 释放文件图标 */ if (rpixbuf) g_object_unref(rpixbuf); if (dpixbuf) g_object_unref(dpixbuf); if(receiving > 0) dlgpr->ReceiveFile(dlgpr); }