Modal empty dialog is no fun!
Here come a template Add Printer dialog. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@1066 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
96d2746579
commit
9e99c74dd0
@ -26,6 +26,10 @@
|
||||
// BeOS API
|
||||
#include <Box.h>
|
||||
#include <Button.h>
|
||||
#include <TextControl.h>
|
||||
#include <MenuField.h>
|
||||
#include <PopUpMenu.h>
|
||||
#include <StringView.h>
|
||||
#include <ListView.h>
|
||||
#include <ScrollView.h>
|
||||
#include <Application.h>
|
||||
@ -36,7 +40,8 @@ status_t AddPrinterDialog::Start() {
|
||||
}
|
||||
|
||||
AddPrinterDialog::AddPrinterDialog()
|
||||
: Inherited(BRect(78.0, 71.0, 561.0, 409.0), "Add Printer", B_MODAL_WINDOW, B_NOT_H_RESIZABLE)
|
||||
: Inherited(BRect(78.0, 71.0, 400, 300), "Add Printer",
|
||||
B_TITLED_WINDOW_LOOK, B_MODAL_APP_WINDOW_FEEL, B_NOT_RESIZABLE | B_NOT_ZOOMABLE)
|
||||
{
|
||||
BuildGUI(0);
|
||||
|
||||
@ -48,6 +53,13 @@ void AddPrinterDialog::MessageReceived(BMessage* msg)
|
||||
{
|
||||
switch(msg->what)
|
||||
{
|
||||
case B_OK:
|
||||
// TODO: create the new spooler!
|
||||
// fallback not to dialog cancelling case...
|
||||
case B_CANCEL:
|
||||
PostMessage(B_QUIT_REQUESTED);
|
||||
break;
|
||||
|
||||
default:
|
||||
Inherited::MessageReceived(msg);
|
||||
}
|
||||
@ -55,15 +67,127 @@ void AddPrinterDialog::MessageReceived(BMessage* msg)
|
||||
|
||||
void AddPrinterDialog::BuildGUI(int stage)
|
||||
{
|
||||
const float boxInset = 10.0;
|
||||
BRect r(Bounds());
|
||||
BRect r, tr;
|
||||
float x, y, w, h;
|
||||
BButton * ok;
|
||||
BButton * cancel;
|
||||
BTextControl * tc;
|
||||
BPopUpMenu * pum;
|
||||
BMenuField * mf;
|
||||
BStringView * sv;
|
||||
BBox * bb;
|
||||
|
||||
#define H_MARGIN 8
|
||||
#define V_MARGIN 8
|
||||
#define LINE_MARGIN 3
|
||||
|
||||
#define NAME_LABEL "Printer Name:"
|
||||
#define KIND_LABEL "Printer Type:"
|
||||
#define PORT_LABEL "Connected to:"
|
||||
#define DRIVER_SETTINGS_AREA_TEXT "Driver settings area, if any."
|
||||
#define TRANSPORT_SETTINGS_AREA_TEXT "Transport settings area, if any."
|
||||
|
||||
// ------------------------ First of all, create a nice grey backdrop
|
||||
BBox * backdrop = new BBox(Bounds(), "backdrop", B_FOLLOW_ALL_SIDES,
|
||||
BBox * panel = new BBox(Bounds(), "backdrop", B_FOLLOW_ALL,
|
||||
B_WILL_DRAW | B_FRAME_EVENTS | B_NAVIGABLE_JUMP,
|
||||
B_PLAIN_BORDER);
|
||||
AddChild(backdrop);
|
||||
AddChild(panel);
|
||||
|
||||
r = panel->Bounds();
|
||||
|
||||
r.InsetBy(H_MARGIN, V_MARGIN);
|
||||
|
||||
// add a "printer name" input field
|
||||
tc = new BTextControl(r, "printer_name",
|
||||
NAME_LABEL, B_EMPTY_STRING, NULL);
|
||||
tc->SetAlignment(B_ALIGN_LEFT, B_ALIGN_LEFT);
|
||||
panel->AddChild(tc);
|
||||
tc->SetFont(be_bold_font);
|
||||
tc->GetPreferredSize(&w, &h);
|
||||
tc->SetDivider(be_bold_font->StringWidth(NAME_LABEL "#"));
|
||||
tc->ResizeTo(tc->Bounds().Width(), h);
|
||||
|
||||
r.OffsetBy(0, h + 2*V_MARGIN);
|
||||
|
||||
// add a "driver" settings box
|
||||
bb = new BBox(r, "driver_box", B_FOLLOW_TOP | B_FOLLOW_LEFT_RIGHT,
|
||||
B_WILL_DRAW | B_FRAME_EVENTS | B_NAVIGABLE_JUMP,
|
||||
B_FANCY_BORDER);
|
||||
panel->AddChild(bb);
|
||||
|
||||
pum = new BPopUpMenu("<pick one>");
|
||||
mf = new BMenuField(r, "drivers_list", KIND_LABEL, pum,
|
||||
B_FOLLOW_TOP | B_FOLLOW_LEFT_RIGHT,
|
||||
B_WILL_DRAW | B_FRAME_EVENTS | B_NAVIGABLE);
|
||||
mf->SetFont(be_plain_font);
|
||||
mf->SetDivider(be_plain_font->StringWidth(NAME_LABEL "#"));
|
||||
bb->SetLabel(mf);
|
||||
mf->ResizeToPreferred();
|
||||
mf->GetPreferredSize(&w, &h);
|
||||
|
||||
tr = bb->Bounds();
|
||||
tr.top += h;
|
||||
tr.InsetBy(H_MARGIN, V_MARGIN);
|
||||
|
||||
sv = new BStringView(tr, NULL, DRIVER_SETTINGS_AREA_TEXT);
|
||||
bb->AddChild(sv);
|
||||
sv->ResizeToPreferred();
|
||||
|
||||
bb->ResizeTo(bb->Bounds().Width(), 200);
|
||||
|
||||
r.OffsetBy(0, bb->Frame().Height() + V_MARGIN);
|
||||
|
||||
// add a "transport" settings box
|
||||
bb = new BBox(r, "driver_box", B_FOLLOW_TOP | B_FOLLOW_LEFT_RIGHT,
|
||||
B_WILL_DRAW | B_FRAME_EVENTS | B_NAVIGABLE_JUMP,
|
||||
B_FANCY_BORDER);
|
||||
panel->AddChild(bb);
|
||||
|
||||
// add a "connected to" (aka transports list) menu field
|
||||
pum = new BPopUpMenu("<pick one>");
|
||||
mf = new BMenuField(r, "transports_list", PORT_LABEL, pum,
|
||||
B_FOLLOW_TOP | B_FOLLOW_LEFT_RIGHT,
|
||||
B_WILL_DRAW | B_FRAME_EVENTS | B_NAVIGABLE);
|
||||
mf->SetFont(be_plain_font);
|
||||
mf->SetDivider(be_plain_font->StringWidth(PORT_LABEL "#"));
|
||||
bb->SetLabel(mf);
|
||||
mf->ResizeToPreferred();
|
||||
mf->GetPreferredSize(&w, &h);
|
||||
|
||||
tr = bb->Bounds();
|
||||
tr.top += h;
|
||||
tr.InsetBy(H_MARGIN, V_MARGIN);
|
||||
|
||||
sv = new BStringView(tr, NULL, TRANSPORT_SETTINGS_AREA_TEXT);
|
||||
bb->AddChild(sv);
|
||||
sv->ResizeToPreferred();
|
||||
|
||||
bb->ResizeTo(bb->Bounds().Width(), 100);
|
||||
|
||||
r.OffsetBy(0, bb->Frame().Height() + V_MARGIN);
|
||||
|
||||
// make some space before the buttons row
|
||||
r.OffsetBy(0, V_MARGIN);
|
||||
|
||||
// add a "OK" button, and make it default
|
||||
ok = new BButton(r, NULL, "Add", new BMessage(B_OK), B_FOLLOW_RIGHT | B_FOLLOW_TOP);
|
||||
ok->MakeDefault(true);
|
||||
ok->ResizeToPreferred();
|
||||
ok->GetPreferredSize(&w, &h);
|
||||
x = r.right - w;
|
||||
ok->MoveTo(x, ok->Frame().top); // put the ok bottom at bottom right corner
|
||||
panel->AddChild(ok);
|
||||
|
||||
// add a "Cancel button
|
||||
cancel = new BButton(r, NULL, "Cancel", new BMessage(B_CANCEL), B_FOLLOW_RIGHT | B_FOLLOW_TOP);
|
||||
cancel->ResizeToPreferred();
|
||||
cancel->GetPreferredSize(&w, &h);
|
||||
cancel->MoveTo(x - w - H_MARGIN, r.top); // put cancel button left next the ok button
|
||||
panel->AddChild(cancel);
|
||||
|
||||
// Auto resize window
|
||||
ResizeTo(ok->Frame().right + H_MARGIN, ok->Frame().bottom + V_MARGIN);
|
||||
|
||||
// Stage == 0
|
||||
// init_icon 64x114 Add a Local or Network Printer
|
||||
// ------------------------------
|
||||
|
Loading…
Reference in New Issue
Block a user