aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/chat/messenger.c2
-rw-r--r--src/event.c61
-rw-r--r--src/ui/chat_entry.c55
-rw-r--r--src/ui/chat_entry.h48
-rw-r--r--src/ui/messenger.c7
5 files changed, 165 insertions, 8 deletions
diff --git a/src/chat/messenger.c b/src/chat/messenger.c
index 2996af3..62b93e8 100644
--- a/src/chat/messenger.c
+++ b/src/chat/messenger.c
@@ -59,6 +59,8 @@ _chat_messenger_message(void *cls,
59 59
60 if (GNUNET_CHAT_KIND_LOGIN == GNUNET_CHAT_message_get_kind(message)) 60 if (GNUNET_CHAT_KIND_LOGIN == GNUNET_CHAT_message_get_kind(message))
61 application_call_event(app, event_update_profile); 61 application_call_event(app, event_update_profile);
62 else if (GNUNET_CHAT_KIND_TEXT == GNUNET_CHAT_message_get_kind(message))
63 printf("%s\n", GNUNET_CHAT_message_get_text(message));
62 64
63 return GNUNET_YES; 65 return GNUNET_YES;
64} 66}
diff --git a/src/event.c b/src/event.c
index 851536f..e04fe5c 100644
--- a/src/event.c
+++ b/src/event.c
@@ -24,16 +24,73 @@
24 24
25#include "event.h" 25#include "event.h"
26 26
27#include "ui/chat_entry.h"
28
29static int
30_iterate_profile_contacts(void *cls,
31 UNUSED struct GNUNET_CHAT_Handle *handle,
32 UNUSED struct GNUNET_CHAT_Contact *contact)
33{
34 MESSENGER_Application *app = (MESSENGER_Application*) cls;
35
36 UI_MESSENGER_Handle *ui = &(app->ui.messenger);
37
38 UI_CHAT_ENTRY_Handle *entry = ui_chat_entry_new();
39
40 gtk_container_add(GTK_CONTAINER(ui->chats_listbox), entry->entry_box);
41
42 g_free(entry); //TODO: add to a list or similar?
43
44 return GNUNET_YES;
45}
46
47static int
48_iterate_profile_groups(void *cls,
49 UNUSED struct GNUNET_CHAT_Handle *handle,
50 UNUSED struct GNUNET_CHAT_Group *group)
51{
52 MESSENGER_Application *app = (MESSENGER_Application*) cls;
53
54 UI_MESSENGER_Handle *ui = &(app->ui.messenger);
55
56 UI_CHAT_ENTRY_Handle *entry = ui_chat_entry_new();
57
58 gtk_container_add(GTK_CONTAINER(ui->chats_listbox), entry->entry_box);
59
60 g_free(entry); //TODO: add to a list or similar?
61
62 return GNUNET_YES;
63}
64
65static void
66_clear_each_widget(GtkWidget *widget,
67 gpointer user_data)
68{
69 GtkContainer *container = GTK_CONTAINER(user_data);
70
71 gtk_container_remove(container, widget);
72}
73
27void 74void
28event_update_profile(MESSENGER_Application *app) 75event_update_profile(MESSENGER_Application *app)
29{ 76{
30 UI_MESSENGER_Handle* ui = &(app->ui.messenger); 77 UI_MESSENGER_Handle *ui = &(app->ui.messenger);
78 CHAT_MESSENGER_Handle *chat = &(app->chat.messenger);
31 79
32 const char *name = GNUNET_CHAT_get_name(app->chat.messenger.handle); 80 const char *name = GNUNET_CHAT_get_name(chat->handle);
33 81
34 if (name) 82 if (name)
35 { 83 {
36 hdy_avatar_set_text(ui->profile_avatar, name); 84 hdy_avatar_set_text(ui->profile_avatar, name);
37 gtk_label_set_text(ui->profile_label, name); 85 gtk_label_set_text(ui->profile_label, name);
38 } 86 }
87
88 gtk_container_foreach(
89 GTK_CONTAINER(ui->chats_listbox),
90 _clear_each_widget,
91 ui->chats_listbox
92 );
93
94 GNUNET_CHAT_iterate_contacts(chat->handle, _iterate_profile_contacts, app);
95 GNUNET_CHAT_iterate_groups(chat->handle, _iterate_profile_groups, app);
39} 96}
diff --git a/src/ui/chat_entry.c b/src/ui/chat_entry.c
new file mode 100644
index 0000000..5ff7063
--- /dev/null
+++ b/src/ui/chat_entry.c
@@ -0,0 +1,55 @@
1/*
2 This file is part of GNUnet.
3 Copyright (C) 2021 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20/*
21 * @author Tobias Frisch
22 * @file ui/chat_entry.c
23 */
24
25#include "chat_entry.h"
26
27UI_CHAT_ENTRY_Handle*
28ui_chat_entry_new(void)
29{
30 UI_CHAT_ENTRY_Handle* handle = g_malloc(sizeof(UI_CHAT_ENTRY_Handle));
31
32 GtkBuilder* builder = gtk_builder_new_from_file("resources/ui/chat_entry.ui");
33
34 handle->entry_box = GTK_WIDGET(
35 gtk_builder_get_object(builder, "entry_box")
36 );
37
38 handle->avatar = HDY_AVATAR(
39 gtk_builder_get_object(builder, "avatar")
40 );
41
42 handle->title = GTK_LABEL(
43 gtk_builder_get_object(builder, "title")
44 );
45
46 handle->timestamp = GTK_LABEL(
47 gtk_builder_get_object(builder, "timestamp")
48 );
49
50 handle->text = GTK_LABEL(
51 gtk_builder_get_object(builder, "text")
52 );
53
54 return handle;
55}
diff --git a/src/ui/chat_entry.h b/src/ui/chat_entry.h
new file mode 100644
index 0000000..48f2fb7
--- /dev/null
+++ b/src/ui/chat_entry.h
@@ -0,0 +1,48 @@
1/*
2 This file is part of GNUnet.
3 Copyright (C) 2021 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20/*
21 * @author Tobias Frisch
22 * @file ui/chat_entry.h
23 */
24
25#ifndef UI_CHAT_ENTRY_H_
26#define UI_CHAT_ENTRY_H_
27
28#include <gtk-3.0/gtk/gtk.h>
29#include <libhandy-1/handy.h>
30
31typedef struct MESSENGER_Application MESSENGER_Application;
32
33typedef struct UI_CHAT_ENTRY_Handle
34{
35 GtkWidget* entry_box;
36
37 HdyAvatar* avatar;
38
39 GtkLabel* title;
40 GtkLabel* timestamp;
41
42 GtkLabel* text;
43} UI_CHAT_ENTRY_Handle;
44
45UI_CHAT_ENTRY_Handle*
46ui_chat_entry_new(void);
47
48#endif /* UI_CHAT_ENTRY_H_ */
diff --git a/src/ui/messenger.c b/src/ui/messenger.c
index ebfde36..46ee362 100644
--- a/src/ui/messenger.c
+++ b/src/ui/messenger.c
@@ -92,12 +92,7 @@ void
92ui_messenger_init(MESSENGER_Application *app, 92ui_messenger_init(MESSENGER_Application *app,
93 UI_MESSENGER_Handle *handle) 93 UI_MESSENGER_Handle *handle)
94{ 94{
95 GtkBuilder* builder = gtk_builder_new(); 95 GtkBuilder* builder = gtk_builder_new_from_file("resources/ui/messenger.ui");
96 gtk_builder_add_from_file(
97 builder,
98 "resources/ui/messenger.ui",
99 NULL
100 );
101 96
102 handle->main_window = GTK_APPLICATION_WINDOW( 97 handle->main_window = GTK_APPLICATION_WINDOW(
103 gtk_builder_get_object(builder, "main_window") 98 gtk_builder_get_object(builder, "main_window")