2 * Copyright 2002-2006, Haiku, Inc. All Rights Reserved.
3 * Distributed under the terms of the MIT License.
11 #include "Constants.h"
12 #include "FindWindow.h"
17 #include <GroupLayoutBuilder.h>
18 #include <GridLayoutBuilder.h>
20 #include <LayoutBuilder.h>
22 #include <TextControl.h>
25 #undef B_TRANSLATION_CONTEXT
26 #define B_TRANSLATION_CONTEXT "FindandReplaceWindow"
29 FindWindow::FindWindow(BRect frame
, BHandler
* _handler
, BString
* searchString
,
30 bool caseState
, bool wrapState
, bool backState
)
31 : BWindow(frame
, "FindWindow", B_MODAL_WINDOW
,
32 B_NOT_RESIZABLE
| B_ASYNCHRONOUS_CONTROLS
| B_AUTO_UPDATE_SIZE_LIMITS
,
35 AddShortcut('W', B_COMMAND_KEY
, new BMessage(B_QUIT_REQUESTED
));
37 fSearchString
= new BTextControl("", B_TRANSLATE("Find:"), NULL
, NULL
);
38 fCaseSensBox
= new BCheckBox("", B_TRANSLATE("Case-sensitive"), NULL
);
39 fWrapBox
= new BCheckBox("", B_TRANSLATE("Wrap-around search"), NULL
);
40 fBackSearchBox
= new BCheckBox("", B_TRANSLATE("Search backwards"), NULL
);
41 fCancelButton
= new BButton("", B_TRANSLATE("Cancel"),
42 new BMessage(B_QUIT_REQUESTED
));
43 fSearchButton
= new BButton("", B_TRANSLATE("Find"),
44 new BMessage(MSG_SEARCH
));
46 SetLayout(new BGroupLayout(B_HORIZONTAL
));
47 AddChild(BGroupLayoutBuilder(B_VERTICAL
, 4)
48 .Add(BGridLayoutBuilder(6, 2)
49 .Add(fSearchString
->CreateLabelLayoutItem(), 0, 0)
50 .Add(fSearchString
->CreateTextViewLayoutItem(), 1, 0)
51 .Add(fCaseSensBox
, 1, 1)
53 .Add(fBackSearchBox
, 1, 3)
55 .AddGroup(B_HORIZONTAL
, 10)
60 .SetInsets(10, 10, 10, 10)
63 fSearchButton
->MakeDefault(true);
66 const char* text
= searchString
->String();
68 fSearchString
->SetText(text
);
69 fSearchString
->MakeFocus(true);
71 fCaseSensBox
->SetValue(caseState
? B_CONTROL_ON
: B_CONTROL_OFF
);
72 fWrapBox
->SetValue(wrapState
? B_CONTROL_ON
: B_CONTROL_OFF
);
73 fBackSearchBox
->SetValue(backState
? B_CONTROL_ON
: B_CONTROL_OFF
);
78 FindWindow::MessageReceived(BMessage
* msg
)
81 case B_QUIT_REQUESTED
:
89 BWindow::MessageReceived(msg
);
96 FindWindow::DispatchMessage(BMessage
* message
, BHandler
* handler
)
98 if (message
->what
== B_KEY_DOWN
) {
100 if (message
->FindInt8("byte", 0, &key
) == B_OK
) {
101 if (key
== B_ESCAPE
) {
102 message
->MakeEmpty();
103 message
->what
= B_QUIT_REQUESTED
;
108 BWindow::DispatchMessage(message
, handler
);
113 FindWindow::_SendMessage()
115 BMessage
message(MSG_SEARCH
);
118 message
.AddString("findtext", fSearchString
->Text());
120 // Add searchparameters from checkboxes
121 message
.AddBool("casesens", fCaseSensBox
->Value() == B_CONTROL_ON
);
122 message
.AddBool("wrap", fWrapBox
->Value() == B_CONTROL_ON
);
123 message
.AddBool("backsearch", fBackSearchBox
->Value() == B_CONTROL_ON
);
125 fHandler
->Looper()->PostMessage(&message
, fHandler
);
127 PostMessage(B_QUIT_REQUESTED
);