/***************************************************************************
* messagewindow.cpp
*
* Thu Jul 7 04:16:00 2005
* Copyright 2005 User
* Email
****************************************************************************/
#include "messagewindow.h"
simpleMessageWindow::simpleMessageWindow(userEventType type, gchar* _commentText, gchar* _topicText)
{
_commentText? commentText = g_strdup_printf("%s", _commentText): commentText = NULL;
_topicText? topicText = g_strdup_printf("%s", _topicText): topicText = NULL;
wType = type;
hasText = FALSE;
}
simpleMessageWindow::~simpleMessageWindow()
{
if (commentText)
g_free(commentText);
if (topicText)
g_free(topicText);
delete manager;
}
GtkWidget* simpleMessageWindow::createWindowContent()
{
GtkWidget *infoButton,
*historyButton,
*hbox1,
*vbox1,
*label1,
*label2,
*frame;
gchar *text;
// create headline (info-button, history-button, name)
infoButton = u_createStockImageButton(ICON_INFO);
g_signal_connect_swapped(infoButton, "clicked", G_CALLBACK(this->cb_infoButtonClicked), this);
historyButton = u_createStockImageButton(ICON_HISTORY);
g_signal_connect_swapped(historyButton, "clicked", G_CALLBACK(this->cb_historyButtonClicked), this);
if (manager->parentUser && !manager->parentUser->info->isOnList)
gtk_widget_set_sensitive(historyButton, FALSE);
label1 = gtk_label_new("");
text = g_strdup_printf(topicText, manager->info->alias);
gtk_label_set_markup(GTK_LABEL(label1), text);
g_free(text);
gtk_misc_set_alignment(GTK_MISC(label1), 0.0f, 0.5f);
hbox1 = gtk_hbox_new(FALSE,1);
gtk_box_pack_start(GTK_BOX(hbox1), infoButton, FALSE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(hbox1), historyButton, FALSE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(hbox1), label1, TRUE, TRUE, 2);
// create the window comment
label2 = gtk_label_new(commentText);
gtk_label_set_use_markup(GTK_LABEL(label2), TRUE);
gtk_label_set_line_wrap(GTK_LABEL(label2), TRUE);
gtk_misc_set_alignment(GTK_MISC(label2), 0.0f, 0.0f);
// create the comment box
frame = u_createTextView(&comment);
gtk_text_view_set_editable(GTK_TEXT_VIEW(comment), FALSE);
vbox1 = gtk_vbox_new(FALSE, 4);
gtk_container_set_border_width(GTK_CONTAINER(vbox1), 6);
gtk_box_pack_start(GTK_BOX(vbox1), hbox1, FALSE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(vbox1), label2, FALSE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(vbox1), frame, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(vbox1), gtk_hseparator_new(), FALSE, TRUE, 5);
gtk_box_pack_start(GTK_BOX(vbox1), createButtonbar(), FALSE, TRUE, 0);
setWindowSize(300, 300);
return vbox1;
}
GtkWidget* simpleMessageWindow::createButtonbar()
{
GtkWidget *hbox,
*addToListButton,
*closeButton;
addToListButton = NULL;
if (manager->parentUser && !manager->parentUser->info->isOnList)
{
addToListButton = u_createTextStockImageButton(tr("_Add to List"), GTK_STOCK_ADD);
g_signal_connect(addToListButton, "clicked", G_CALLBACK(this->cb_addToListButtonClicked), this);
}
closeButton = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
g_signal_connect_swapped(closeButton, "clicked", G_CALLBACK(this->cb_destroyWindow), this);
hbox = gtk_hbox_new(FALSE, 2);
if (manager->parentUser && !manager->parentUser->info->isOnList)
gtk_box_pack_start(GTK_BOX(hbox), addToListButton, FALSE, FALSE, 0);
gtk_box_pack_end(GTK_BOX(hbox), closeButton, FALSE, FALSE, 0);
return hbox;
}
void simpleMessageWindow::destroyWindowContent()
{
}
gboolean simpleMessageWindow::eventCallback(gint command, gint lastResult, gpointer info)
{
generalEventInfo *ev;
GtkTextBuffer *buf;
if (command != UC_EVENT_RECEIVED || hasText)
return TRUE;
ev = (generalEventInfo*)info;
buf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(comment));
gtk_text_buffer_set_text(buf, ev->text, strlen(ev->text));
hasText = TRUE;
manager->deleteEvent(EO_FIRST | EO_NORMAL | EO_SYSTEM);
return TRUE;
}
void simpleMessageWindow::cb_addToListButtonClicked(GtkWidget *button, simpleMessageWindow *self)
{
if (self->manager->parentUser && self->manager->parentUser->owner)
((IMOwnerDaemon*)self->manager->parentUser->owner)->addUserToList(self->manager->info->licqID, TRUE);
gtk_widget_set_sensitive(button, FALSE);
}
void simpleMessageWindow::cb_infoButtonClicked(simpleMessageWindow *self)
{
if (self->manager->parentUser)
self->manager->parentUser->startCallback(EC_FROMMANAGER, UE_USERINFO, NULL);
}
void simpleMessageWindow::cb_historyButtonClicked(simpleMessageWindow *self)
{
if (self->manager->parentUser)
self->manager->parentUser->startCallback(EC_FROMMANAGER, UE_HISTORY, NULL);
}