📄 litewindow.cpp
字号:
_shareLabel = gtk_label_new("share rate : "); gtk_label_set_markup(GTK_LABEL(_shareLabel), _("<span><b>share rate : </b></span>")); gtk_label_set_justify(GTK_LABEL(_shareLabel), GTK_JUSTIFY_LEFT); hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox), _shareLabel, FALSE, TRUE, 0); gtk_table_attach_defaults(GTK_TABLE(table), hbox, 0, 1, 1, 2); _shareLabel = gtk_label_new("0.00"); gtk_label_set_justify(GTK_LABEL(_shareLabel), GTK_JUSTIFY_LEFT); hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox), _shareLabel, FALSE, TRUE, 0); gtk_table_attach_defaults(GTK_TABLE(table), hbox, 1, 2, 1, 2); //About/Pause/Exit Button GtkWidget* bbox = gtk_hbutton_box_new(); gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_SPREAD); gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, TRUE, 15); _aboutButton = gtk_button_new_from_stock(GTK_STOCK_ABOUT); gtk_container_add(GTK_CONTAINER(bbox), _aboutButton); g_signal_connect(G_OBJECT(_aboutButton), "clicked", G_CALLBACK(about_button_clicked_event), this); // _pauseButton = gtk_button_new_from_stock(GTK_STOCK_MEDIA_PAUSE);// gtk_container_add(GTK_CONTAINER(bbox), _pauseButton); _exitButton = gtk_button_new_from_stock(GTK_STOCK_QUIT); gtk_container_add(GTK_CONTAINER(bbox), _exitButton); g_signal_connect(G_OBJECT(_exitButton), "clicked", G_CALLBACK(exit_button_clicked_event), this); //Options hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 5); GtkWidget* label = gtk_label_new("KB/s"); gtk_box_pack_end(GTK_BOX(hbox), label, FALSE, TRUE, 0); _maxUploadSpin = gtk_spin_button_new_with_range(0, 50*1024, 1); if(_task->getRateMeasure()->getUploadSpeed() == IRateMeasure::NoLimitedSpeed) { gtk_spin_button_set_value(GTK_SPIN_BUTTON(_maxUploadSpin), 0); } else { gtk_spin_button_set_value(GTK_SPIN_BUTTON(_maxUploadSpin), _task->getRateMeasure()->getUploadSpeed()/1024); } gtk_box_pack_end(GTK_BOX(hbox), _maxUploadSpin, FALSE, TRUE, 3); label = gtk_label_new(_("upload cap")); gtk_box_pack_end(GTK_BOX(hbox), label, FALSE, TRUE, 3); label = gtk_label_new("KB/s"); gtk_box_pack_end(GTK_BOX(hbox), label, FALSE, TRUE, 3); _maxDownloadSpin = gtk_spin_button_new_with_range(0, 50*1024, 1); if(_task->getRateMeasure()->getDownloadSpeed() == IRateMeasure::NoLimitedSpeed) { gtk_spin_button_set_value(GTK_SPIN_BUTTON(_maxDownloadSpin), 0); } else { gtk_spin_button_set_value(GTK_SPIN_BUTTON(_maxDownloadSpin), _task->getRateMeasure()->getDownloadSpeed()/1024); } gtk_box_pack_end(GTK_BOX(hbox), _maxDownloadSpin, FALSE, TRUE, 3); label = gtk_label_new(_("download cap")); gtk_box_pack_end(GTK_BOX(hbox), label, FALSE, TRUE, 3); label = gtk_label_new("MB"); gtk_box_pack_end(GTK_BOX(hbox), label, FALSE, TRUE, 3); _cacheSizeSpin = gtk_spin_button_new_with_range(2, 1024, 1); gtk_spin_button_set_value(GTK_SPIN_BUTTON(_cacheSizeSpin), _task->getCacheSize()/(1024*1024)); gtk_box_pack_end(GTK_BOX(hbox), _cacheSizeSpin, FALSE, TRUE, 3); label = gtk_label_new(_("cache")); gtk_box_pack_end(GTK_BOX(hbox), label, FALSE, TRUE, 3); }void CLiteWindow::run(IBTTask* task){ _task = task; _startTick = GetTickCount(); createWindow(); gtk_timeout_add(1000, (GtkFunction)timerFunc, this); gtk_window_set_default_size(GTK_WINDOW(_window), 450, 250); gtk_window_set_position(GTK_WINDOW(_window), GTK_WIN_POS_CENTER); gtk_widget_show_all(_window); gtk_main(); }void CLiteWindow::updateGUI(){ //ProgressBar float p = _task->getStorage()->getFinishedPercent(); char buf[128]; sprintf(buf, "%01.2f%%", p*100); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(_progressBar), buf); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(_progressBar), gdouble(p)); //Time std::string tempStr = second2Str( (GetTickCount() - _startTick)/1000); if(!_task->getStorage()->finished()) { tempStr += " / "; if(_task->getDownloadSpeed() == 0) { tempStr += "∞"; } else { tempStr += second2Str(_task->getStorage()->getLeftCount()/_task->getDownloadSpeed()); } } gtk_label_set_text(GTK_LABEL(_timeLabel), tempStr.c_str()); //Downloaded tempStr = byteCount2Str(_task->getDownlaodCount()); gtk_label_set_text(GTK_LABEL(_downloadedLabel), tempStr.c_str()); //Uploaded tempStr = byteCount2Str(_task->getUploadCount()); gtk_label_set_text(GTK_LABEL(_uploadedLabel), tempStr.c_str()); //Peers sprintf(buf, "%u/%u/%u", _task->getPeerManager()->getConnectedPeerCount(), _task->getTrackerManager()->getSeedCount(), _task->getTrackerManager()->getPeerCount()); gtk_label_set_text(GTK_LABEL(_peersLabel), buf); //ShareRate if(_task->getDownlaodCount() != 0) { float shareRate = ((float)(_task->getUploadCount()))/(_task->getDownlaodCount()); sprintf(buf, "%01.2f", shareRate); } else if(_task->getUploadCount() != 0) { sprintf(buf, "%s", "∞"); } else { sprintf(buf, "%s", "0.00"); } gtk_label_set_text(GTK_LABEL(_shareLabel), buf); //DownloadSpeed tempStr = byteCount2Str(_task->getDownloadSpeed()) + "/s"; gtk_label_set_text(GTK_LABEL(_downloadRateLabel), tempStr.c_str()); //UploadSpeed tempStr = byteCount2Str(_task->getUploadSpeed()) + "/s"; gtk_label_set_text(GTK_LABEL(_uploadRateLabel), tempStr.c_str()); //MaxUpload int maxUpload = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(_maxUploadSpin)); if(maxUpload == 0) { _task->getRateMeasure()->setUploadSpeed(IRateMeasure::NoLimitedSpeed); } else { _task->getRateMeasure()->setUploadSpeed(maxUpload*1024); } //MaxDownload int maxDownload = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(_maxDownloadSpin)); if(maxDownload == 0) { _task->getRateMeasure()->setDownloadSpeed(IRateMeasure::NoLimitedSpeed); } else { _task->getRateMeasure()->setDownloadSpeed(maxDownload*1024); } //CacheSize int cacheSize = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(_cacheSizeSpin)); _task->setCacheSize(cacheSize*1024*1024);}gboolean CLiteWindow::timerFunc(gpointer data){ CLiteWindow* window = (CLiteWindow*)data; window->updateGUI(); return TRUE;}std::string CLiteWindow::getUserInputTorrentFilePath(){ GtkWidget *dialog; GtkFileFilter *filter; char *filename = ""; dialog = gtk_file_chooser_dialog_new (_("Please select a torrent file"), NULL, GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); filter = gtk_file_filter_new (); gtk_file_filter_set_name (filter, _("Torrent files")); gtk_file_filter_add_mime_type (filter, "application/x-bittorrent"); gtk_file_filter_add_pattern (filter, "*.torrent"); gtk_file_filter_add_pattern (filter, "*.tor"); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER(dialog), filter); filter = gtk_file_filter_new (); gtk_file_filter_set_name (filter, _("All files")); gtk_file_filter_add_pattern (filter, "*"); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER(dialog), filter); if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) { filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); } gtk_widget_destroy (dialog); return filename;}std::string CLiteWindow::getUserInputDestPath(const char* fileName){ GtkWidget *dialog; char *destDir = ""; dialog = gtk_file_chooser_dialog_new (_("Please select a directory to save file"), NULL, GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_FILE_CHOOSER_ACTION_SAVE, NULL); gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER (dialog), fileName); if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_FILE_CHOOSER_ACTION_SAVE) { destDir = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (dialog)); } gtk_widget_destroy (dialog); std::string result = destDir; if(result[result.size() -1] != '/') { result.append("/"); } return result;}void CLiteWindow::showMessage(const char* msg){ GtkWidget* dialog = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, msg); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -