git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20114 a95241bf-73f2-0310-859d-f6bbb57e9c96
95 lines
1.8 KiB
C++
95 lines
1.8 KiB
C++
#include "InlineEditor.h"
|
|
#include <MessageFilter.h>
|
|
#include <Handler.h>
|
|
|
|
class EditFilter : public BMessageFilter
|
|
{
|
|
public:
|
|
EditFilter(BTextControl *textbox)
|
|
: BMessageFilter(B_PROGRAMMED_DELIVERY, B_ANY_SOURCE,B_KEY_DOWN)
|
|
{
|
|
fTextBox = textbox;
|
|
}
|
|
|
|
~EditFilter(void)
|
|
{
|
|
}
|
|
|
|
filter_result Filter(BMessage *msg, BHandler **target)
|
|
{
|
|
int32 rawchar;
|
|
msg->FindInt32("raw_char",&rawchar);
|
|
|
|
if (rawchar == B_ESCAPE) {
|
|
BLooper *loop = (*target)->Looper();
|
|
if (loop) {
|
|
BMessenger msgr(loop);
|
|
msgr.SendMessage(B_QUIT_REQUESTED);
|
|
return B_SKIP_MESSAGE;
|
|
}
|
|
} else if (rawchar == B_ENTER) {
|
|
fTextBox->Invoke();
|
|
return B_SKIP_MESSAGE;
|
|
}
|
|
return B_DISPATCH_MESSAGE;
|
|
}
|
|
|
|
private:
|
|
BTextControl *fTextBox;
|
|
|
|
};
|
|
|
|
InlineEditor::InlineEditor(BMessenger target, const BRect &frame,
|
|
const char *text)
|
|
: BWindow(frame,"InlineEditor",B_NO_BORDER_WINDOW_LOOK, B_NORMAL_WINDOW_FEEL,
|
|
B_ASYNCHRONOUS_CONTROLS),
|
|
fMessenger(target),
|
|
fCommand(M_INLINE_TEXT)
|
|
{
|
|
fTextBox = new BTextControl(BRect(0,0,1,1), "inlinebox",NULL, text,
|
|
new BMessage(fCommand), B_FOLLOW_ALL,
|
|
B_WILL_DRAW);
|
|
AddChild(fTextBox);
|
|
fTextBox->SetDivider(0);
|
|
fTextBox->MakeFocus(true);
|
|
|
|
fTextBox->ResizeToPreferred();
|
|
fTextBox->ResizeTo(Bounds().Width(),fTextBox->Bounds().Height());
|
|
ResizeTo(Bounds().Width(), fTextBox->Bounds().Height());
|
|
|
|
AddCommonFilter(new EditFilter(fTextBox));
|
|
}
|
|
|
|
|
|
bool
|
|
InlineEditor::QuitRequested(void)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
|
|
void
|
|
InlineEditor::SetMessage(BMessage *msg)
|
|
{
|
|
fCommand = msg ? msg->what : 0;
|
|
fTextBox->SetMessage(msg);
|
|
}
|
|
|
|
|
|
void
|
|
InlineEditor::MessageReceived(BMessage *msg)
|
|
{
|
|
if (msg->what == fCommand) {
|
|
fMessenger.SendMessage(msg);
|
|
PostMessage(B_QUIT_REQUESTED);
|
|
}
|
|
}
|
|
|
|
void
|
|
InlineEditor::WindowActivated(bool active)
|
|
{
|
|
if (!active)
|
|
PostMessage(B_QUIT_REQUESTED);
|
|
}
|
|
|