/*************************************************************************** * 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); }