source: trunk/beos/TRInfoWindow.cpp @ 2549

Last change on this file since 2549 was 2549, checked in by charles, 15 years ago

Get BeOS client building on Zeta 1.21 thanks to patches by Fredrik Modéen

  • Property svn:keywords set to Date Rev Author Id
File size: 2.7 KB
Line 
1// $Id: TRInfoWindow.cpp 2549 2007-07-30 13:59:23Z charles $
2
3#include "TRInfoWindow.h"
4
5#include <Box.h>
6#include <String.h>
7#include <TextView.h>
8#include <ScrollView.h>
9
10#include <malloc.h>
11#include <stdio.h>
12
13
14TRInfoWindow::TRInfoWindow(const tr_stat_t *status, const tr_info_t *info, const char *folder) : BWindow(BRect(0, 0, 250, 175), "Info", 
15                          B_FLOATING_WINDOW, B_ASYNCHRONOUS_CONTROLS | /*B_NOT_RESIZABLE*/  B_NOT_ZOOMABLE,
16                          B_CURRENT_WORKSPACE)
17{
18        BRect viewRect = Bounds();
19       
20        // Single header, Font Size 14.
21        BFont headerFont(be_bold_font);
22        headerFont.SetSize(14.0f);
23        font_height fh;
24        headerFont.GetHeight(&fh);
25        if (headerFont.StringWidth(info->name) > Bounds().Width() - 10) {
26                ResizeBy(headerFont.StringWidth(info->name) - Bounds().Width() + 10, 0);
27        }
28       
29        viewRect = Bounds();
30        viewRect.bottom = fh.ascent + fh.descent;
31        BStringView *strView = new BStringView(viewRect, "header", info->name, B_FOLLOW_LEFT_RIGHT | B_FOLLOW_TOP);
32        strView->SetFont(&headerFont);
33        strView->SetAlignment(B_ALIGN_CENTER);
34       
35        viewRect.left = 5;
36        viewRect.top = 10;
37        viewRect.bottom = Bounds().bottom - 5;
38        BTextView *txtView = new BTextView(viewRect, "infoText", viewRect, B_FOLLOW_LEFT | B_FOLLOW_TOP);
39        txtView->MakeEditable(false);
40       
41        BString strTracker(status->tracker->address);
42        strTracker << ":" << status->tracker->port;
43
44        BString strPieceSize("");
45        StringForFileSize(info->pieceSize, &strPieceSize);
46
47        BString strTotalSize("");
48        StringForFileSize(info->totalSize, &strTotalSize);
49
50        BString strDownloaded("");
51        StringForFileSize(status->downloaded, &strDownloaded);
52
53        BString strUploaded("");
54        StringForFileSize(status->uploaded, &strUploaded);
55
56        BString infoStr("");
57        infoStr << "Tracker: " << strTracker << "\n"
58                << "Announce: " << status->tracker->announce << "\n"
59                << "Piece Size: " << strPieceSize << "\n"
60                << "Pieces: " << info->pieceCount << "\n"
61                << "Total Size: " << strTotalSize << "\n"
62                << "\n"
63                << "Folder: " << folder << "\n"
64                << "Downloaded: " << strDownloaded << "\n"
65                << "Uploaded: " << strUploaded << "\n";
66        txtView->SetText(infoStr.String());
67       
68        Lock();
69        AddChild(strView);
70        AddChild(txtView);
71        Unlock();
72}
73
74TRInfoWindow::~TRInfoWindow() {
75       
76}
77
78void TRInfoWindow::FrameResized(float, float) {
79}
80
81void TRInfoWindow::StringForFileSize(uint64_t size, BString *str) {
82        char *s = (char*)calloc(512, sizeof(char));
83        if (size < 1024) {
84                sprintf(s, "%lld bytes", size);
85        } else if (size < 1048576) {
86                sprintf(s, "%lld.%lld KB", size / 1024, (size % 1024 ) / 103);
87        } else if (size < 1073741824 ) {
88                sprintf(s, "%lld.%lld MB", size / 1048576, (size % 1048576) / 104858);
89        } else {
90                sprintf(s, "%lld.%lld GB", size / 1073741824, (size % 1073741824) / 107374183);
91        }
92       
93        str->SetTo(s);
94        free(s);
95}
Note: See TracBrowser for help on using the repository browser.