Convert Poorman to use the Layout API.

Also includes many style fixes.

This patch was done by tokyo6pm, and then updated by mks after changes
to Poorman broke the patch.

ticket: #3787
This commit is contained in:
Alex Wilson 2012-07-14 15:35:45 +12:00
parent 2d4288086f
commit a1ae802279
14 changed files with 654 additions and 802 deletions

View File

@ -7,6 +7,7 @@
#include <Box.h>
#include <Catalog.h>
#include <GroupLayoutBuilder.h>
#include <Locale.h>
#include "constants.h"
@ -19,46 +20,41 @@
#define B_TRANSLATION_CONTEXT "PoorMan"
PoorManAdvancedView::PoorManAdvancedView(BRect rect, const char *name)
: BView(rect, name, B_FOLLOW_ALL, B_WILL_DRAW)
PoorManAdvancedView::PoorManAdvancedView(const char* name)
:
BView(name, B_WILL_DRAW, NULL)
{
PoorManWindow * win;
win = ((PoorManApplication *)be_app)->GetPoorManWindow();
PoorManWindow* win;
win = ((PoorManApplication*)be_app)->GetPoorManWindow();
SetViewColor(BACKGROUND_COLOR);
SetLayout(new BGroupLayout(B_VERTICAL));
// Console Logging BBox
BRect maxRect;
maxRect = rect;
maxRect.top -= 5.0;
maxRect.left -= 5.0;
maxRect.right -= 7.0;
maxRect.bottom -= 118.0;
BBox * connectionOptions = new BBox(maxRect, B_TRANSLATE("Connections"));
BBox* connectionOptions = new BBox(B_TRANSLATE("Connections"));
connectionOptions->SetLabel(STR_BBX_CONNECTION);
AddChild(connectionOptions);
BRect sliderRect;
sliderRect = connectionOptions->Bounds();
sliderRect.InsetBy(10.0f, 10.0f);
sliderRect.top += 10;
sliderRect.bottom = sliderRect.top + 50.0;
maxConnections = new StatusSlider(sliderRect, "Max Slider", STR_SLD_LABEL,
STR_SLD_STATUS_LABEL, new BMessage(MSG_PREF_ADV_SLD_MAX_CONNECTION), 1, 200);
fMaxConnections = new StatusSlider("Max Slider", STR_SLD_LABEL,
STR_SLD_STATUS_LABEL,
new BMessage(MSG_PREF_ADV_SLD_MAX_CONNECTION), 1, 200);
// labels below the slider 1 and 200
maxConnections->SetLimitLabels("1", "200");
fMaxConnections->SetLimitLabels("1", "200");
SetMaxSimutaneousConnections(win->MaxConnections());
connectionOptions->AddChild(maxConnections);
connectionOptions->AddChild(BGroupLayoutBuilder(B_VERTICAL, 10)
.Add(fMaxConnections)
.SetInsets(5, 5, 5, 5));
AddChild(BGroupLayoutBuilder(B_VERTICAL, 10)
.Add(connectionOptions)
.AddGlue()
.SetInsets(5, 5, 5, 5));
}
void
PoorManAdvancedView::SetMaxSimutaneousConnections(int32 num)
{
if (num <= 0 || num > 200)
maxConnections->SetValue(32);
fMaxConnections->SetValue(32);
else
maxConnections->SetValue(num);
fMaxConnections->SetValue(num);
}

View File

