Some cleaning for VGA
[mokosuite2:mokopanel.git] / src / panel.h
1 /*
2  * Mokosuite
3  * Notification panel window
4  * Copyright (C) 2009-2010 Daniele Ricci <daniele.athome@gmail.com>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License along
17  * with this program; if not, write to the Free Software Foundation, Inc.,
18  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19  */
20
21 #ifndef __PANEL_H
22 #define __PANEL_H
23
24 #include <Elementary.h>
25 #include <glib-object.h>
26
27 #include "globals.h"
28
29 /* default category */
30 #define DEFAULT_CATEGORY        "unknown"
31 #define DEFAULT_ICON            MOKOPANEL_DATADIR "/unknown.png"
32
33 typedef struct {
34
35     /* sequence ID for notifications */
36     guint sequence;
37
38     /* panel window */
39     Evas_Object* win;
40
41     /* panel layout */
42     Evas_Object* layout;
43
44     /* page container */
45     Evas_Object* pager;
46
47     /* main box for front page content */
48     Evas_Object* hbox;
49
50     /* filler */
51     Evas_Object* fill;
52
53     /* clock */
54     Evas_Object* time;
55
56     /* date */
57     Evas_Object* date;
58     gboolean date_pushed;
59
60     /* battery */
61     Evas_Object* battery;
62
63     /* gsm */
64     Evas_Object* gsm;
65
66     /* gps */
67     Evas_Object* gps;
68
69     /* topmost object */
70     Evas_Object* topmost;
71
72     /* categories (mapping to Eina_List of MokoNotification) */
73     GHashTable* categories;
74
75     /* notification icons list in front page */
76     Eina_List* list;
77
78     /* coda delle notifiche testuali da visualizzare (array [ id nella lista, testo, icona ]) */
79     GQueue* queue;
80
81     /* coda delle notifiche testuali da ripresentare (come queue) */
82     GQueue* represent;
83
84     /* generic callback */
85     void* callback;
86
87     /* TRUE if the panel has already called strut */
88     gboolean has_strut;
89
90     /* D-Bus notification service */
91     GObject* service;
92
93 } MokoPanel;
94
95 #if 0
96 typedef struct {
97
98     /* panel stuff */
99     MokoPanel* panel;
100
101     /* notification window stuff */
102     Evas_Object* list;
103     Elm_Genlist_Item* item;
104     Evas_Object* win;
105
106     /* list of notifications in this group */
107     Eina_List*
108
109     /* icon path */
110     char* icon_path;
111
112     /* first line of list item */
113     char* summary_format;
114     char* summary;
115     /* second line of list item */
116     char* body_format;
117     char* body;
118
119     /* notification category */
120     char* category;
121
122 } MokoNotificationGroup;
123 #endif
124
125 typedef struct {
126
127     /* panel stuff */
128     MokoPanel* panel;
129     guint id;
130
131     /* notification window stuff */
132     #if 0
133     MokoNotificationGroup* group;
134     #else
135     Evas_Object* list;
136     Elm_Genlist_Item* item;
137     Evas_Object* win;
138     #endif
139
140     /* icon object - might be shared across notification of same category */
141     Evas_Object* icon;
142     /* icon path */
143     char* icon_path;
144
145     /* notification summary - first line of list item */
146     char* summary;
147     /* notification body - scrolled text in front page and second line of list item */
148     char* body;
149
150     char** actions;
151     int timeout;
152
153     /* notification category -- extracted from hints */
154     char* category;
155
156     /* don't push scrolled text -- extracted from hints */
157     gboolean dont_push;
158     /* push on resume -- extracted from hints */
159     gboolean show_on_resume;
160     /* insist with sound -- extracted from hints */
161     gboolean insistent;
162     /* ongoing event -- extracted from hints */
163     gboolean ongoing;
164     /* don't clear on clear all -- extracted from hints */
165     gboolean no_clear;
166     /* delete on click -- extracted from hints */
167     gboolean autodel;
168
169 } MokoNotification;
170
171 //#define PANEL_HEIGHT        18
172 //#define PANEL_WIDTH         (SCALE_FACTOR * 240)
173 #define ICON_SIZE           (SCALE_FACTOR * 20)
174
175 #define MOKOPANEL_CALLBACK_NOTIFICATION_START       1
176 #define MOKOPANEL_CALLBACK_NOTIFICATION_END         2
177 #define MOKOPANEL_CALLBACK_NOTIFICATION_HIDE        3
178
179 typedef void (*MokoPanelCallback)(MokoPanel* panel, int event, gpointer data);
180
181 void mokopanel_append_object(MokoPanel* panel, Evas_Object* obj);
182
183 void mokopanel_fire_event(MokoPanel* panel, int event, gpointer data);
184 void mokopanel_event(MokoPanel* panel, int event, gpointer data);
185
186 void mokopanel_notification_represent(MokoPanel* panel);
187 int mokopanel_count_notifications(MokoPanel* panel, const char* category);
188 Elm_Genlist_Item* mokopanel_get_list_item(MokoPanel* panel, const char* category);
189 Eina_List* mokopanel_get_category(MokoPanel* panel, const char* category);
190
191 void mokopanel_notification_remove(MokoPanel* panel, guint id);
192 guint mokopanel_notification_queue(MokoPanel* panel,
193         const char* app_name, guint id, const char* icon, const char* summary,
194         const char* body, char** actions, int actions_length, GHashTable* hints,
195         int timeout);
196
197 MokoPanel* mokopanel_new(const char* name, const char* title);
198
199 char** mokopanel_notification_caps(MokoPanel* panel, int* length);
200
201 #endif  /* __PANEL_H */