source: trunk/beos/TRPrefsWindow.cpp @ 14

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

Update 2005-12-13

File size: 4.5 KB
Line 
1#include "TRPrefsWindow.h"
2#include "Prefs.h"
3
4#include <Beep.h>
5#include <Box.h>
6#include <Font.h>
7#include <String.h>
8
9#include <stdlib.h>
10#include <stdio.h>
11
12#include "TRApplication.h"
13
14TRPrefsWindow::TRPrefsWindow() : BWindow(BRect(0, 0, 300, 115), "Settings",
15                                         B_TITLED_WINDOW,
16                                         B_ASYNCHRONOUS_CONTROLS | B_NOT_CLOSABLE | B_NOT_ZOOMABLE | B_NOT_RESIZABLE,
17                                         B_CURRENT_WORKSPACE)
18{
19        BRect viewRect = Bounds();
20        viewRect.InsetBy(-1, -1);
21        BBox *box = new BBox(viewRect, NULL, B_FOLLOW_ALL);
22       
23        font_height fh;
24        be_plain_font->GetHeight(&fh);
25       
26        // Text Controls.
27        viewRect.Set(5, 5, viewRect.Width() - 10, fh.leading + fh.ascent + 10);
28        txtFolder = new BTextControl(viewRect, "txtFolder", "Download directory:", "", 
29                                     NULL, B_FOLLOW_LEFT | B_FOLLOW_TOP | B_FOLLOW_RIGHT);
30        box->AddChild(txtFolder);
31       
32        viewRect.Set(viewRect.left, viewRect.bottom + 10,
33                     viewRect.right, viewRect.bottom + fh.leading + fh.ascent + 15);
34        txtPort = new BTextControl(viewRect, "txtPort", "Listen On Port:", "", 
35                                   NULL, B_FOLLOW_LEFT | B_FOLLOW_TOP | B_FOLLOW_RIGHT);
36        box->AddChild(txtPort);
37       
38        viewRect.Set(viewRect.left, viewRect.bottom + 10, 
39                     viewRect.right, viewRect.bottom + fh.leading + fh.ascent + 15);
40        txtUpload = new BTextControl(viewRect, "txtUpload", "Upload Limit (KB/sec):", "",
41                                     NULL, B_FOLLOW_LEFT | B_FOLLOW_TOP | B_FOLLOW_RIGHT);
42        box->AddChild(txtUpload);             
43       
44        // Buttons
45        viewRect.Set(viewRect.left, viewRect.bottom + 20, 
46                     viewRect.left + be_plain_font->StringWidth("Defaults") + 20, 
47                     viewRect.bottom + fh.leading + fh.ascent + 10);
48        btnDefaults = new BButton(viewRect, "btnDefault", "Defaults", new BMessage(TR_PREF_DEFAULTS));
49        box->AddChild(btnDefaults);
50       
51        viewRect.OffsetBy(viewRect.Width() + 10, 0);
52        viewRect.right = viewRect.left + be_plain_font->StringWidth("Cancel") + 20;
53        btnCancel = new BButton(viewRect, "btnCancel", "Cancel", new BMessage(TR_PREF_CANCEL));
54        box->AddChild(btnCancel);
55       
56        viewRect.OffsetBy(viewRect.Width() + 15, 0);
57        viewRect.right = viewRect.left + be_plain_font->StringWidth("Apply") + 20;
58        btnSave = new BButton(viewRect, "btnSave", "Apply", new BMessage(TR_PREF_SAVE));
59        btnSave->MakeDefault(true);
60        box->AddChild(btnSave);
61       
62        Lock();
63        AddChild(box);
64        ResizeTo(Bounds().Width(), viewRect.bottom + btnSave->Bounds().Height());
65       
66        Unlock();
67}
68
69
70TRPrefsWindow::~TRPrefsWindow() {
71}
72
73
74void TRPrefsWindow::MessageReceived(BMessage *msg) {
75        if (msg->what == TR_PREF_SAVE) {
76                if (WritePrefs()) {
77                        Hide();
78                } else {
79                        beep();
80                }
81        } else if (msg->what == TR_PREF_CANCEL) {
82                Hide();
83        } else if (msg->what == TR_PREF_DEFAULTS) {
84                txtFolder->SetText("/boot/home/Downloads");
85                txtPort->SetText("9000");
86                txtUpload->SetText("20");
87        }
88        BWindow::MessageReceived(msg);
89}
90
91
92void TRPrefsWindow::Show() {
93        ReadPrefs();
94        if (Lock()) {
95                txtFolder->MakeFocus(true);
96                Unlock();
97        }
98        BWindow::Show();
99}
100
101
102void TRPrefsWindow::ReadPrefs() {
103        if (Lock()) {
104                Prefs prefs(TRANSMISSION_SETTINGS);
105                BString str("");
106                if (prefs.FindString("download.folder", &str) != B_OK) {
107                        prefs.SetString("download.folder", "/boot/home/Downloads");
108                        str << "/boot/home/Downloads";
109                }
110                txtFolder->SetText(str.String());
111               
112                int32 port;
113                if (prefs.FindInt32("transmission.bindPort", &port) != B_OK) {
114                        prefs.SetInt32("transmission.bindPort", 9000);
115                        port = 9000;
116                }
117                str = "";
118                str << port;
119                txtPort->SetText(str.String());
120               
121                int32 upload;
122                if (prefs.FindInt32("transmission.uploadLimit", &upload) != B_OK) {
123                        prefs.SetInt32("transmission.uploadLimit", 20);
124                        upload = 20;
125                }
126                str = "";
127                str << upload;
128                txtUpload->SetText(str.String());
129
130                Unlock();
131        }
132}
133
134
135bool TRPrefsWindow::WritePrefs() {
136        bool valid = true;
137       
138        int port = atoi(txtPort->Text());
139        if (port <= 0) {
140                valid = false;
141                txtPort->MakeFocus(true);
142        }
143
144        const char* uploadStr = txtUpload->Text();
145        int uploadLimit = atoi(txtUpload->Text());
146       
147        for (uint i = 0; i < strlen(uploadStr) && valid; i++) {
148                if (!(uploadStr[i] >= '0' && uploadStr[i] <= '9')) {
149                        valid = false;
150                        txtUpload->MakeFocus(true);
151                }
152        }
153       
154        if (valid) {
155                Prefs prefs(TRANSMISSION_SETTINGS);
156               
157                prefs.SetInt32("transmission.bindPort", (int32)port);
158                prefs.SetString("download.folder", txtFolder->Text());
159                prefs.SetInt32("transmission.uploadLimit", (int32)uploadLimit);
160               
161                be_app_messenger.SendMessage(new BMessage(TR_RELOAD_SETTINGS));
162        }
163       
164        return valid;
165}
Note: See TracBrowser for help on using the repository browser.