//---------------------------- Chat Windows ----------------------------------------------
-static char *line, *memo, *chatMemo, *partner, *texts[MAX_CHAT], dirty[MAX_CHAT];
+static char *line, *memo, *chatMemo, *partner, *texts[MAX_CHAT], dirty[MAX_CHAT], *inputs[MAX_CHAT], *icsLine, *tmpLine;
static int activePartner, hidden = 1;
void ChatSwitch P((int n));
#define CHAT_ICS 6
#define CHAT_PARTNER 8
-#define CHAT_OUT 10
-#define CHAT_PANE 11
-#define CHAT_IN 12
+#define CHAT_OUT 11
+#define CHAT_PANE 12
+#define CHAT_IN 13
void PaneSwitch P((void));
+void ClearChat P((void));
WindowPlacement wpTextMenu;
{ 250, T_VSCRL | T_FILL | T_WRAP | T_TOP, 510, NULL, (void*) &memo, NULL, (void*) &ContextMenu, TextBox, "" },
{ 0, 0, 0, NULL, NULL, "", NULL, Break , "" },
{ 0, T_TOP, 100, NULL, (void*) &partner, NULL, NULL, TextBox, N_("Chat partner:") },
+{ 0, SAME_ROW, 0, NULL, (void*) &ClearChat, NULL, NULL, Button, N_("End Chat") },
{ 0, SAME_ROW, 0, NULL, (void*) &PaneSwitch, NULL, NULL, Button, N_("Hide") },
{ 250, T_VSCRL | T_FILL | T_WRAP | T_TOP, 510, NULL, (void*) &chatMemo, NULL, (void*) &ContextMenu, TextBox, "" },
{ 0, 0, 0, NULL, NULL, "", NULL, Break , "" },
if(hidden) BoardToTop();
else PaneSwitch();
break;
+ case 15:
+ NewChat(lastTalker);
+ break;
+ case 14:
+ for(chat=0; chat < MAX_CHAT; chat++) if(!chatPartner[chat][0]) break;
+ if(chat < MAX_CHAT) ChatSwitch(chat + 1);
+ break;
case 10: // <Tab>
chat = start = (activePartner - hidden + MAX_CHAT) % MAX_CHAT;
while(!dirty[chat = (chat + 1)%MAX_CHAT]) if(chat == start) break;
}
void
+DelayedSetText ()
+{
+ SetWidgetText(&chatOptions[CHAT_IN], tmpLine, ChatDlg);
+ SetInsertPos(&chatOptions[CHAT_IN], strlen(tmpLine));
+}
+
+void
DelayedScroll ()
{ // If we do this immediately it does it before shrinking the memo, so the lower half remains hidden (Ughh!)
SetInsertPos(&chatOptions[CHAT_ICS], 999999);
+ SetWidgetText(&chatOptions[CHAT_IN], tmpLine, ChatDlg);
+ SetInsertPos(&chatOptions[CHAT_IN], strlen(tmpLine));
}
void
ChatSwitch (int n)
{
int i, j;
+ char *v;
Show(&chatOptions[CHAT_PANE], 0); // show
if(hidden) ScheduleDelayedEvent(DelayedScroll, 50); // Awful!
+ else ScheduleDelayedEvent(DelayedSetText, 50);
+ GetWidgetText(&chatOptions[CHAT_IN], &v);
+ if(hidden) { ASSIGN(icsLine, v); } else { ASSIGN(inputs[activePartner], v); }
hidden = 0;
activePartner = --n;
if(!texts[n]) texts[n] = strdup("");
SetWidgetLabel(&chatOptions[++j], *chatPartner[i] ? chatPartner[i] : _("New Chat"));
SetColor(dirty[i] ? "#FFC000" : "#FFFFFF", &chatOptions[j]);
}
- SetWidgetText(&chatOptions[CHAT_IN], "", ChatDlg);
+ if(!inputs[n]) { ASSIGN(inputs[n], ""); }
+// SetWidgetText(&chatOptions[CHAT_IN], inputs[n], ChatDlg); // does not work (in this widget only)
+// SetInsertPos(&chatOptions[CHAT_IN], strlen(inputs[n]));
+ tmpLine = inputs[n]; // for the delayed event
HardSetFocus(&chatOptions[strcmp(chatPartner[n], "") ? CHAT_IN : CHAT_PARTNER], 0);
}
void
PaneSwitch ()
{
+ char *v;
Show(&chatOptions[CHAT_PANE], hidden = 1); // hide
+ GetWidgetText(&chatOptions[CHAT_IN], &v);
+ ASSIGN(inputs[activePartner], v);
+ if(!icsLine) { ASSIGN(icsLine, ""); }
+ tmpLine = icsLine; ScheduleDelayedEvent(DelayedSetText, 50);
+// SetWidgetText(&chatOptions[CHAT_IN], icsLine, ChatDlg); // does not work (in this widget only)
+// SetInsertPos(&chatOptions[CHAT_IN], strlen(icsLine));
+}
+
+void
+ClearChat ()
+{ // clear the chat to make it free for other use
+ chatPartner[activePartner][0] = NULLCHAR;
+ ASSIGN(texts[activePartner], "");
+ ASSIGN(inputs[activePartner], "");
+ SetWidgetText(&chatOptions[CHAT_PARTNER], "", ChatDlg);
+ SetWidgetText(&chatOptions[CHAT_OUT], "", ChatDlg);
+ SetWidgetText(&chatOptions[CHAT_IN], "", ChatDlg);
+ SetWidgetLabel(&chatOptions[activePartner+1], _("New Chat"));
+ HardSetFocus(&chatOptions[CHAT_PARTNER], 0);
}
static void
{
if(GenericPopUp(chatOptions, _("ICS Interaction"), ChatDlg, BoardWindow, NONMODAL, appData.topLevel))
AddHandler(&chatOptions[CHAT_PARTNER], ChatDlg, 2), AddHandler(&chatOptions[CHAT_IN], ChatDlg, 2); // treats return as OK
- PaneSwitch(); HardSetFocus(&chatOptions[CHAT_IN], 0);
+ Show(&chatOptions[CHAT_PANE], hidden = 1); // hide
+ HardSetFocus(&chatOptions[CHAT_IN], 0);
MarkMenu("View.OpenChatWindow", ChatDlg);
CursorAtEnd(&chatOptions[CHAT_IN]);
}