implemented switch terminals... cute little implementation duplicates R5 behavior exactly afaict

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@4262 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
shatty
2003-08-10 08:53:12 +00:00
parent c8a095c755
commit 1ede0ee1df
2 changed files with 72 additions and 10 deletions
+64 -9
View File
@@ -22,6 +22,8 @@
#include <TerminalTextView.h>
#include <TerminalWindow.h>
#include <debugger.h>
int id = 1;
TerminalWindow::TerminalWindow(BPoint topLeft, BMessage * settings)
@@ -238,21 +240,20 @@ void
TerminalWindow::MessageReceived(BMessage *message)
{
switch (message->what){
case TERMINAL_START_NEW_TERMINAL: {
status_t result = be_roster->Launch(APP_SIGNATURE);
if (result != B_OK) {
// TODO: notify user
}
}
case TERMINAL_START_NEW_TERMINAL:
StartNewTerminal(message);
break;
case TERMINAL_SWITCH_TERMINAL:
SwitchTerminals(message);
break;
case B_COPY:
fTextView->Copy(be_clipboard);
EditCopy(message);
break;
case B_PASTE:
fTextView->Paste(be_clipboard);
EditPaste(message);
break;
case EDIT_CLEAR_ALL:
fTextView->Clear();
EditClearAll(message);
break;
// case FONT_SIZE:
// {
@@ -317,3 +318,57 @@ TerminalWindow::QuitRequested()
return true;
}
void
TerminalWindow::StartNewTerminal(BMessage * message)
{
status_t result = be_roster->Launch(APP_SIGNATURE);
if (result != B_OK) {
// TODO: notify user
debugger("TerminalWindow::StartNewTerminal failed in Launch");
}
}
void
TerminalWindow::SwitchTerminals(BMessage * message)
{
status_t result;
thread_id id = find_thread(NULL);
thread_info info;
result = get_thread_info(id,&info);
if (result != B_OK) {
// TODO: notify user
debugger("TerminalWindow::SwitchTerminals failed in get_thread_info");
return;
}
BList teams;
be_roster->GetAppList(APP_SIGNATURE,&teams);
int32 index = teams.IndexOf((void*)info.team);
if (index < -1) {
// TODO: notify user
debugger("TerminalWindow::SwitchTerminals failed in IndexOf");
return;
}
do {
index = (index-1)%teams.CountItems();
team_id next = (team_id)teams.ItemAt(index);
result = be_roster->ActivateApp(next);
} while (result != B_OK);
}
void
TerminalWindow::EditCopy(BMessage * message)
{
fTextView->Copy(be_clipboard);
}
void
TerminalWindow::EditPaste(BMessage * message)
{
fTextView->Paste(be_clipboard);
}
void
TerminalWindow::EditClearAll(BMessage * message)
{
fTextView->Clear();
}
+8 -1
View File
@@ -25,10 +25,17 @@ public:
virtual void MenusBeginning(void);
virtual status_t InitCheck(void);
private:
private:
status_t InitWindow(int32 id, entry_ref * settingsRef = 0);
status_t RestoreSettings(entry_ref * settingsRef = 0);
// message received helpers
void StartNewTerminal(BMessage * message);
void SwitchTerminals(BMessage * message);
void EditCopy(BMessage * message);
void EditPaste(BMessage * message);
void EditClearAll(BMessage * message);
// Menu variables
BMenuBar *fMenuBar;