Add an info StringView giving current time or error.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25072 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
François Revol 2008-04-20 03:32:07 +00:00
parent adfe1993eb
commit 8b2e7d3032
3 changed files with 37 additions and 4 deletions

View File

@ -11,14 +11,14 @@
#define BW 60
LoginView::LoginView(BRect frame)
: BView(frame, "LoginView", B_FOLLOW_ALL, 0)
: BView(frame, "LoginView", B_FOLLOW_ALL, B_PULSE_NEEDED)
{
// TODO: when I don't need to test in BeOS anymore,
// rewrite to use layout engine.
SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
SetLowColor(ViewColor());
BRect r;
r.Set(CSEP, CSEP, 80, Bounds().Height() - 3 * CSEP - BH);
r.Set(CSEP, CSEP, 90, Bounds().Height() - 3 * CSEP - BH);
fUserList = new BListView(r, "users");
BScrollView *sv = new BScrollView("userssv", fUserList,
B_FOLLOW_LEFT | B_FOLLOW_TOP, 0, false, true);
@ -59,12 +59,20 @@ LoginView::LoginView(BRect frame)
new BMessage(kRebootAction));
AddChild(fRebootButton);
BRect infoRect(buttonRect);
infoRect.OffsetBySelf(buttonWidth + CSEP, 0);
buttonRect.OffsetToSelf(Bounds().Width() - CSEP - buttonWidth,
Bounds().Height() - CSEP - BH);
fLoginButton = new BButton(buttonRect, "ok", "Ok",
new BMessage(kAttemptLogin));
AddChild(fLoginButton);
infoRect.right = buttonRect.left - CSEP + 5;
BString info;
//info << hostname;
fInfoView = new BStringView(infoRect, "info", info.String());
AddChild(fInfoView);
}
@ -130,6 +138,7 @@ LoginView::MessageReceived(BMessage *message)
case kLoginBad:
fPasswordControl->SetText("");
EnableControls(false);
fInfoView->SetText("Invalid login!");
if (Window()) {
BPoint savedPos = Window()->Frame().LeftTop();
for (int i = 0; i < 10; i++) {
@ -156,6 +165,19 @@ LoginView::MessageReceived(BMessage *message)
}
void
LoginView::Pulse()
{
BString info;
time_t now = time(NULL);
struct tm *t = localtime(&now);
// TODO: use strftime and locale settings
info << asctime(t);
info.RemoveSet("\r\n");
fInfoView->SetText(info.String());
}
void
LoginView::AddNextUser()
{
@ -184,6 +206,10 @@ LoginView::AddNextUser()
void
LoginView::EnableControls(bool enable)
{
int32 i;
for (i = 0; i < fUserList->CountItems(); i++) {
fUserList->ItemAt(i)->SetEnabled(enable);
}
fLoginControl->SetEnabled(enable);
fPasswordControl->SetEnabled(enable);
fHidePasswordCheckBox->SetEnabled(enable);

View File

@ -3,6 +3,7 @@
#include <View.h>
#include <ListItem.h>
#include <ListView.h>
#include <StringView.h>
#include <TextControl.h>
const uint32 kUserSelected = 'usel';
@ -19,6 +20,7 @@ public:
virtual ~LoginView();
void AttachedToWindow();
void MessageReceived(BMessage *message);
void Pulse();
private:
void AddNextUser();
@ -31,5 +33,8 @@ private:
BButton* fHaltButton;
BButton* fRebootButton;
BButton* fLoginButton;
BStringView* fInfoView;
//TODO:
//BShelf* fShelf;
};

View File

@ -2,13 +2,15 @@
#include "LoginView.h"
LoginWindow::LoginWindow(BRect frame)
: BWindow(frame, /*"Login"*/"Welcome to Haiku", B_TITLED_WINDOW_LOOK,
: BWindow(frame, "Welcome to Haiku", B_TITLED_WINDOW_LOOK,
B_NORMAL_WINDOW_FEEL/*B_FLOATING_ALL_WINDOW_FEEL*/,
B_NOT_MOVABLE | B_NOT_CLOSABLE | B_NOT_ZOOMABLE |
B_NOT_MINIMIZABLE | B_NOT_RESIZABLE | B_ASYNCHRONOUS_CONTROLS)
B_NOT_MINIMIZABLE | B_NOT_RESIZABLE |
B_ASYNCHRONOUS_CONTROLS)
{
LoginView *v = new LoginView(Bounds());
AddChild(v);
SetPulseRate(1000000LL);
}