Fixed some crashing bugs (that only appear under Haiku, because there is some
stuff missing - defensive programming rules :-)). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13005 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -107,16 +107,19 @@ set_pixel_clock(display_mode * mode, float refresh_rate)
|
|||||||
|
|
||||||
|
|
||||||
ScreenWindow::ScreenWindow(ScreenSettings *Settings)
|
ScreenWindow::ScreenWindow(ScreenSettings *Settings)
|
||||||
: BWindow(Settings->WindowFrame(), "Screen", B_TITLED_WINDOW, B_NOT_RESIZABLE | B_NOT_ZOOMABLE, B_ALL_WORKSPACES)
|
: BWindow(Settings->WindowFrame(), "Screen", B_TITLED_WINDOW,
|
||||||
|
B_NOT_RESIZABLE | B_NOT_ZOOMABLE, B_ALL_WORKSPACES)
|
||||||
{
|
{
|
||||||
BRect frame(Bounds());
|
BRect frame(Bounds());
|
||||||
BScreen screen(B_MAIN_SCREEN_ID);
|
BScreen screen(B_MAIN_SCREEN_ID);
|
||||||
|
|
||||||
if (!screen.IsValid())
|
if (!screen.IsValid())
|
||||||
;//debugger() ?
|
;//debugger() ?
|
||||||
|
|
||||||
|
fSupportedModes = NULL;
|
||||||
|
fTotalModes = 0;
|
||||||
screen.GetModeList(&fSupportedModes, &fTotalModes);
|
screen.GetModeList(&fSupportedModes, &fTotalModes);
|
||||||
|
|
||||||
frame.InsetBy(-1, -1);
|
frame.InsetBy(-1, -1);
|
||||||
fScreenView = new BBox(frame, "ScreenView");
|
fScreenView = new BBox(frame, "ScreenView");
|
||||||
fScreenDrawView = new ScreenDrawView(BRect(20.0, 16.0, 122.0, 93.0), "ScreenDrawView");
|
fScreenDrawView = new ScreenDrawView(BRect(20.0, 16.0, 122.0, 93.0), "ScreenDrawView");
|
||||||
@@ -141,31 +144,32 @@ ScreenWindow::ScreenWindow(ScreenSettings *Settings)
|
|||||||
|
|
||||||
BString string;
|
BString string;
|
||||||
string << count_workspaces();
|
string << count_workspaces();
|
||||||
|
|
||||||
BMenuItem *marked = fWorkspaceCountMenu->FindItem(string.String());
|
BMenuItem *marked = fWorkspaceCountMenu->FindItem(string.String());
|
||||||
marked->SetMarked(true);
|
if (marked != NULL)
|
||||||
|
marked->SetMarked(true);
|
||||||
|
|
||||||
fWorkspaceCountField->SetDivider(91.0);
|
fWorkspaceCountField->SetDivider(91.0);
|
||||||
|
|
||||||
screenBox->AddChild(fScreenDrawView);
|
screenBox->AddChild(fScreenDrawView);
|
||||||
screenBox->AddChild(fWorkspaceCountField);
|
screenBox->AddChild(fWorkspaceCountField);
|
||||||
fScreenView->AddChild(screenBox);
|
fScreenView->AddChild(screenBox);
|
||||||
|
|
||||||
fWorkspaceMenu = new BPopUpMenu("Current Workspace", true, true);
|
fWorkspaceMenu = new BPopUpMenu("Current Workspace", true, true);
|
||||||
fAllWorkspacesItem = new BMenuItem("All Workspaces", new BMessage(WORKSPACE_CHECK_MSG));
|
fAllWorkspacesItem = new BMenuItem("All Workspaces", new BMessage(WORKSPACE_CHECK_MSG));
|
||||||
fWorkspaceMenu->AddItem(fAllWorkspacesItem);
|
fWorkspaceMenu->AddItem(fAllWorkspacesItem);
|
||||||
fCurrentWorkspaceItem = new BMenuItem("Current Workspace", new BMessage(WORKSPACE_CHECK_MSG));
|
fCurrentWorkspaceItem = new BMenuItem("Current Workspace", new BMessage(WORKSPACE_CHECK_MSG));
|
||||||
fCurrentWorkspaceItem->SetMarked(true);
|
fCurrentWorkspaceItem->SetMarked(true);
|
||||||
fWorkspaceMenu->AddItem(fCurrentWorkspaceItem);
|
fWorkspaceMenu->AddItem(fCurrentWorkspaceItem);
|
||||||
|
|
||||||
BRect workspaceMenuRect(0.0, 0.0, 132.0, 18.0);
|
BRect workspaceMenuRect(0.0, 0.0, 132.0, 18.0);
|
||||||
fWorkspaceField = new BMenuField(workspaceMenuRect, "WorkspaceMenu", NULL, fWorkspaceMenu, true);
|
fWorkspaceField = new BMenuField(workspaceMenuRect, "WorkspaceMenu", NULL, fWorkspaceMenu, true);
|
||||||
|
|
||||||
BRect controlsBoxRect(164.0, 7.0, 345.0, 155.0);
|
BRect controlsBoxRect(164.0, 7.0, 345.0, 155.0);
|
||||||
BBox *controlsBox = new BBox(controlsBoxRect);
|
BBox *controlsBox = new BBox(controlsBoxRect);
|
||||||
controlsBox->SetBorder(B_FANCY_BORDER);
|
controlsBox->SetBorder(B_FANCY_BORDER);
|
||||||
controlsBox->SetLabel(fWorkspaceField);
|
controlsBox->SetLabel(fWorkspaceField);
|
||||||
|
|
||||||
BRect ButtonRect(88.0, 114.0, 200.0, 150.0);
|
BRect ButtonRect(88.0, 114.0, 200.0, 150.0);
|
||||||
fApplyButton = new BButton(ButtonRect, "ApplyButton", "Apply",
|
fApplyButton = new BButton(ButtonRect, "ApplyButton", "Apply",
|
||||||
new BMessage(BUTTON_APPLY_MSG));
|
new BMessage(BUTTON_APPLY_MSG));
|
||||||
@@ -182,65 +186,67 @@ ScreenWindow::ScreenWindow(ScreenSettings *Settings)
|
|||||||
|
|
||||||
CheckUpdateDisplayModes();
|
CheckUpdateDisplayModes();
|
||||||
|
|
||||||
const char * resolutionLabel = "Resolution: ";
|
const char *resolutionLabel = "Resolution: ";
|
||||||
float resolutionWidth = controlsBox->StringWidth(resolutionLabel);
|
float resolutionWidth = controlsBox->StringWidth(resolutionLabel);
|
||||||
BRect controlMenuRect(88.0-resolutionWidth, 30.0, 171.0, 48.0);
|
BRect controlMenuRect(88.0-resolutionWidth, 30.0, 171.0, 48.0);
|
||||||
fResolutionField = new BMenuField(controlMenuRect, "ResolutionMenu", resolutionLabel, fResolutionMenu, true);
|
fResolutionField = new BMenuField(controlMenuRect, "ResolutionMenu", resolutionLabel, fResolutionMenu, true);
|
||||||
|
|
||||||
marked = fResolutionMenu->ItemAt(0);
|
marked = fResolutionMenu->ItemAt(0);
|
||||||
marked->SetMarked(true);
|
if (marked != NULL)
|
||||||
|
marked->SetMarked(true);
|
||||||
|
|
||||||
fResolutionField->SetDivider(resolutionWidth);
|
fResolutionField->SetDivider(resolutionWidth);
|
||||||
|
|
||||||
controlsBox->AddChild(fResolutionField);
|
controlsBox->AddChild(fResolutionField);
|
||||||
|
|
||||||
const char * colorsLabel = "Colors: ";
|
const char *colorsLabel = "Colors: ";
|
||||||
float colorsWidth = controlsBox->StringWidth(colorsLabel);
|
float colorsWidth = controlsBox->StringWidth(colorsLabel);
|
||||||
controlMenuRect.Set(88.0-colorsWidth, 58.0, 171.0, 76.0);
|
controlMenuRect.Set(88.0-colorsWidth, 58.0, 171.0, 76.0);
|
||||||
fColorsField = new BMenuField(controlMenuRect, "ColorsMenu", colorsLabel, fColorsMenu, true);
|
fColorsField = new BMenuField(controlMenuRect, "ColorsMenu", colorsLabel, fColorsMenu, true);
|
||||||
|
|
||||||
marked = fColorsMenu->ItemAt(0);
|
marked = fColorsMenu->ItemAt(0);
|
||||||
marked->SetMarked(true);
|
if (marked != NULL)
|
||||||
|
marked->SetMarked(true);
|
||||||
|
|
||||||
fColorsField->SetDivider(colorsWidth);
|
fColorsField->SetDivider(colorsWidth);
|
||||||
|
|
||||||
controlsBox->AddChild(fColorsField);
|
controlsBox->AddChild(fColorsField);
|
||||||
|
|
||||||
fOtherRefresh = new BMenuItem("Other...", new BMessage(POP_OTHER_REFRESH_MSG));
|
fOtherRefresh = new BMenuItem("Other...", new BMessage(POP_OTHER_REFRESH_MSG));
|
||||||
fRefreshMenu->AddItem(fOtherRefresh);
|
fRefreshMenu->AddItem(fOtherRefresh);
|
||||||
|
|
||||||
const char * refreshLabel = "Refresh Rate: ";
|
const char *refreshLabel = "Refresh Rate: ";
|
||||||
float refreshWidth = controlsBox->StringWidth(refreshLabel);
|
float refreshWidth = controlsBox->StringWidth(refreshLabel);
|
||||||
controlMenuRect.Set(88.0-refreshWidth, 86.0, 171.0, 104.0);
|
controlMenuRect.Set(88.0-refreshWidth, 86.0, 171.0, 104.0);
|
||||||
fRefreshField = new BMenuField(controlMenuRect, "RefreshMenu", refreshLabel, fRefreshMenu, true);
|
fRefreshField = new BMenuField(controlMenuRect, "RefreshMenu", refreshLabel, fRefreshMenu, true);
|
||||||
|
|
||||||
fRefreshField->SetDivider(refreshWidth);
|
fRefreshField->SetDivider(refreshWidth);
|
||||||
|
|
||||||
controlsBox->AddChild(fRefreshField);
|
controlsBox->AddChild(fRefreshField);
|
||||||
|
|
||||||
fScreenView->AddChild(controlsBox);
|
fScreenView->AddChild(controlsBox);
|
||||||
|
|
||||||
ButtonRect.Set(10.0, 167, 100.0, 200.0);
|
ButtonRect.Set(10.0, 167, 100.0, 200.0);
|
||||||
|
|
||||||
fDefaultsButton = new BButton(ButtonRect, "DefaultsButton", "Defaults",
|
fDefaultsButton = new BButton(ButtonRect, "DefaultsButton", "Defaults",
|
||||||
new BMessage(BUTTON_DEFAULTS_MSG));
|
new BMessage(BUTTON_DEFAULTS_MSG));
|
||||||
|
|
||||||
fDefaultsButton->AttachedToWindow();
|
fDefaultsButton->AttachedToWindow();
|
||||||
fDefaultsButton->ResizeToPreferred();
|
fDefaultsButton->ResizeToPreferred();
|
||||||
|
|
||||||
fScreenView->AddChild(fDefaultsButton);
|
fScreenView->AddChild(fDefaultsButton);
|
||||||
|
|
||||||
ButtonRect.Set(95.0, 167, 160.0, 200.0);
|
ButtonRect.Set(95.0, 167, 160.0, 200.0);
|
||||||
|
|
||||||
fRevertButton = new BButton(ButtonRect, "RevertButton", "Revert",
|
fRevertButton = new BButton(ButtonRect, "RevertButton", "Revert",
|
||||||
new BMessage(BUTTON_REVERT_MSG));
|
new BMessage(BUTTON_REVERT_MSG));
|
||||||
|
|
||||||
fRevertButton->AttachedToWindow();
|
fRevertButton->AttachedToWindow();
|
||||||
fRevertButton->ResizeToPreferred();
|
fRevertButton->ResizeToPreferred();
|
||||||
fRevertButton->SetEnabled(false);
|
fRevertButton->SetEnabled(false);
|
||||||
|
|
||||||
fScreenView->AddChild(fRevertButton);
|
fScreenView->AddChild(fRevertButton);
|
||||||
|
|
||||||
SetStateByMode();
|
SetStateByMode();
|
||||||
|
|
||||||
fCustomRefresh = fInitialRefreshN;
|
fCustomRefresh = fInitialRefreshN;
|
||||||
|
|||||||
Reference in New Issue
Block a user