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 <TerminalTextView.h>
#include <TerminalWindow.h> #include <TerminalWindow.h>
#include <debugger.h>
int id = 1; int id = 1;
TerminalWindow::TerminalWindow(BPoint topLeft, BMessage * settings) TerminalWindow::TerminalWindow(BPoint topLeft, BMessage * settings)
@@ -238,21 +240,20 @@ void
TerminalWindow::MessageReceived(BMessage *message) TerminalWindow::MessageReceived(BMessage *message)
{ {
switch (message->what){ switch (message->what){
case TERMINAL_START_NEW_TERMINAL: { case TERMINAL_START_NEW_TERMINAL:
status_t result = be_roster->Launch(APP_SIGNATURE); StartNewTerminal(message);
if (result != B_OK) {
// TODO: notify user
}
}
break; break;
case TERMINAL_SWITCH_TERMINAL:
SwitchTerminals(message);
break;
case B_COPY: case B_COPY:
fTextView->Copy(be_clipboard); EditCopy(message);
break; break;
case B_PASTE: case B_PASTE:
fTextView->Paste(be_clipboard); EditPaste(message);
break; break;
case EDIT_CLEAR_ALL: case EDIT_CLEAR_ALL:
fTextView->Clear(); EditClearAll(message);
break; break;
// case FONT_SIZE: // case FONT_SIZE:
// { // {
@@ -317,3 +318,57 @@ TerminalWindow::QuitRequested()
return true; 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 void MenusBeginning(void);
virtual status_t InitCheck(void); virtual status_t InitCheck(void);
private: private:
status_t InitWindow(int32 id, entry_ref * settingsRef = 0); status_t InitWindow(int32 id, entry_ref * settingsRef = 0);
status_t RestoreSettings(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 // Menu variables
BMenuBar *fMenuBar; BMenuBar *fMenuBar;