source: trunk/beos/TRPrefsWindow.cpp @ 4182

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

add explicit BSD licensing and copyright ownership by Bryan Varner, so the Debian packagers will be satisfied about is free software status. (#528)

  • Property svn:keywords set to Date Rev Author Id
File size: 5.6 KB
Line 
1/**
2 * Copyright (C) 2007 Bryan Varner
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining
5 * a copy of this software and associated documentation files (the
6 * "Software"), to deal in the Software without restriction, including
7 * without limitation the rights to use, copy, modify, merge, publish,
8 * distribute, sublicense, and/or sell copies of the Software, and to
9 * permit persons to whom the Software is furnished to do so, subject to
10 * the following conditions:
11 *
12 * The above copyright notice and this permission notice shall be included
13 * in all copies or substantial portions of the Software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22 *
23 * $Id:$
24 */
25
26#include "TRPrefsWindow.h"
27#include "Prefs.h"
28
29#include <Beep.h>
30#include <Box.h>
31#include <Font.h>
32#include <String.h>
33
34#include <stdlib.h>
35#include <stdio.h>
36
37#include "TRApplication.h"
38
39TRPrefsWindow::TRPrefsWindow() : BWindow(BRect(0, 0, 300, 115), "Settings",
40                                         B_TITLED_WINDOW,
41                                         B_ASYNCHRONOUS_CONTROLS | B_NOT_CLOSABLE | B_NOT_ZOOMABLE | B_NOT_RESIZABLE,
42                                         B_CURRENT_WORKSPACE)
43{
44        BRect viewRect = Bounds();
45        viewRect.InsetBy(-1, -1);
46        BBox *box = new BBox(viewRect, NULL, B_FOLLOW_ALL);
47       
48        font_height fh;
49        be_plain_font->GetHeight(&fh);
50       
51        // Text Controls.
52        viewRect.Set(5, 5, viewRect.Width() - 10, fh.leading + fh.ascent + 10);
53        txtFolder = new BTextControl(viewRect, "txtFolder", "Download directory:", "", 
54                                     NULL, B_FOLLOW_LEFT | B_FOLLOW_TOP | B_FOLLOW_RIGHT);
55        box->AddChild(txtFolder);
56       
57        viewRect.Set(viewRect.left, viewRect.bottom + 10,
58                     viewRect.right, viewRect.bottom + fh.leading + fh.ascent + 15);
59        txtPort = new BTextControl(viewRect, "txtPort", "Listen On Port:", "", 
60                                   NULL, B_FOLLOW_LEFT | B_FOLLOW_TOP | B_FOLLOW_RIGHT);
61        box->AddChild(txtPort);
62       
63        viewRect.Set(viewRect.left, viewRect.bottom + 10, 
64                     viewRect.right, viewRect.bottom + fh.leading + fh.ascent + 15);
65        txtUpload = new BTextControl(viewRect, "txtUpload", "Upload Limit (KB/sec):", "",
66                                     NULL, B_FOLLOW_LEFT | B_FOLLOW_TOP | B_FOLLOW_RIGHT);
67        box->AddChild(txtUpload);             
68       
69        // Buttons
70        viewRect.Set(viewRect.left, viewRect.bottom + 20, 
71                     viewRect.left + be_plain_font->StringWidth("Defaults") + 20, 
72                     viewRect.bottom + fh.leading + fh.ascent + 10);
73        btnDefaults = new BButton(viewRect, "btnDefault", "Defaults", new BMessage(TR_PREF_DEFAULTS));
74        box->AddChild(btnDefaults);
75       
76        viewRect.OffsetBy(viewRect.Width() + 10, 0);
77        viewRect.right = viewRect.left + be_plain_font->StringWidth("Cancel") + 20;
78        btnCancel = new BButton(viewRect, "btnCancel", "Cancel", new BMessage(TR_PREF_CANCEL));
79        box->AddChild(btnCancel);
80       
81        viewRect.OffsetBy(viewRect.Width() + 15, 0);
82        viewRect.right = viewRect.left + be_plain_font->StringWidth("Apply") + 20;
83        btnSave = new BButton(viewRect, "btnSave", "Apply", new BMessage(TR_PREF_SAVE));
84        btnSave->MakeDefault(true);
85        box->AddChild(btnSave);
86       
87        Lock();
88        AddChild(box);
89        ResizeTo(Bounds().Width(), viewRect.bottom + btnSave->Bounds().Height());
90       
91        Unlock();
92}
93
94
95TRPrefsWindow::~TRPrefsWindow() {
96}
97
98
99void TRPrefsWindow::MessageReceived(BMessage *msg) {
100        if (msg->what == TR_PREF_SAVE) {
101                if (WritePrefs()) {
102                        Hide();
103                } else {
104                        beep();
105                }
106        } else if (msg->what == TR_PREF_CANCEL) {
107                Hide();
108        } else if (msg->what == TR_PREF_DEFAULTS) {
109                txtFolder->SetText("/boot/home/Downloads");
110                txtPort->SetText("9000");
111                txtUpload->SetText("20");
112        }
113        BWindow::MessageReceived(msg);
114}
115
116
117void TRPrefsWindow::Show() {
118        ReadPrefs();
119        if (Lock()) {
120                txtFolder->MakeFocus(true);
121                Unlock();
122        }
123        BWindow::Show();
124}
125
126
127void TRPrefsWindow::ReadPrefs() {
128        if (Lock()) {
129                Prefs prefs(TRANSMISSION_SETTINGS);
130                BString str("");
131                if (prefs.FindString("download.folder", &str) != B_OK) {
132                        prefs.SetString("download.folder", "/boot/home/Downloads");
133                        str << "/boot/home/Downloads";
134                }
135                txtFolder->SetText(str.String());
136               
137                int32 port;
138                if (prefs.FindInt32("transmission.bindPort", &port) != B_OK) {
139                        prefs.SetInt32("transmission.bindPort", 9000);
140                        port = 9000;
141                }
142                str = "";
143                str << port;
144                txtPort->SetText(str.String());
145               
146                int32 upload;
147                if (prefs.FindInt32("transmission.uploadLimit", &upload) != B_OK) {
148                        prefs.SetInt32("transmission.uploadLimit", 20);
149                        upload = 20;
150                }
151                str = "";
152                str << upload;
153                txtUpload->SetText(str.String());
154
155                Unlock();
156        }
157}
158
159
160bool TRPrefsWindow::WritePrefs() {
161        bool valid = true;
162       
163        int port = atoi(txtPort->Text());
164        if (port <= 0) {
165                valid = false;
166                txtPort->MakeFocus(true);
167        }
168
169        const char* uploadStr = txtUpload->Text();
170        int uploadLimit = atoi(txtUpload->Text());
171       
172        for (uint i = 0; i < strlen(uploadStr) && valid; i++) {
173                if (!(uploadStr[i] >= '0' && uploadStr[i] <= '9')) {
174                        valid = false;
175                        txtUpload->MakeFocus(true);
176                }
177        }
178       
179        if (valid) {
180                Prefs prefs(TRANSMISSION_SETTINGS);
181               
182                prefs.SetInt32("transmission.bindPort", (int32)port);
183                prefs.SetString("download.folder", txtFolder->Text());
184                prefs.SetInt32("transmission.uploadLimit", (int32)uploadLimit);
185               
186                be_app_messenger.SendMessage(new BMessage(TR_RELOAD_SETTINGS));
187        }
188       
189        return valid;
190}
Note: See TracBrowser for help on using the repository browser.