source: trunk/beos/TRInfoWindow.cpp @ 95

Last change on this file since 95 was 14, checked in by root, 16 years ago

Update 2005-12-13

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