@ -13,16 +13,17 @@
#include "StatusSlider.h"
class PoorManAdvancedView: public BView
{
class PoorManAdvancedView: public BView {
public:
PoorManAdvancedView(BRect, const char *name);
int32 MaxSimultaneousConnections() { return maxConnections->Value(); }
void SetMaxSimutaneousConnections(int32 num);
PoorManAdvancedView(const char *name);
int32 MaxSimultaneousConnections()
{ return fMaxConnections->Value(); }
void SetMaxSimutaneousConnections(int32 num);
private:
// Advanced Tab
// Advanced Tab
// Connections Options
StatusSlider * maxConnections;
StatusSlider* fMaxConnections;
};
#endif

View File

@ -7,6 +7,7 @@
#include <Box.h>
#include <Catalog.h>
#include <GroupLayoutBuilder.h>
#include <Locale.h>
#include "constants.h"
@ -19,80 +20,61 @@
#define B_TRANSLATION_CONTEXT "PoorMan"
PoorManLoggingView::PoorManLoggingView(BRect rect, const char *name)
: BView(rect, name, B_FOLLOW_ALL, B_WILL_DRAW)
PoorManLoggingView::PoorManLoggingView(const char* name)
:
BView(name, B_WILL_DRAW, NULL)
{
PoorManWindow * win;
win = ((PoorManApplication *)be_app)->GetPoorManWindow();
PoorManWindow* win;
win = ((PoorManApplication*)be_app)->GetPoorManWindow();
SetViewColor(BACKGROUND_COLOR);
SetLayout(new BGroupLayout(B_VERTICAL));
// Console Logging BBox
BRect consoleLoggingRect;
consoleLoggingRect = rect;
consoleLoggingRect.top -= 5.0;
consoleLoggingRect.left -= 5.0;
consoleLoggingRect.right -= 7.0;
consoleLoggingRect.bottom -= 118.0;
BBox * consoleLogging = new BBox(consoleLoggingRect,
B_TRANSLATE("Console Logging"));
BBox* consoleLogging = new BBox(B_TRANSLATE("Console Logging"));
consoleLogging->SetLabel(STR_BBX_CONSOLE_LOGGING);
AddChild(consoleLogging);
// File Logging BBox
BRect fileLoggingRect;
fileLoggingRect = consoleLoggingRect;
fileLoggingRect.top = consoleLoggingRect.bottom + 10.0;
fileLoggingRect.bottom = fileLoggingRect.top + 100.0;
BBox * fileLogging = new BBox(fileLoggingRect,
B_TRANSLATE("File Logging"));
BBox* fileLogging = new BBox(B_TRANSLATE("File Logging"));
fileLogging->SetLabel(STR_BBX_FILE_LOGGING);
AddChild(fileLogging);
float left = 10.0;
float top = 20.0;
float box_size = 13.0;
BRect tempRect(left, top, consoleLoggingRect.Width() - 5.0, top + box_size);
// Console Logging
logConsole = new BCheckBox(tempRect, B_TRANSLATE("Log To Console"),
fLogConsole = new BCheckBox(B_TRANSLATE("Log To Console"),
STR_CBX_LOG_CONSOLE, new BMessage(MSG_PREF_LOG_CBX_CONSOLE));
// set the checkbox to the value the program has
SetLogConsoleValue(win->LogConsoleFlag());
consoleLogging->AddChild(logConsole);
// File Logging
logFile = new BCheckBox(tempRect, B_TRANSLATE("Log To File"),
STR_CBX_LOG_FILE, new BMessage(MSG_PREF_LOG_CBX_FILE));
fLogFile = new BCheckBox(B_TRANSLATE("Log To File"), STR_CBX_LOG_FILE,
new BMessage(MSG_PREF_LOG_CBX_FILE));
// set the checkbox to the value the program has
SetLogFileValue(win->LogFileFlag());
fileLogging->AddChild(logFile);
// File Name
tempRect.top = tempRect.bottom + 10.0;
tempRect.bottom = tempRect.top + box_size;
tempRect.right -= 5.0;
logFileName = new BTextControl(tempRect, B_TRANSLATE("File Name"),
fLogFileName = new BTextControl(B_TRANSLATE("File Name"),
STR_TXT_LOG_FILE_NAME, NULL, NULL);
logFileName->SetAlignment(B_ALIGN_RIGHT, B_ALIGN_LEFT);
logFileName->SetDivider(fileLogging->StringWidth(STR_TXT_LOG_FILE_NAME) + 8.0f);
SetLogFileName(win->LogPath());
fileLogging->AddChild(logFileName);
// Create Log File
BRect createLogFileRect;
createLogFileRect.top = tempRect.bottom + 13.0;
createLogFileRect.right = tempRect.right + 2.0;
createLogFileRect.left = createLogFileRect.right
- fileLogging->StringWidth(B_TRANSLATE("Create Log File")) - 24.0;
createLogFileRect.bottom = createLogFileRect.top + 19.0;
createLogFile = new BButton(createLogFileRect, B_TRANSLATE("Create Log File"),
fCreateLogFile = new BButton(B_TRANSLATE("Create Log File"),
STR_BTN_CREATE_LOG_FILE, new BMessage(MSG_PREF_LOG_BTN_CREATE_FILE));
fileLogging->AddChild(createLogFile);
consoleLogging->AddChild(BGroupLayoutBuilder(B_VERTICAL, 10)
.Add(BGroupLayoutBuilder(B_HORIZONTAL, 10)
.Add(fLogConsole)
.AddGlue())
.SetInsets(5, 5, 5, 5));
fileLogging->AddChild(BGroupLayoutBuilder(B_VERTICAL, 10)
.Add(BGroupLayoutBuilder(B_HORIZONTAL, 10)
.Add(fLogFile)
.AddGlue())
.Add(fLogFileName)
.Add(BGroupLayoutBuilder(B_HORIZONTAL, 10)
.AddGlue()
.Add(fCreateLogFile))
.SetInsets(5, 5, 5, 5));
AddChild(BGroupLayoutBuilder(B_VERTICAL, 10)
.Add(consoleLogging)
.Add(fileLogging)
.SetInsets(5, 5, 5, 5));
}

View File

@ -14,28 +14,36 @@
#include <CheckBox.h>
class PoorManLoggingView: public BView
{
class PoorManLoggingView: public BView {
public:
PoorManLoggingView(BRect, const char *name);
PoorManLoggingView(const char* name);
void SetLogConsoleValue(bool state) {if (state) logConsole->SetValue(B_CONTROL_ON);
else logConsole->SetValue(B_CONTROL_OFF); }
bool LogConsoleValue() { return (logConsole->Value() == B_CONTROL_ON) ? true : false; }
void SetLogFileValue(bool state) {if (state) logFile->SetValue(B_CONTROL_ON);
else logFile->SetValue(B_CONTROL_OFF); }
bool LogFileValue() { return (logFile->Value() == B_CONTROL_ON) ? true : false; }
const char * LogFileName() { return logFileName->Text(); }
void SetLogFileName(const char * log) { logFileName->SetText(log); }
private:
// Logging Tab
void SetLogConsoleValue(bool state)
{ if (state)
fLogConsole->SetValue(B_CONTROL_ON);
else fLogConsole->SetValue(B_CONTROL_OFF); }
bool LogConsoleValue()
{ return (fLogConsole->Value() == B_CONTROL_ON)
? true : false; }
void SetLogFileValue(bool state)
{ if (state) fLogFile->SetValue(B_CONTROL_ON);
else fLogFile->SetValue(B_CONTROL_OFF); }
bool LogFileValue()
{ return (fLogFile->Value() == B_CONTROL_ON)
? true : false; }
const char* LogFileName()
{ return fLogFileName->Text(); }
void SetLogFileName(const char* log)
{ fLogFileName->SetText(log); }
private:
// Logging Tab
// Console Logging
BCheckBox * logConsole;
BCheckBox* fLogConsole;
// File Logging
BCheckBox * logFile;
BTextControl * logFileName;
BButton * createLogFile;
BCheckBox* fLogFile;
BTextControl* fLogFileName;
BButton * fCreateLogFile;
};
#endif

View File

@ -9,7 +9,10 @@
#include <Catalog.h>
#include <Debug.h>
#include <Directory.h>
#include <GroupLayoutBuilder.h>
#include <GroupView.h>
#include <Locale.h>
#include <SpaceLayoutItem.h>
#include <Window.h>
#include "constants.h"
@ -25,110 +28,72 @@
PoorManPreferencesWindow::PoorManPreferencesWindow(BRect frame, char * name)
: BWindow(frame, name, B_TITLED_WINDOW, B_NOT_ZOOMABLE | B_NOT_RESIZABLE
| B_CLOSE_ON_ESCAPE),
webDirFilePanel(NULL),
logFilePanel(NULL)
| B_CLOSE_ON_ESCAPE | B_AUTO_UPDATE_SIZE_LIMITS),
fWebDirFilePanel(NULL),
fLogFilePanel(NULL)
{
frame = Bounds();
SetLayout(new BGroupLayout(B_VERTICAL));
prefView = new PoorManView(frame, STR_WIN_NAME_PREF);
//prefView->SetViewColor(216,216,216,255);
prefView->SetViewColor(BACKGROUND_COLOR);
AddChild(prefView);
// Button View
BRect buttonRect;
buttonRect = Bounds();
buttonRect.top = buttonRect.bottom - 30;
buttonView = new PoorManView(buttonRect, "Button View");
buttonView->SetViewColor(BACKGROUND_COLOR);
prefView->AddChild(buttonView);
// Buttons
float buttonTop = 0.0f;
float buttonHeight = 26.0f;
float widthCancel = prefView->StringWidth(B_TRANSLATE("Cancel")) + 24.0f;
float widthDone = prefView->StringWidth(B_TRANSLATE("Done")) + 24.0f;
float gap = 5.0f;
BRect button1(prefView->Bounds().Width() - 2 * gap - widthCancel
- widthDone, buttonTop, prefView->Bounds().Width() - 2 * gap - widthDone,
buttonTop + buttonHeight);
cancelButton = new BButton(button1, "Cancel Button", B_TRANSLATE("Cancel"),
fCancelButton = new BButton("Cancel Button", B_TRANSLATE("Cancel"),
new BMessage(MSG_PREF_BTN_CANCEL));
BRect button2(prefView->Bounds().Width() - gap - widthDone, buttonTop,
prefView->Bounds().Width() - gap, buttonTop + buttonHeight);
doneButton = new BButton(button2, "Done Button", B_TRANSLATE("Done"),
fDoneButton = new BButton("Done Button", B_TRANSLATE("Done"),
new BMessage(MSG_PREF_BTN_DONE));
buttonView->AddChild(cancelButton);
buttonView->AddChild(doneButton);
// Create tabs
BRect r;
r = Bounds();
//r.InsetBy(5, 5);
r.top += 8.0;
r.bottom -= 38.0;
prefTabView = new BTabView(r, "Pref Tab View");
prefTabView->SetViewColor(BACKGROUND_COLOR);
r = prefTabView->Bounds();
r.InsetBy(5, 5);
r.bottom -= prefTabView->TabHeight();
fPrefTabView = new BTabView("Pref Tab View");
// Site Tab
siteTab = new BTab();
siteView = new PoorManSiteView(r, "Site View");
prefTabView->AddTab(siteView, siteTab);
siteTab->SetLabel(STR_TAB_SITE);
fSiteTab = new BTab();
fSiteView = new PoorManSiteView("Site View");
fPrefTabView->AddTab(fSiteView, fSiteTab);
fSiteTab->SetLabel(STR_TAB_SITE);
// Logging Tab
loggingTab = new BTab();
loggingView = new PoorManLoggingView(r, "Logging View");
prefTabView->AddTab(loggingView, loggingTab);
loggingTab->SetLabel(STR_TAB_LOGGING);
fLoggingTab = new BTab();
fLoggingView = new PoorManLoggingView("Logging View");
fPrefTabView->AddTab(fLoggingView, fLoggingTab);
fLoggingTab->SetLabel(STR_TAB_LOGGING);
// Advanced Tab
advancedTab = new BTab();
advancedView = new PoorManAdvancedView(r, "Advanced View");
prefTabView->AddTab(advancedView, advancedTab);
advancedTab->SetLabel(STR_TAB_ADVANCED);
prefView->AddChild(prefTabView);
fAdvancedTab = new BTab();
fAdvancedView = new PoorManAdvancedView("Advanced View");
fPrefTabView->AddTab(fAdvancedView, fAdvancedTab);
fAdvancedTab->SetLabel(STR_TAB_ADVANCED);
// FilePanels
BWindow * change_title;
BMessenger messenger(this);
BMessage message(MSG_FILE_PANEL_SELECT_WEB_DIR);
webDirFilePanel = new BFilePanel(B_OPEN_PANEL, &messenger, NULL,
fWebDirFilePanel = new BFilePanel(B_OPEN_PANEL, &messenger, NULL,
B_DIRECTORY_NODE, false, &message, NULL, true);
webDirFilePanel->SetPanelDirectory(new BDirectory("/boot/home/public_html"));
webDirFilePanel->SetButtonLabel(B_DEFAULT_BUTTON, B_TRANSLATE("Select"));
change_title = webDirFilePanel->Window();
fWebDirFilePanel->SetPanelDirectory(
new BDirectory("/boot/home/public_html"));
fWebDirFilePanel->SetButtonLabel(B_DEFAULT_BUTTON, B_TRANSLATE("Select"));
change_title = fWebDirFilePanel->Window();
change_title->SetTitle(STR_FILEPANEL_SELECT_WEB_DIR);
message.what = MSG_FILE_PANEL_CREATE_LOG_FILE;
logFilePanel = new BFilePanel(B_SAVE_PANEL, &messenger, NULL,
fLogFilePanel = new BFilePanel(B_SAVE_PANEL, &messenger, NULL,
B_FILE_NODE, false, &message);
logFilePanel->SetButtonLabel(B_DEFAULT_BUTTON, B_TRANSLATE("Create"));
change_title = logFilePanel->Window();
fLogFilePanel->SetButtonLabel(B_DEFAULT_BUTTON, B_TRANSLATE("Create"));
change_title = fLogFilePanel->Window();
change_title->SetTitle(STR_FILEPANEL_CREATE_LOG_FILE);
AddChild(BGroupLayoutBuilder(B_VERTICAL, 10)
.Add(fPrefTabView)
.Add(BGroupLayoutBuilder(B_HORIZONTAL)
.AddGlue()
.Add(fCancelButton)
.Add(fDoneButton))
.SetInsets(5, 5, 5, 5));
}
PoorManPreferencesWindow::~PoorManPreferencesWindow()
{
delete logFilePanel;
delete webDirFilePanel;
delete fLogFilePanel;
delete fWebDirFilePanel;
}
@ -139,38 +104,38 @@ PoorManPreferencesWindow::MessageReceived(BMessage* message)
case MSG_PREF_BTN_DONE:
PoorManWindow* win;
PoorManServer* server;
win = ((PoorManApplication *)be_app)->GetPoorManWindow();
win = ((PoorManApplication*)be_app)->GetPoorManWindow();
server = win->GetServer();
PRINT(("Pref Window: sendDir CheckBox: %d\n",
siteView->SendDirValue()));
server->SetListDir(siteView->SendDirValue());
win->SetDirListFlag(siteView->SendDirValue());
fSiteView->SendDirValue()));
server->SetListDir(fSiteView->SendDirValue());
win->SetDirListFlag(fSiteView->SendDirValue());
PRINT(("Pref Window: indexFileName TextControl: %s\n",
siteView->IndexFileName()));
if (server->SetIndexName(siteView->IndexFileName()) == B_OK)
win->SetIndexFileName(siteView->IndexFileName());
PRINT(("Pref Window: webDir: %s\n", siteView->WebDir()));
if (server->SetWebDir(siteView->WebDir()) == B_OK) {
win->SetWebDir(siteView->WebDir());
win->SetDirLabel(siteView->WebDir());
fSiteView->IndexFileName()));
if (server->SetIndexName(fSiteView->IndexFileName()) == B_OK)
win->SetIndexFileName(fSiteView->IndexFileName());
PRINT(("Pref Window: webDir: %s\n", fSiteView->WebDir()));
if (server->SetWebDir(fSiteView->WebDir()) == B_OK) {
win->SetWebDir(fSiteView->WebDir());
win->SetDirLabel(fSiteView->WebDir());
}
PRINT(("Pref Window: logConsole CheckBox: %d\n",
loggingView->LogConsoleValue()));
win->SetLogConsoleFlag(loggingView->LogConsoleValue());
fLoggingView->LogConsoleValue()));
win->SetLogConsoleFlag(fLoggingView->LogConsoleValue());
PRINT(("Pref Window: logFile CheckBox: %d\n",
loggingView->LogFileValue()));
win->SetLogFileFlag(loggingView->LogFileValue());
fLoggingView->LogFileValue()));
win->SetLogFileFlag(fLoggingView->LogFileValue());
PRINT(("Pref Window: logFileName: %s\n",
loggingView->LogFileName()));
win->SetLogPath(loggingView->LogFileName());
fLoggingView->LogFileName()));
win->SetLogPath(fLoggingView->LogFileName());
PRINT(("Pref Window: MaxConnections Slider: %ld\n",
advancedView->MaxSimultaneousConnections()));
server->SetMaxConns(advancedView->MaxSimultaneousConnections());
fAdvancedView->MaxSimultaneousConnections()));
server->SetMaxConns(fAdvancedView->MaxSimultaneousConnections());
win->SetMaxConnections(
(int16)advancedView->MaxSimultaneousConnections());
(int16)fAdvancedView->MaxSimultaneousConnections());
if (Lock())
Quit();
@ -181,10 +146,10 @@ PoorManPreferencesWindow::MessageReceived(BMessage* message)
break;
case MSG_PREF_SITE_BTN_SELECT:
// Select the Web Directory, root directory to look in.
webDirFilePanel->SetTarget(this);
webDirFilePanel->SetMessage(new BMessage(MSG_FILE_PANEL_SELECT_WEB_DIR));
if (!webDirFilePanel->IsShowing())
webDirFilePanel->Show();
fWebDirFilePanel->SetTarget(this);
fWebDirFilePanel->SetMessage(new BMessage(MSG_FILE_PANEL_SELECT_WEB_DIR));
if (!fWebDirFilePanel->IsShowing())
fWebDirFilePanel->Show();
break;
case MSG_FILE_PANEL_SELECT_WEB_DIR:
// handle the open BMessage from the Select Web Directory File Panel
@ -193,7 +158,7 @@ PoorManPreferencesWindow::MessageReceived(BMessage* message)
break;
case MSG_PREF_LOG_BTN_CREATE_FILE:
// Create the Log File
logFilePanel->Show();
fLogFilePanel->Show();
break;
case MSG_FILE_PANEL_CREATE_LOG_FILE:
// handle the save BMessage from the Create Log File Panel
@ -201,8 +166,8 @@ PoorManPreferencesWindow::MessageReceived(BMessage* message)
CreateLogFile(message);
break;
case MSG_PREF_ADV_SLD_MAX_CONNECTION:
max_connections = advancedView->MaxSimultaneousConnections();
PRINT(("Max Connections: %ld\n", max_connections));
fMaxConnections = fAdvancedView->MaxSimultaneousConnections();
PRINT(("Max Connections: %ld\n", fMaxConnections));
break;
default:
BWindow::MessageReceived(message);
@ -212,10 +177,10 @@ PoorManPreferencesWindow::MessageReceived(BMessage* message)
void
PoorManPreferencesWindow::SelectWebDir(BMessage * message)
PoorManPreferencesWindow::SelectWebDir(BMessage* message)
{
entry_ref ref;
const char * name;
const char* name;
BPath path;
BEntry entry;
@ -227,15 +192,15 @@ PoorManPreferencesWindow::SelectWebDir(BMessage * message)
entry.GetPath(&path);
PRINT(("DIR: %s\n", path.Path()));
siteView->SetWebDir(path.Path());
fSiteView->SetWebDir(path.Path());
bool temp;
if (message->FindBool("Default Dialog", &temp) == B_OK) {
PoorManWindow* win = ((PoorManApplication *)be_app)->GetPoorManWindow();
win->StartServer();
if (win->GetServer()->SetWebDir(siteView->WebDir()) == B_OK) {
win->SetWebDir(siteView->WebDir());
win->SetDirLabel(siteView->WebDir());
if (win->GetServer()->SetWebDir(fSiteView->WebDir()) == B_OK) {
win->SetWebDir(fSiteView->WebDir());
win->SetDirLabel(fSiteView->WebDir());
win->SaveSettings();
win->Show();
}
@ -246,7 +211,7 @@ PoorManPreferencesWindow::SelectWebDir(BMessage * message)
void
PoorManPreferencesWindow::CreateLogFile(BMessage * message)
PoorManPreferencesWindow::CreateLogFile(BMessage* message)
{
entry_ref ref;
const char * name;
@ -268,8 +233,8 @@ PoorManPreferencesWindow::CreateLogFile(BMessage * message)
PRINT(("Log File: %s\n", path.Path()));
if (err == B_OK) {
loggingView->SetLogFileName(path.Path());
loggingView->SetLogFileValue(true);
fLoggingView->SetLogFileName(path.Path());
fLoggingView->SetLogFileValue(true);
}
// mark the checkbox
@ -283,8 +248,8 @@ PoorManPreferencesWindow::ShowWebDirFilePanel()
BMessage message(MSG_FILE_PANEL_SELECT_WEB_DIR);
message.AddBool("Default Dialog", true);
webDirFilePanel->SetTarget(be_app);
webDirFilePanel->SetMessage(&message);
if (!webDirFilePanel->IsShowing())
webDirFilePanel->Show();
fWebDirFilePanel->SetTarget(be_app);
fWebDirFilePanel->SetMessage(&message);
if (!fWebDirFilePanel->IsShowing())
fWebDirFilePanel->Show();
}

View File

@ -22,59 +22,56 @@
#include "PoorManAdvancedView.h"
class PoorManPreferencesWindow: public BWindow
{
private:
PoorManView * prefView;
PoorManView * buttonView;
// ------------------------------------------------
// Tabs
BTabView * prefTabView;
BTab * siteTab;
BTab * loggingTab;
BTab * advancedTab;
// Tab Views
PoorManSiteView * siteView;
PoorManLoggingView * loggingView;
PoorManAdvancedView * advancedView;
// ------------------------------------------------
// Buttons
BButton * cancelButton;
BButton * doneButton;
// ------------------------------------------------
// FilePanels
BFilePanel * webDirFilePanel;
BFilePanel * logFilePanel;
// ------------------------------------------------
// temporary preference variables used to save and
// set the application to
// site tab
char web_directory[B_FILE_NAME_LENGTH];
char index_file_name[64];
bool send_dir;
// logging tab
bool log_to_console;
bool log_to_file;
char log_file_name[B_FILE_NAME_LENGTH];
// advanced tab
int32 max_connections;
class PoorManPreferencesWindow: public BWindow {
public:
PoorManPreferencesWindow(BRect frame, char * name);
~PoorManPreferencesWindow();
PoorManPreferencesWindow(BRect frame, char* name);
~PoorManPreferencesWindow();
virtual void MessageReceived(BMessage * message);
virtual void MessageReceived(BMessage* message);
void ShowWebDirFilePanel();
void SelectWebDir(BMessage * message);
void CreateLogFile(BMessage * message);
void ShowWebDirFilePanel();
void SelectWebDir(BMessage* message);
void CreateLogFile(BMessage* message);
private:
PoorManView* fPrefView;
PoorManView* fButtonView;
// ------------------------------------------------
// Tabs
BTabView* fPrefTabView;
BTab* fSiteTab;
BTab* fLoggingTab;
BTab* fAdvancedTab;
// Tab Views
PoorManSiteView* fSiteView;
PoorManLoggingView* fLoggingView;
PoorManAdvancedView* fAdvancedView;
// ------------------------------------------------
// Buttons
BButton* fCancelButton;
BButton* fDoneButton;
// ------------------------------------------------
// FilePanels
BFilePanel* fWebDirFilePanel;
BFilePanel* fLogFilePanel;
// ------------------------------------------------
// temporary preference variables used to save and
// set the application to
// site tab
char fWebDirectory[B_FILE_NAME_LENGTH];
char fIndexFileName[64];
bool fSendDir;
// logging tab
bool flogToConsole;
bool fLogToFile;
char fLogFileName[B_FILE_NAME_LENGTH];
// advanced tab
int32 fMaxConnections;
};
#endif

View File

@ -6,91 +6,63 @@
*/
#include <Box.h>
#include <GroupLayoutBuilder.h>
#include "constants.h"
#include "PoorManSiteView.h"
#include "PoorManWindow.h"
#include "PoorManApplication.h"
PoorManSiteView::PoorManSiteView(BRect rect, const char *name)
: BView(rect, name, B_FOLLOW_ALL, B_WILL_DRAW)
PoorManSiteView::PoorManSiteView(const char* name)
: BView(name, B_WILL_DRAW, NULL)
{
PoorManWindow * win;
PoorManWindow* win;
win = ((PoorManApplication *)be_app)->GetPoorManWindow();
SetViewColor(BACKGROUND_COLOR);
SetLayout(new BGroupLayout(B_VERTICAL));
// Web Site Location BBox
BRect webLocationRect;
webLocationRect = rect;
webLocationRect.top -= 5.0;
webLocationRect.left -= 5.0;
webLocationRect.right -= 7.0;
webLocationRect.bottom -= 98.0;
BBox * webSiteLocation = new BBox(webLocationRect, "Web Location");
BBox* webSiteLocation = new BBox("Web Location");
webSiteLocation->SetLabel(STR_BBX_LOCATION);
AddChild(webSiteLocation);
// Web Site Options BBox
BRect webOptionsRect;
webOptionsRect = webLocationRect;
webOptionsRect.top = webOptionsRect.bottom + 10.0;
webOptionsRect.bottom = webOptionsRect.top + 80.0;
BBox * webSiteOptions = new BBox(webOptionsRect, "Web Options");
BBox* webSiteOptions = new BBox("Web Options");
webSiteOptions->SetLabel(STR_BBX_OPTIONS);
AddChild(webSiteOptions);
// Send Directory List if No Index
float left = 10.0;
float top = 20.0;
float box_size = 13.0;
BRect sendDirRect(left, top, webOptionsRect.Width() - 5.0, top + box_size);
sendDir = new BCheckBox(sendDirRect, "Send Dir", STR_CBX_DIR_LIST_LABEL, new BMessage(MSG_PREF_SITE_CBX_INDEX));
fSendDir = new BCheckBox("Send Dir", STR_CBX_DIR_LIST_LABEL,
new BMessage(MSG_PREF_SITE_CBX_INDEX));
// set the checkbox to the value the program has
SetSendDirValue(win->DirListFlag());
webSiteOptions->AddChild(sendDir);
// Finish the Web Site Location Section
BRect webSiteLocationRect;
webSiteLocationRect = webLocationRect;
webSiteLocationRect.InsetBy(10.0, 7.0);
webSiteLocationRect.top += 13.0;
webSiteLocationRect.bottom = webSiteLocationRect.top + 19.0;
// Web Directory Text Control
webDir = new BTextControl(webSiteLocationRect, "Web Dir",
STR_TXT_DIRECTORY, NULL, NULL);
webDir->SetAlignment(B_ALIGN_RIGHT, B_ALIGN_LEFT);
webDir->SetDivider(80.0);
fWebDir = new BTextControl("Web Dir", STR_TXT_DIRECTORY, NULL);
SetWebDir(win->WebDir());
webSiteLocation->AddChild(webDir);
// Select Web Directory Button
BRect selectWebDirRect;
selectWebDirRect.top = webSiteLocationRect.bottom + 5.0;
selectWebDirRect.right = webSiteLocationRect.right + 2.0;
selectWebDirRect.left = selectWebDirRect.right
- webSiteLocation->StringWidth("Select Web Dir") - 24.0;
selectWebDirRect.bottom = selectWebDirRect.top + 19.0;
selectWebDir = new BButton(selectWebDirRect, "Select Web Dir",
STR_BTN_DIRECTORY, new BMessage(MSG_PREF_SITE_BTN_SELECT));
webSiteLocation->AddChild(selectWebDir);
fSelectWebDir = new BButton("Select Web Dir", STR_BTN_DIRECTORY,
new BMessage(MSG_PREF_SITE_BTN_SELECT));
// Index File Name Text Control
//webDirRect.InsetBy(10.0, 7.0);
webSiteLocationRect.top += 63.0;
webSiteLocationRect.bottom = webSiteLocationRect.top + 19.0;
indexFileName = new BTextControl(webSiteLocationRect,
"Index File Name", STR_TXT_INDEX, NULL, NULL);
indexFileName->SetAlignment(B_ALIGN_RIGHT, B_ALIGN_LEFT);
indexFileName->SetDivider(80.0);
fIndexFileName = new BTextControl("Index File Name", STR_TXT_INDEX, NULL);
SetIndexFileName(win->IndexFileName());
webSiteLocation->AddChild(indexFileName);
webSiteOptions->AddChild(BGroupLayoutBuilder(B_VERTICAL, 10)
.Add(BGroupLayoutBuilder(B_HORIZONTAL, 10)
.Add(fSendDir)
.AddGlue())
.SetInsets(5, 5, 5, 5));
webSiteLocation->AddChild(BGroupLayoutBuilder(B_VERTICAL, 10)
.Add(fWebDir)
.Add(BGroupLayoutBuilder(B_HORIZONTAL, 10)
.AddGlue()
.Add(fSelectWebDir))
.Add(fIndexFileName)
.SetInsets(5, 5, 5, 5));
AddChild(BGroupLayoutBuilder(B_VERTICAL, 10)
.Add(webSiteLocation)
.Add(webSiteOptions)
.SetInsets(5, 5, 5, 5));
}

View File

@ -14,26 +14,34 @@
#include <CheckBox.h>
class PoorManSiteView: public BView
{
class PoorManSiteView: public BView {
public:
PoorManSiteView(BRect, const char *name);
void SetSendDirValue(bool state) {if (state) sendDir->SetValue(B_CONTROL_ON);
else sendDir->SetValue(B_CONTROL_OFF); }
bool SendDirValue() { return (sendDir->Value() == B_CONTROL_ON) ? true : false; }
const char * IndexFileName() { return indexFileName->Text(); }
void SetIndexFileName(const char * name) { indexFileName->SetText(name); }
const char * WebDir() { return webDir->Text(); }
void SetWebDir(const char * dir) { webDir->SetText(dir); }
PoorManSiteView(const char *name);
void SetSendDirValue(bool state)
{ if (state) fSendDir->SetValue(B_CONTROL_ON);
else fSendDir->SetValue(B_CONTROL_OFF); }
bool SendDirValue()
{ return (fSendDir->Value() == B_CONTROL_ON)
? true : false; }
const char* IndexFileName()
{ return fIndexFileName->Text(); }
void SetIndexFileName(const char* name)
{ fIndexFileName->SetText(name); }
const char* WebDir()
{ return fWebDir->Text(); }
void SetWebDir(const char* dir)
{ fWebDir->SetText(dir); }
private:
// Site Tab
// Web Site Location
BTextControl * webDir;
BTextControl * indexFileName;
BButton * selectWebDir;
BTextControl* fWebDir;
BTextControl* fIndexFileName;
BButton* fSelectWebDir;
// Web Site Options
BCheckBox * sendDir;
BCheckBox* fSendDir;
};

View File

@ -10,7 +10,7 @@
#endif
PoorManView::PoorManView(BRect rect, const char *name)
: BView(rect, name, B_FOLLOW_ALL, B_WILL_DRAW )
: BView(rect, name, B_FOLLOW_ALL, B_WILL_DRAW)
{
}

View File

@ -12,11 +12,11 @@
#include <View.h>
#endif
class PoorManView: public BView
{
class PoorManView: public BView {
public:
PoorManView(BRect, const char *name);
virtual void AttachedToWindow();
PoorManView(BRect, const char *name);
virtual void AttachedToWindow();
};
#endif

View File

@ -17,6 +17,7 @@
#include <Directory.h>
#include <File.h>
#include <FindDirectory.h>
#include <GroupLayoutBuilder.h>
#include <Locale.h>
#include <Menu.h>
#include <MenuBar.h>
@ -43,182 +44,111 @@
PoorManWindow::PoorManWindow(BRect frame)
: BWindow(frame, STR_APP_NAME, B_TITLED_WINDOW, 0),
status(false), hits(0), prefWindow(NULL), fLogFile(NULL), fServer(NULL)
:
BWindow(frame, STR_APP_NAME, B_TITLED_WINDOW, 0),
fStatus(false),
fHits(0),
fPrefWindow(NULL),
fLogFile(NULL),
fServer(NULL)
{
//preferences init
web_directory.SetTo(STR_DEFAULT_WEB_DIRECTORY);
index_file_name.SetTo("index.html");
dir_list_flag = false;
fWebDirectory.SetTo(STR_DEFAULT_WEB_DIRECTORY);
fIndexFileName.SetTo("index.html");
fDirListFlag = false;
log_console_flag = true;
log_file_flag = false;
log_path.SetTo("");
fLogConsoleFlag = true;
fLogFileFlag = false;
fLogPath.SetTo("");
max_connections = (int16)32;
fMaxConnections = (int16)32;
is_zoomed = true;
last_width = 318.0f;
last_height = 320.0f;
this->frame = frame;
setwindow_frame.Set(112.0f, 60.0f, 492.0f, 340.0f);
fIsZoomed = true;
fLastWidth = 318.0f;
fLastHeight = 320.0f;
this->fFrame = frame;
fSetwindowFrame.Set(112.0f, 60.0f, 492.0f, 340.0f);
// PoorMan Window
SetSizeLimits(318, 1600, 53, 1200);
// limit the size of the size of the window
//SetZoomLimits(1024, 768);
//frame.Set(30.0f, 30.0f, 355.0f, 185.0f);
frame.OffsetTo(B_ORIGIN);
frame = Bounds();
frame.top += 19.0;
mainView = new PoorManView(frame, STR_APP_NAME);
mainView->SetViewColor(216,216,216,255);
mainView->SetFont(be_bold_font);
mainView->SetFontSize(12);
AddChild(mainView);
// BBox tests
BRect br;
br = mainView->Bounds();
br.top = 1.0;
BBox * bb = new BBox(br, "Background", B_FOLLOW_ALL_SIDES,
B_WILL_DRAW | B_FRAME_EVENTS | B_FULL_UPDATE_ON_RESIZE);
bb->SetHighColor(WHITE);
bb->SetLowColor(GRAY);
bb->SetBorder(B_PLAIN_BORDER);
mainView->AddChild(bb);
SetLayout(new BGroupLayout(B_VERTICAL));
// -----------------------------------------------------------------
// Three Labels
// Status String
BRect statusRect;
statusRect = Bounds();
statusRect.left += 5;
statusRect.top += 3;
statusRect.bottom = statusRect.top + 15;
statusRect.right = statusRect.left + 100; // make the width wide enough for the string to display
statusView = new BStringView(statusRect, "Status View",
B_TRANSLATE("Status: Stopped"));
bb->AddChild(statusView);
fStatusView = new BStringView("Status View", B_TRANSLATE("Status: Stopped"));
// Directory String
BRect dirRect;
dirRect = Bounds();
dirRect.top = statusRect.bottom - 1;
dirRect.bottom = dirRect.top + 15;
dirRect.left = statusRect.left;
dirRect.right -= 5;
dirView = new BStringView(dirRect, "Dir View",
B_TRANSLATE("Directory: (none)"), B_FOLLOW_LEFT_RIGHT | B_FOLLOW_TOP);
bb->AddChild(dirView);
fDirView = new BStringView("Dir View", B_TRANSLATE("Directory: (none)"));
// Hits String
BRect hitsRect;
hitsRect = bb->Bounds();
hitsRect.InsetBy(5.0f, 5.0f);
hitsRect.top = statusRect.top;
hitsRect.bottom = statusRect.bottom;
hitsRect.left = statusRect.right + 20;
hitsView = new BStringView(hitsRect, "Hit View", B_TRANSLATE("Hits: 0"),
B_FOLLOW_RIGHT | B_FOLLOW_TOP);
hitsView->SetAlignment(B_ALIGN_RIGHT);
bb->AddChild(hitsView);
fHitsView = new BStringView("Hit View", B_TRANSLATE("Hits: 0"));
// -----------------------------------------------------------------
// Logging View
// logRect
BRect logRect = bb->Bounds();//(5.0, 36.0, 306.0, 131.0);
logRect.InsetBy(5, 5);
logRect.top = 36.0f;
logRect.right -= B_V_SCROLL_BAR_WIDTH;
// textRect
BRect textRect; //(1.0, 1.0, 175.0, 75.0);
textRect = logRect;
textRect.top = 0.0;
textRect.left = 2.0;
textRect.right = logRect.right - logRect.left - 2.0;
textRect.bottom = logRect.bottom - logRect.top;
fLogViewFont = new BFont(be_plain_font);
fLogViewFont->SetSize(11.0);
fLoggingView = new BTextView(STR_TXT_VIEW, B_WILL_DRAW );
loggingView = new BTextView(logRect, STR_TXT_VIEW, textRect,
fLogViewFont, NULL, B_FOLLOW_ALL_SIDES, B_WILL_DRAW );
loggingView->MakeEditable(false); // user cannot change the text
loggingView->MakeSelectable(true);
loggingView->SetViewColor(WHITE);
loggingView->SetStylable(true);
fLoggingView->MakeEditable(false); // user cannot change the text
fLoggingView->MakeSelectable(true);
fLoggingView->SetViewColor(WHITE);
fLoggingView->SetStylable(true);
// create the scroll view
scrollView = new BScrollView("Scroll View", loggingView, B_FOLLOW_ALL_SIDES,
B_WILL_DRAW | B_FRAME_EVENTS,
fScrollView = new BScrollView("Scroll View", fLoggingView,
B_WILL_DRAW | B_FRAME_EVENTS | B_FOLLOW_ALL_SIDES,
// Make sure articles on border do not occur when resizing
false, true);
bb->AddChild(scrollView);
loggingView->MakeFocus(true);
fLoggingView->MakeFocus(true);
// -----------------------------------------------------------------
// menu bar
BRect menuRect;
menuRect = Bounds();
menuRect.bottom = 18.0f;
FileMenuBar = new BMenuBar(menuRect, "File Menu Bar");
fFileMenuBar = new BMenuBar("File Menu Bar");
// menus
FileMenu = BuildFileMenu();
if (FileMenu)
FileMenuBar->AddItem(FileMenu);
fFileMenu = BuildFileMenu();
if (fFileMenu)
fFileMenuBar->AddItem(fFileMenu);
EditMenu = BuildEditMenu();
if (EditMenu)
FileMenuBar->AddItem(EditMenu);
fEditMenu = BuildEditMenu();
if (fEditMenu)
fFileMenuBar->AddItem(fEditMenu);
ControlsMenu = BuildControlsMenu();
if (ControlsMenu)
FileMenuBar->AddItem(ControlsMenu);
fControlsMenu = BuildControlsMenu();
if (fControlsMenu)
fFileMenuBar->AddItem(fControlsMenu);
// File Panels
BWindow* change_title;
BMessenger messenger(this);
saveConsoleFilePanel = new BFilePanel(
B_SAVE_PANEL,
&messenger,
NULL,
B_FILE_NODE,
false,
fSaveConsoleFilePanel = new BFilePanel(B_SAVE_PANEL, new BMessenger(this),
NULL, B_FILE_NODE, false,
new BMessage(MSG_FILE_PANEL_SAVE_CONSOLE));
change_title = saveConsoleFilePanel->Window();
change_title = fSaveConsoleFilePanel->Window();
change_title->SetTitle(STR_FILEPANEL_SAVE_CONSOLE);
saveConsoleSelectionFilePanel = new BFilePanel(
B_SAVE_PANEL,
&messenger,
NULL,
B_FILE_NODE,
false,
fSaveConsoleSelectionFilePanel = new BFilePanel(B_SAVE_PANEL,
new BMessenger(this), NULL, B_FILE_NODE, false,
new BMessage(MSG_FILE_PANEL_SAVE_CONSOLE_SELECTION));
change_title = saveConsoleSelectionFilePanel->Window();
change_title = fSaveConsoleSelectionFilePanel->Window();
change_title->SetTitle(STR_FILEPANEL_SAVE_CONSOLE_SELECTION);
AddChild(FileMenuBar);
AddChild(BGroupLayoutBuilder(B_VERTICAL)
.Add(fFileMenuBar)
.Add(BGroupLayoutBuilder(B_VERTICAL, 5)
.Add(BGroupLayoutBuilder(B_HORIZONTAL)
.Add(fStatusView)
.AddGlue()
.Add(fHitsView))
.Add(BGroupLayoutBuilder(B_HORIZONTAL)
.Add(fDirView)
.AddGlue())
.Add(fScrollView)
.SetInsets(10, 10, 10, 10)));
pthread_rwlock_init(&fLogFileLock, NULL);
}
@ -227,7 +157,6 @@ PoorManWindow::PoorManWindow(BRect frame)
PoorManWindow::~PoorManWindow()
{
delete fServer;
delete fLogViewFont;
delete fLogFile;
pthread_rwlock_destroy(&fLogFileLock);
}
@ -237,129 +166,127 @@ void
PoorManWindow::MessageReceived(BMessage* message)
{
switch (message->what) {
case MSG_MENU_FILE_SAVE_AS:
saveConsoleFilePanel->Show();
break;
case MSG_FILE_PANEL_SAVE_CONSOLE:
printf("FilePanel: Save console\n");
SaveConsole(message, false);
break;
case MSG_MENU_FILE_SAVE_SELECTION:
saveConsoleSelectionFilePanel->Show();
break;
case MSG_FILE_PANEL_SAVE_CONSOLE_SELECTION:
printf("FilePanel: Save console selection\n");
SaveConsole(message, true);
break;
case MSG_FILE_PANEL_SELECT_WEB_DIR:
prefWindow->MessageReceived(message);
break;
case MSG_MENU_EDIT_PREF:
prefWindow = new PoorManPreferencesWindow(
setwindow_frame,
STR_WIN_NAME_PREF);
prefWindow->Show();
break;
case MSG_MENU_CTRL_RUN:
if (status)
StopServer();
else
StartServer();
break;
case MSG_MENU_CTRL_CLEAR_HIT:
SetHits(0);
//UpdateHitsLabel();
break;
case MSG_MENU_CTRL_CLEAR_CONSOLE:
loggingView->SelectAll();
loggingView->Delete();
break;
case MSG_MENU_CTRL_CLEAR_LOG:
FILE * f;
f = fopen(log_path.String(), "w");
fclose(f);
break;
case MSG_LOG: {
if (!log_console_flag && !log_file_flag)
case MSG_MENU_FILE_SAVE_AS:
fSaveConsoleFilePanel->Show();
break;
case MSG_FILE_PANEL_SAVE_CONSOLE:
printf("FilePanel: Save console\n");
SaveConsole(message, false);
break;
case MSG_MENU_FILE_SAVE_SELECTION:
fSaveConsoleSelectionFilePanel->Show();
break;
case MSG_FILE_PANEL_SAVE_CONSOLE_SELECTION:
printf("FilePanel: Save console selection\n");
SaveConsole(message, true);
break;
case MSG_FILE_PANEL_SELECT_WEB_DIR:
fPrefWindow->MessageReceived(message);
break;
case MSG_MENU_EDIT_PREF:
fPrefWindow = new PoorManPreferencesWindow(fSetwindowFrame,
STR_WIN_NAME_PREF);
fPrefWindow->Show();
break;
case MSG_MENU_CTRL_RUN:
if (fStatus)
StopServer();
else
StartServer();
break;
case MSG_MENU_CTRL_CLEAR_HIT:
SetHits(0);
//UpdateHitsLabel();
break;
case MSG_MENU_CTRL_CLEAR_CONSOLE:
fLoggingView->SelectAll();
fLoggingView->Delete();
break;
case MSG_MENU_CTRL_CLEAR_LOG:
FILE* f;
f = fopen(fLogPath.String(), "w");
fclose(f);
break;
case MSG_LOG: {
if (!fLogConsoleFlag && !fLogFileFlag)
break;
time_t time;
in_addr_t address;
rgb_color color;
const void* pointer;
ssize_t size;
const char* msg;
BString line;
time_t time;
in_addr_t address;
rgb_color color;
const void* pointer;
ssize_t size;
const char* msg;
BString line;
if (message->FindString("cstring", &msg) != B_OK)
break;
if (message->FindData("time_t", B_TIME_TYPE, &pointer, &size) != B_OK)
time = -1;
else
time = *static_cast<const time_t*>(pointer);
if (message->FindString("cstring", &msg) != B_OK)
break;
if (message->FindData("time_t", B_TIME_TYPE, &pointer, &size) != B_OK)
time = -1;
else
time = *static_cast<const time_t*>(pointer);
if (message->FindData("in_addr_t", B_ANY_TYPE, &pointer, &size) != B_OK)
address = INADDR_NONE;
else
address = *static_cast<const in_addr_t*>(pointer);
if (message->FindData("in_addr_t", B_ANY_TYPE, &pointer, &size) != B_OK)
address = INADDR_NONE;
else
address = *static_cast<const in_addr_t*>(pointer);
if (message->FindData("rgb_color", B_RGB_COLOR_TYPE, &pointer, &size) != B_OK)
color = BLACK;
else
color = *static_cast<const rgb_color*>(pointer);
if (message->FindData("rgb_color", B_RGB_COLOR_TYPE, &pointer, &size) != B_OK)
color = BLACK;
else
color = *static_cast<const rgb_color*>(pointer);
if (time != -1) {
BString timeString;
if (BLocale::Default()->FormatDateTime(&timeString, time,
DATE_FORMAT, TIME_FORMAT) == B_OK) {
line << '[' << timeString << "]: ";
}
}
if (address != INADDR_NONE) {
char addr[INET_ADDRSTRLEN];
struct in_addr sin_addr;
sin_addr.s_addr = address;
if (inet_ntop(AF_INET, &sin_addr, addr, sizeof(addr)) != NULL) {
addr[strlen(addr)] = '\0';
line << '(' << addr << ") ";
}
}
line << msg;
text_run run;
text_run_array runs;
run.offset = 0;
run.font = *fLogViewFont;
run.color = color;
runs.count = 1;
runs.runs[0] = run;
if (Lock()) {
if (log_console_flag) {
loggingView->Insert(loggingView->TextLength(),
line.String(), line.Length(), &runs);
loggingView->ScrollToOffset(loggingView->TextLength());
}
if (log_file_flag) {
if (pthread_rwlock_rdlock(&fLogFileLock) == 0) {
fLogFile->Write(line.String(), line.Length());
pthread_rwlock_unlock(&fLogFileLock);
if (time != -1) {
BString timeString;
if (BLocale::Default()->FormatDateTime(&timeString, time,
DATE_FORMAT, TIME_FORMAT) == B_OK) {
line << '[' << timeString << "]: ";
}
}
Unlock();
}
break;
}
default:
BWindow::MessageReceived(message);
break;
if (address != INADDR_NONE) {
char addr[INET_ADDRSTRLEN];
struct in_addr sin_addr;
sin_addr.s_addr = address;
if (inet_ntop(AF_INET, &sin_addr, addr, sizeof(addr)) != NULL) {
addr[strlen(addr)] = '\0';
line << '(' << addr << ") ";
}
}
line << msg;
text_run run;
text_run_array runs;
run.offset = 0;
run.color = color;
runs.count = 1;
runs.runs[0] = run;
if (Lock()) {
if (fLogConsoleFlag) {
fLoggingView->Insert(fLoggingView->TextLength(),
line.String(), line.Length(), &runs);
fLoggingView->ScrollToOffset(fLoggingView->TextLength());
}
if (fLogFileFlag) {
if (pthread_rwlock_rdlock(&fLogFileLock) == 0) {
fLogFile->Write(line.String(), line.Length());
pthread_rwlock_unlock(&fLogFileLock);
}
}
Unlock();
}
break;
}
default:
BWindow::MessageReceived(message);
break;
}
}
@ -367,17 +294,17 @@ PoorManWindow::MessageReceived(BMessage* message)
void
PoorManWindow::FrameMoved(BPoint origin)
{
frame.left = origin.x;
frame.top = origin.y;
fFrame.left = origin.x;
fFrame.top = origin.y;
}
void
PoorManWindow::FrameResized(float width, float height)
{
if (is_zoomed) {
last_width = width;
last_height = height;
if (fIsZoomed) {
fLastWidth = width;
fLastHeight = height;
}
}
@ -385,7 +312,7 @@ PoorManWindow::FrameResized(float width, float height)
bool
PoorManWindow::QuitRequested()
{
if (status) {
if (fStatus) {
time_t now = time(NULL);
BString timeString;
BLocale::Default()->FormatDateTime(&timeString, now,
@ -395,21 +322,21 @@ PoorManWindow::QuitRequested()
line << "[" << timeString << "]: " << B_TRANSLATE("Shutting down.")
<< "\n";
if (log_console_flag) {
loggingView->Insert(loggingView->TextLength(),
line, line.Length());
loggingView->ScrollToOffset(loggingView->TextLength());
if (fLogConsoleFlag) {
fLoggingView->Insert(fLoggingView->TextLength(),
line, line.Length());
fLoggingView->ScrollToOffset(fLoggingView->TextLength());
}
if (log_file_flag) {
if (fLogFileFlag) {
if (pthread_rwlock_rdlock(&fLogFileLock) == 0) {
fLogFile->Write(line, line.Length());
pthread_rwlock_unlock(&fLogFileLock);
fLogFile->Write(line, line.Length());
pthread_rwlock_unlock(&fLogFileLock);
}
}
fServer->Stop();
status = false;
fStatus = false;
UpdateStatusLabelAndMenuItem();
}
@ -422,14 +349,14 @@ PoorManWindow::QuitRequested()
void
PoorManWindow::Zoom(BPoint origin, float width, float height)
{
if (is_zoomed) {
if (fIsZoomed) {
// Change to the Minimal size
is_zoomed = false;
fIsZoomed = false;
ResizeTo(318, 53);
} else {
// Change to the Zoomed size
is_zoomed = true;
ResizeTo(last_width, last_height);
fIsZoomed = true;
ResizeTo(fLastWidth, fLastHeight);
}
}
@ -437,7 +364,7 @@ PoorManWindow::Zoom(BPoint origin, float width, float height)
void
PoorManWindow::SetHits(uint32 num)
{
hits = num;
fHits = num;
UpdateHitsLabel();
}
@ -445,10 +372,10 @@ PoorManWindow::SetHits(uint32 num)
// Private: Methods ------------------------------------------
BMenu *
BMenu*
PoorManWindow::BuildFileMenu() const
{
BMenu * ptrFileMenu = new BMenu(STR_MNU_FILE);
BMenu* ptrFileMenu = new BMenu(STR_MNU_FILE);
ptrFileMenu->AddItem(new BMenuItem(STR_MNU_FILE_SAVE_AS,
new BMessage(MSG_MENU_FILE_SAVE_AS), CMD_FILE_SAVE_AS));
@ -465,28 +392,28 @@ PoorManWindow::BuildFileMenu() const
}
BMenu *
BMenu*
PoorManWindow::BuildEditMenu() const
{
BMenu * ptrEditMenu = new BMenu(STR_MNU_EDIT);
BMenu* ptrEditMenu = new BMenu(STR_MNU_EDIT);
BMenuItem * CopyMenuItem = new BMenuItem(STR_MNU_EDIT_COPY,
BMenuItem* CopyMenuItem = new BMenuItem(STR_MNU_EDIT_COPY,
new BMessage(B_COPY), CMD_EDIT_COPY);
ptrEditMenu->AddItem(CopyMenuItem);
CopyMenuItem->SetTarget(loggingView, NULL);
CopyMenuItem->SetTarget(fLoggingView, NULL);
ptrEditMenu->AddSeparatorItem();
BMenuItem * SelectAllMenuItem = new BMenuItem(STR_MNU_EDIT_SELECT_ALL,
BMenuItem* SelectAllMenuItem = new BMenuItem(STR_MNU_EDIT_SELECT_ALL,
new BMessage(B_SELECT_ALL), CMD_EDIT_SELECT_ALL);
ptrEditMenu->AddItem(SelectAllMenuItem);
SelectAllMenuItem->SetTarget(loggingView, NULL);
SelectAllMenuItem->SetTarget(fLoggingView, NULL);
ptrEditMenu->AddSeparatorItem();
BMenuItem * PrefMenuItem = new BMenuItem(STR_MNU_EDIT_PREF,
BMenuItem* PrefMenuItem = new BMenuItem(STR_MNU_EDIT_PREF,
new BMessage(MSG_MENU_EDIT_PREF));
ptrEditMenu->AddItem(PrefMenuItem);
@ -494,27 +421,27 @@ PoorManWindow::BuildEditMenu() const
}
BMenu *
BMenu*
PoorManWindow::BuildControlsMenu() const
{
BMenu * ptrControlMenu = new BMenu(STR_MNU_CTRL);
BMenu* ptrControlMenu = new BMenu(STR_MNU_CTRL);
BMenuItem * RunServerMenuItem = new BMenuItem(STR_MNU_CTRL_RUN_SERVER,
BMenuItem* RunServerMenuItem = new BMenuItem(STR_MNU_CTRL_RUN_SERVER,
new BMessage(MSG_MENU_CTRL_RUN));
RunServerMenuItem->SetMarked(false);
ptrControlMenu->AddItem(RunServerMenuItem);
BMenuItem * ClearHitCounterMenuItem = new BMenuItem(STR_MNU_CTRL_CLEAR_HIT_COUNTER,
BMenuItem* ClearHitCounterMenuItem = new BMenuItem(STR_MNU_CTRL_CLEAR_HIT_COUNTER,
new BMessage(MSG_MENU_CTRL_CLEAR_HIT));
ptrControlMenu->AddItem(ClearHitCounterMenuItem);
ptrControlMenu->AddSeparatorItem();
BMenuItem * ClearConsoleLogMenuItem = new BMenuItem(STR_MNU_CTRL_CLEAR_CONSOLE,
BMenuItem* ClearConsoleLogMenuItem = new BMenuItem(STR_MNU_CTRL_CLEAR_CONSOLE,
new BMessage(MSG_MENU_CTRL_CLEAR_CONSOLE));
ptrControlMenu->AddItem(ClearConsoleLogMenuItem);
BMenuItem * ClearLogFileMenuItem = new BMenuItem(STR_MNU_CTRL_CLEAR_LOG_FILE,
BMenuItem* ClearLogFileMenuItem = new BMenuItem(STR_MNU_CTRL_CLEAR_LOG_FILE,
new BMessage(MSG_MENU_CTRL_CLEAR_LOG));
ptrControlMenu->AddItem(ClearLogFileMenuItem);
@ -523,13 +450,13 @@ PoorManWindow::BuildControlsMenu() const
void
PoorManWindow::SetDirLabel(const char * name)
PoorManWindow::SetDirLabel(const char* name)
{
BString dirPath(B_TRANSLATE("Directory: "));
dirPath.Append(name);
if (Lock()) {
dirView->SetText(dirPath.String());
fDirView->SetText(dirPath.String());
Unlock();
}
}
@ -539,11 +466,11 @@ void
PoorManWindow::UpdateStatusLabelAndMenuItem()
{
if (Lock()) {
if (status)
statusView->SetText(B_TRANSLATE("Status: Running"));
if (fStatus)
fStatusView->SetText(B_TRANSLATE("Status: Running"));
else
statusView->SetText(B_TRANSLATE("Status: Stopped"));
ControlsMenu->FindItem(STR_MNU_CTRL_RUN_SERVER)->SetMarked(status);
fStatusView->SetText(B_TRANSLATE("Status: Stopped"));
fControlsMenu->FindItem(STR_MNU_CTRL_RUN_SERVER)->SetMarked(fStatus);
Unlock();
}
}
@ -553,8 +480,8 @@ void
PoorManWindow::UpdateHitsLabel()
{
if (Lock()) {
sprintf(hitsLabel, B_TRANSLATE("Hits: %lu"), GetHits());
hitsView->SetText(hitsLabel);
sprintf(fHitsLabel, B_TRANSLATE("Hits: %lu"), GetHits());
fHitsView->SetText(fHitsLabel);
Unlock();
}
@ -562,22 +489,25 @@ PoorManWindow::UpdateHitsLabel()
status_t
PoorManWindow::SaveConsole(BMessage * message, bool selection)
PoorManWindow::SaveConsole(BMessage* message, bool selection)
{
entry_ref ref;
const char * name;
const char* name;
BPath path;
BEntry entry;
status_t err = B_OK;
FILE *f;
FILE* f;
if ((err = message->FindRef("directory", &ref)) != B_OK)
err = message->FindRef("directory", &ref);
if (err != B_OK)
return err;
if ((err = message->FindString("name", &name)) != B_OK)
err = message->FindString("name", &name);
if (err != B_OK)
return err;
if ((err = entry.SetTo(&ref)) != B_OK)
err = entry.SetTo(&ref);
if (err != B_OK)
return err;
entry.GetPath(&path);
@ -588,20 +518,21 @@ PoorManWindow::SaveConsole(BMessage * message, bool selection)
if (!selection) {
// write the data to the file
err = fwrite(loggingView->Text(), 1, loggingView->TextLength(), f);
err = fwrite(fLoggingView->Text(), 1, fLoggingView->TextLength(), f);
} else {
// find the selected text and write it to a file
int32 start = 0, end = 0;
loggingView->GetSelection(&start, &end);
fLoggingView->GetSelection(&start, &end);
BString buffer;
char * buffData = buffer.LockBuffer(end - start + 1);
// copy the selected text from the TextView to the buffer
loggingView->GetText(start, end - start, buffData);
fLoggingView->GetText(start, end - start, buffData);
buffer.UnlockBuffer(end - start + 1);
err = fwrite(buffer.String(), 1, end - start + 1, f);
}
fclose(f);
return err;
@ -627,10 +558,10 @@ PoorManWindow::DefaultSettings()
break;
case 1:
prefWindow = new PoorManPreferencesWindow(
setwindow_frame,
fPrefWindow = new PoorManPreferencesWindow(
fSetwindowFrame,
STR_WIN_NAME_PREF);
prefWindow->ShowWebDirFilePanel();
fPrefWindow->ShowWebDirFilePanel();
break;
case 2:
@ -674,49 +605,49 @@ PoorManWindow::ReadSettings()
return B_ERROR;
//site tab
if (m.FindString("web_directory", &web_directory) != B_OK)
web_directory.SetTo(STR_DEFAULT_WEB_DIRECTORY);
if (m.FindString("index_file_name", &index_file_name) != B_OK)
index_file_name.SetTo("index.html");
if (m.FindBool("dir_list_flag", &dir_list_flag) != B_OK)
dir_list_flag = false;
if (m.FindString("fWebDirectory", &fWebDirectory) != B_OK)
fWebDirectory.SetTo(STR_DEFAULT_WEB_DIRECTORY);
if (m.FindString("fIndexFileName", &fIndexFileName) != B_OK)
fIndexFileName.SetTo("index.html");
if (m.FindBool("fDirListFlag", &fDirListFlag) != B_OK)
fDirListFlag = false;
//logging tab
if (m.FindBool("log_console_flag", &log_console_flag) != B_OK)
log_console_flag = true;
if (m.FindBool("log_file_flag", &log_file_flag) != B_OK)
log_file_flag = false;
if (m.FindString("log_path", &log_path) != B_OK)
log_path.SetTo("");
if (m.FindBool("fLogConsoleFlag", &fLogConsoleFlag) != B_OK)
fLogConsoleFlag = true;
if (m.FindBool("fLogFileFlag", &fLogFileFlag) != B_OK)
fLogFileFlag = false;
if (m.FindString("fLogPath", &fLogPath) != B_OK)
fLogPath.SetTo("");
//advance tab
if (m.FindInt16("max_connections", &max_connections) != B_OK)
max_connections = (int16)32;
if (m.FindInt16("fMaxConnections", &fMaxConnections) != B_OK)
fMaxConnections = (int16)32;
//windows' position and size
if (m.FindRect("frame", &frame) != B_OK)
frame.Set(82.0f, 30.0f, 400.0f, 350.0f);
if (m.FindRect("setwindow_frame", &setwindow_frame) != B_OK)
setwindow_frame.Set(112.0f, 60.0f, 492.0f, 340.0f);
if (m.FindBool("is_zoomed", &is_zoomed) != B_OK)
is_zoomed = true;
if (m.FindFloat("last_width", &last_width) != B_OK)
last_width = 318.0f;
if (m.FindFloat("last_height", &last_height) != B_OK)
last_height = 320.0f;
if (m.FindRect("frame", &fFrame) != B_OK)
fFrame.Set(82.0f, 30.0f, 400.0f, 350.0f);
if (m.FindRect("fSetwindowFrame", &fSetwindowFrame) != B_OK)
fSetwindowFrame.Set(112.0f, 60.0f, 492.0f, 340.0f);
if (m.FindBool("fIsZoomed", &fIsZoomed) != B_OK)
fIsZoomed = true;
if (m.FindFloat("fLastWidth", &fLastWidth) != B_OK)
fLastWidth = 318.0f;
if (m.FindFloat("fLastHeight", &fLastHeight) != B_OK)
fLastHeight = 320.0f;
is_zoomed?ResizeTo(last_width, last_height):ResizeTo(318, 53);
MoveTo(frame.left, frame.top);
fIsZoomed?ResizeTo(fLastWidth, fLastHeight):ResizeTo(318, 53);
MoveTo(fFrame.left, fFrame.top);
fLogFile = new BFile(log_path.String(), B_CREATE_FILE | B_WRITE_ONLY
fLogFile = new BFile(fLogPath.String(), B_CREATE_FILE | B_WRITE_ONLY
| B_OPEN_AT_END);
if (fLogFile->InitCheck() != B_OK) {
log_file_flag = false;
fLogFileFlag = false;
//log it to console, "log to file unavailable."
return B_OK;
}
SetDirLabel(web_directory.String());
SetDirLabel(fWebDirectory.String());
return B_OK;
}
@ -730,24 +661,24 @@ PoorManWindow::SaveSettings()
BMessage m(MSG_PREF_FILE);
//site tab
m.AddString("web_directory", web_directory);
m.AddString("index_file_name", index_file_name);
m.AddBool("dir_list_flag", dir_list_flag);
m.AddString("fWebDirectory", fWebDirectory);
m.AddString("fIndexFileName", fIndexFileName);
m.AddBool("fDirListFlag", fDirListFlag);
//logging tab
m.AddBool("log_console_flag", log_console_flag);
m.AddBool("log_file_flag", log_file_flag);
m.AddString("log_path", log_path);
m.AddBool("fLogConsoleFlag", fLogConsoleFlag);
m.AddBool("fLogFileFlag", fLogFileFlag);
m.AddString("fLogPath", fLogPath);
//advance tab
m.AddInt16("max_connections", max_connections);
m.AddInt16("fMaxConnections", fMaxConnections);
//windows' position and size
m.AddRect("frame", frame);
m.AddRect("setwindow_frame", setwindow_frame);
m.AddBool("is_zoomed", is_zoomed);
m.AddFloat("last_width", last_width);
m.AddFloat("last_height", last_height);
m.AddRect("frame", fFrame);
m.AddRect("fSetwindowFrame", fSetwindowFrame);
m.AddBool("fIsZoomed", fIsZoomed);
m.AddFloat("fLastWidth", fLastWidth);
m.AddFloat("fLastHeight", fLastHeight);
if (find_directory(B_USER_SETTINGS_DIRECTORY, &p) != B_OK)
return B_ERROR;
@ -768,18 +699,15 @@ status_t
PoorManWindow::StartServer()
{
if (fServer == NULL)
fServer = new PoorManServer(
web_directory.String(),
max_connections,
dir_list_flag,
index_file_name.String());
fServer = new PoorManServer(fWebDirectory.String(), fMaxConnections,
fDirListFlag, fIndexFileName.String());
poorman_log(B_TRANSLATE("Starting up... "));
if (fServer->Run() != B_OK) {
return B_ERROR;
}
status = true;
fStatus = true;
UpdateStatusLabelAndMenuItem();
poorman_log(B_TRANSLATE("done.\n"), false, INADDR_NONE, GREEN);
@ -795,7 +723,7 @@ PoorManWindow::StopServer()
poorman_log(B_TRANSLATE("Shutting down.\n"));
fServer->Stop();
status = false;
fStatus = false;
UpdateStatusLabelAndMenuItem();
return B_OK;
}
@ -804,7 +732,7 @@ PoorManWindow::StopServer()
void
PoorManWindow::SetLogPath(const char* str)
{
if (!strcmp(log_path, str))
if (!strcmp(fLogPath, str))
return;
BFile* temp = new BFile(str, B_CREATE_FILE | B_WRITE_ONLY | B_OPEN_AT_END);
@ -823,5 +751,5 @@ PoorManWindow::SetLogPath(const char* str)
return;
}
log_path.SetTo(str);
fLogPath.SetTo(str);
}

View File

@ -33,125 +33,132 @@ class PoorManServer;
class PoorManWindow: public BWindow
{
public:
PoorManWindow(BRect frame);
virtual ~PoorManWindow();
virtual void MessageReceived(BMessage * message);
PoorManWindow(BRect frame);
virtual ~PoorManWindow();
virtual void MessageReceived(BMessage* message);
virtual void FrameMoved(BPoint origin);
virtual void FrameResized(float width, float height);
virtual bool QuitRequested();
virtual void Zoom(BPoint origin, float width, float height);
virtual void FrameMoved(BPoint origin);
virtual void FrameResized(float width, float height);
virtual bool QuitRequested();
virtual void Zoom(BPoint origin, float width, float height);
// -------------------------------------------
// Public PoorMan Window Methods
void SetDirLabel(const char * name);
void SetHits(uint32 num);
uint32 GetHits() { return hits; }
status_t SaveConsole(BMessage * message, bool);
void SetDirLabel(const char* name);
void SetHits(uint32 num);
uint32 GetHits() { return fHits; }
status_t SaveConsole(BMessage* message, bool);
status_t SaveSettings();
status_t ReadSettings();
void DefaultSettings();
status_t SaveSettings();
status_t ReadSettings();
void DefaultSettings();
status_t StartServer();
status_t StopServer();
status_t StartServer();
status_t StopServer();
PoorManServer* GetServer()const{return fServer;}
PoorManServer* GetServer() const { return fServer;}
// -------------------------------------------
// Preferences and Settings
// Site Tab
bool DirListFlag() { return dir_list_flag; }
void SetDirListFlag(bool flag) { dir_list_flag = flag; }
const char * IndexFileName() { return index_file_name.String(); }
void SetIndexFileName(const char * str) { index_file_name.SetTo(str); }
const char * WebDir() { return web_directory.String(); }
void SetWebDir(const char * str) { web_directory.SetTo(str); }
bool DirListFlag()
{ return fDirListFlag; }
void SetDirListFlag(bool flag)
{ fDirListFlag = flag; }
const char* IndexFileName()
{ return fIndexFileName.String(); }
void SetIndexFileName(const char* str)
{ fIndexFileName.SetTo(str); }
const char* WebDir()
{ return fWebDirectory.String(); }
void SetWebDir(const char* str)
{ fWebDirectory.SetTo(str); }
// Logging Tab
bool LogConsoleFlag() { return log_console_flag; }
void SetLogConsoleFlag(bool flag) { log_console_flag = flag; }
bool LogFileFlag() { return log_file_flag; }
void SetLogFileFlag(bool flag) { log_file_flag = flag; }
const char * LogPath() { return log_path.String(); }
void SetLogPath(const char * str);
bool LogConsoleFlag()
{ return fLogConsoleFlag; }
void SetLogConsoleFlag(bool flag)
{ fLogConsoleFlag = flag; }
bool LogFileFlag()
{ return fLogFileFlag; }
void SetLogFileFlag(bool flag)
{ fLogFileFlag = flag; }
const char* LogPath()
{ return fLogPath.String(); }
void SetLogPath(const char* str);
// Advanced Tab
int16 MaxConnections() { return max_connections; }
void SetMaxConnections(int16 num) { max_connections = num; }
int16 MaxConnections()
{ return fMaxConnections; }
void SetMaxConnections(int16 num)
{ fMaxConnections = num; }
private:
// -------------------------------------------
// PoorMan Window Methods
void UpdateStatusLabelAndMenuItem();
void UpdateHitsLabel();
void UpdateStatusLabelAndMenuItem();
void UpdateHitsLabel();
private:
// -------------------------------------------
// PoorMan Window
PoorManView * mainView;
// -------------------------------------------
// Build Menu Methods
BMenu * BuildFileMenu() const;
BMenu * BuildEditMenu() const;
BMenu * BuildControlsMenu() const;
BMenu* BuildFileMenu() const;
BMenu* BuildEditMenu() const;
BMenu* BuildControlsMenu() const;
// --------------------------------------------
// MenuBar & Menu items
BMenuBar * FileMenuBar;
BMenu * FileMenu;
BMenu * EditMenu;
BMenu * ControlsMenu;
BMenuBar* fFileMenuBar;
BMenu* fFileMenu;
BMenu* fEditMenu;
BMenu* fControlsMenu;
// --------------------------------------------
// Status, Hits, Directory
BStringView * statusView;
BStringView * hitsView;
BStringView * dirView;
BStringView* fStatusView;
BStringView* fHitsView;
BStringView* fDirView;
bool status;
uint32 hits;
char hitsLabel[25];
bool fStatus;
uint32 fHits;
char fHitsLabel[25];
// --------------------------------------------
// Logging View
BScrollView * scrollView;
BTextView * loggingView;
BScrollView* fScrollView;
BTextView* fLoggingView;
// use asctime() for format of [Date/Time]:
// -------------------------------------------
// PoorMan Preference Window
PoorManPreferencesWindow * prefWindow;
PoorManPreferencesWindow * fPrefWindow;
// site tab
BString web_directory;
BString index_file_name;
bool dir_list_flag;
BString fWebDirectory;
BString fIndexFileName;
bool fDirListFlag;
// logging tab
bool log_console_flag;
bool log_file_flag;
BString log_path;
bool fLogConsoleFlag;
bool fLogFileFlag;
BString fLogPath;
// advanced tab
int16 max_connections;
int16 fMaxConnections;
bool is_zoomed;
float last_width;
float last_height;
BRect frame;
BRect setwindow_frame;
bool fIsZoomed;
float fLastWidth;
float fLastHeight;
BRect fFrame;
BRect fSetwindowFrame;
// File Panels
BFilePanel * saveConsoleFilePanel;
BFilePanel * saveConsoleSelectionFilePanel;
BFilePanel* fSaveConsoleFilePanel;
BFilePanel* fSaveConsoleSelectionFilePanel;
BFile* fLogFile;
BFont* fLogViewFont;
BFile* fLogFile;
PoorManServer* fServer;
PoorManServer* fServer;
pthread_rwlock_t fLogFileLock;
pthread_rwlock_t fLogFileLock;
};
#endif

View File

@ -11,31 +11,19 @@
#include <stdio.h>
StatusSlider::StatusSlider (BRect frame,
const char *name,
const char *label,
char *statusPrefix,
BMessage *message,
int32 minValue,
int32 maxValue)
: BSlider(frame,
name,
label,
message,
minValue,
maxValue
),
StatusPrefix(statusPrefix)
StatusSlider::StatusSlider(const char* name, const char* label,
char* statusPrefix, BMessage* message, int32 minValue, int32 maxValue)
:
BSlider(name, label, message, minValue, maxValue, B_HORIZONTAL),
fStatusPrefix(statusPrefix)
{
temp = str;
fTemp = fStr;
}
const char*
StatusSlider::UpdateText() const
{
sprintf(temp, "%ld %s", Value(), StatusPrefix);
return temp;
sprintf(fTemp, "%ld %s", Value(), fStatusPrefix);
return fTemp;
}

View File

@ -13,21 +13,21 @@
#include <Slider.h>
class StatusSlider: public BSlider
{
class StatusSlider: public BSlider {
public:
StatusSlider(BRect frame,
const char *name,
const char *label,
char *statusPrefix,
BMessage *message,
int32 minValue,
int32 maxValue);
virtual const char* UpdateText() const;
StatusSlider(const char* name,
const char* label,
char* statusPrefix,
BMessage* message,
int32 minValue,
int32 maxValue);
virtual const char* UpdateText() const;
private:
char * StatusPrefix;
char * temp;
char str[128];
char* fStatusPrefix;
char* fTemp;
char fStr[128];
};
#endif