Author: juha
Date: 2007-11-04 23:14:51 +0000 (Sun, 04 Nov 2007)
New Revision: 26258
Modified:
xfcalendar/trunk/src/day-view.c
xfcalendar/trunk/src/ical-code.c
xfcalendar/trunk/src/mainbox.c
xfcalendar/trunk/src/mainbox.h
Log:
Part I of Bug 3601:
Added TODO window into mainbox and made it to refreshed.
Modified: xfcalendar/trunk/src/day-view.c
===================================================================
--- xfcalendar/trunk/src/day-view.c 2007-11-04 13:52:54 UTC (rev 26257)
+++ xfcalendar/trunk/src/day-view.c 2007-11-04 23:14:51 UTC (rev 26258)
@@ -513,22 +513,19 @@
dw->bg1.red += (dw->bg1.red < 64000 ? 1000 : -1000);
dw->bg1.green += (dw->bg1.green < 64000 ? 1000 : -1000);
dw->bg1.blue += (dw->bg1.blue < 64000 ? 1000 : -1000);
- dw->bg1.pixel = (gulong)(dw->bg1.red*65536+dw->bg1.green*256+dw->bg1.blue);
gdk_colormap_alloc_color(pic1_cmap, &dw->bg1, FALSE, TRUE);
dw->bg2 = def_style->bg[GTK_STATE_NORMAL];
dw->bg2.red += (dw->bg2.red > 1000 ? -1000 : 1000);
dw->bg2.green += (dw->bg2.green > 1000 ? -1000 : 1000);
dw->bg2.blue += (dw->bg2.blue > 2000 ? -2000 : 2000);
- dw->bg2.pixel = (gulong)(dw->bg2.red*65536+dw->bg2.green*256+dw->bg2.blue);
gdk_colormap_alloc_color(pic1_cmap, &dw->bg2, FALSE, TRUE);
- dw->line_color = def_style->bg[GTK_STATE_NORMAL];
- dw->line_color.red = 239 * (65535/255);
- dw->line_color.green = 235 * (65535/255);
- dw->line_color.blue = 230 * (65535/255);
- dw->line_color.pixel = (gulong)(dw->line_color.red*65536
- + dw->line_color.green*256 + dw->line_color.blue);
+ if (!gdk_color_parse("white", &dw->line_color)) {
+ dw->line_color.red = 239 * (65535/255);
+ dw->line_color.green = 235 * (65535/255);
+ dw->line_color.blue = 230 * (65535/255);
+ }
gdk_colormap_alloc_color(pic1_cmap, &dw->line_color, FALSE, TRUE);
}
@@ -546,15 +543,19 @@
GdkColormap *pic1_cmap;
pic1_cmap = gdk_colormap_get_system();
- fg.red = 255 * (65535/255);
- fg.green = 10 * (65535/255);
- fg.blue = 10 * (65535/255);
- fg.pixel = (gulong)(fg.red*65536 + fg.green*256 +fg.blue);
+ if (!gdk_color_parse("red", &fg)) {
+ g_warning("color parse failed: red\n");
+ fg.red = 255 * (65535/255);
+ fg.green = 10 * (65535/255);
+ fg.blue = 10 * (65535/255);
+ }
gdk_colormap_alloc_color(pic1_cmap, &fg, FALSE, TRUE);
- bg.red = 255 * (65535/255);
- bg.green = 215 * (65535/255);
- bg.blue = 115 * (65535/255);
- bg.pixel = (gulong)(bg.red*65536 + bg.green*256 +bg.blue);
+ if (!gdk_color_parse("gold", &bg)) {
+ g_warning("color parse failed: gold\n");
+ bg.red = 255 * (65535/255);
+ bg.green = 215 * (65535/255);
+ bg.blue = 115 * (65535/255);
+ }
gdk_colormap_alloc_color(pic1_cmap, &bg, FALSE, TRUE);
days = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(dw->day_spin));
Modified: xfcalendar/trunk/src/ical-code.c
===================================================================
--- xfcalendar/trunk/src/ical-code.c 2007-11-04 13:52:54 UTC (rev 26257)
+++ xfcalendar/trunk/src/ical-code.c 2007-11-04 23:14:51 UTC (rev 26258)
@@ -3006,6 +3006,7 @@
, file_type);
}
setup_orage_alarm_clock();
+ build_mainbox_info();
}
void xfical_alarm_build_list(gboolean first_list_today)
@@ -3046,7 +3047,7 @@
icalproperty *p = NULL;
static icalcompiter ci;
gboolean date_found=FALSE;
- gboolean date_rec_found=FALSE;
+ gboolean recurrent_date_found=FALSE;
char *uid;
xfical_appt *appt;
struct icalrecurrencetype rrule;
@@ -3107,7 +3108,20 @@
, ICAL_RRULE_PROPERTY)) != 0) { /* check recurring */
nsdate = icaltime_null_time();
rrule = icalproperty_get_rrule(p);
- ri = icalrecur_iterator_new(rrule, per.stime);
+ /* FIXME:
+ * for soem VTODOs you do not want to start over regularly
+ * from the starttime, but actually from the latest completed
+ * time. This kind of VTODOs do not have startdate! */
+ /*
+ if (type == XFICAL_TYPE_TODO) {
+ if (!icaltime_is_null_time(per.ctime))
+ ri = icalrecur_iterator_new(rrule, per.ctime);
+ else
+ ri = icalrecur_iterator_new(rrule, per.stime);
+ }
+ else
+ */
+ ri = icalrecur_iterator_new(rrule, per.stime);
for (nsdate = icalrecur_iterator_next(ri),
nedate = icaltime_add(nsdate, per.duration);
!icaltime_is_null_time(nsdate)
@@ -3132,13 +3146,13 @@
if (type == XFICAL_TYPE_TODO) {
if (!icaltime_is_null_time(nsdate)) {
date_found = TRUE;
- date_rec_found = TRUE;
+ recurrent_date_found = TRUE;
}
}
else if (local_compare_date_only(nsdate, aedate) <= 0
&& local_compare_date_only(asdate, nedate) <= 0) {
date_found = TRUE;
- date_rec_found = TRUE;
+ recurrent_date_found = TRUE;
}
}
}
@@ -3148,7 +3162,7 @@
return(0);
}
appt = appt_get_any(uid, base, file_type);
- if (date_rec_found) {
+ if (recurrent_date_found) {
g_strlcpy(appt->starttimecur, icaltime_as_ical_string(nsdate), 17);
g_strlcpy(appt->endtimecur, icaltime_as_ical_string(nedate), 17);
}
Modified: xfcalendar/trunk/src/mainbox.c
===================================================================
--- xfcalendar/trunk/src/mainbox.c 2007-11-04 13:52:54 UTC (rev 26257)
+++ xfcalendar/trunk/src/mainbox.c 2007-11-04 23:14:51 UTC (rev 26258)
@@ -49,8 +49,7 @@
#include "tray_icon.h"
-gboolean
-orage_mark_appointments()
+gboolean orage_mark_appointments()
{
guint year, month, day;
@@ -64,8 +63,7 @@
return(TRUE);
}
-static void
-mFile_newApp_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
+static void mFile_newApp_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
{
appt_win *app;
struct tm *t;
@@ -77,58 +75,55 @@
app = create_appt_win("NEW", cur_date, NULL);
}
-static void
-mFile_interface_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
+static void mFile_interface_activate_cb(GtkMenuItem *menuitem
+ , gpointer user_data)
{
CalWin *cal = (CalWin *)user_data;
orage_external_interface(cal);
}
-static void
-mFile_close_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
+static void mFile_close_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
{
CalWin *cal = (CalWin *)user_data;
gtk_widget_hide(cal->mWindow);
}
-static void
-mFile_quit_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
+static void mFile_quit_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
{
gtk_main_quit();
}
-static void
-mEdit_preferences_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
+static void mEdit_preferences_activate_cb(GtkMenuItem *menuitem
+ , gpointer user_data)
{
show_parameters();
}
-static void
-mView_ViewSelectedDate_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
+static void mView_ViewSelectedDate_activate_cb(GtkMenuItem *menuitem
+ , gpointer user_data)
{
create_el_win(NULL);
}
-static void
-mView_ViewSelectedWeek_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
+static void mView_ViewSelectedWeek_activate_cb(GtkMenuItem *menuitem
+ , gpointer user_data)
{
CalWin *cal = (CalWin *)user_data;
create_day_win(orage_cal_to_i18_date(GTK_CALENDAR(cal->mCalendar)));
}
-static void
-mView_selectToday_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
+static void mView_selectToday_activate_cb(GtkMenuItem *menuitem
+ , gpointer user_data)
{
CalWin *cal = (CalWin *)user_data;
orage_select_today(GTK_CALENDAR(cal->mCalendar));
}
-static void
-mHelp_help_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
+static void mHelp_help_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
{
gchar *helpdoc;
@@ -144,14 +139,13 @@
*/
}
-static void
-mHelp_about_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
+static void mHelp_about_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
{
create_wAbout((GtkWidget *)menuitem, user_data);
}
-static void
-mCalendar_scroll_event_cb(GtkWidget *calendar, GdkEventScroll *event)
+static void mCalendar_scroll_event_cb(GtkWidget *calendar
+ , GdkEventScroll *event)
{
guint year, month, day;
gtk_calendar_get_date(GTK_CALENDAR(calendar), &year, &month, &day);
@@ -176,17 +170,16 @@
}
}
-static void
-mCalendar_day_selected_double_click_cb(GtkCalendar *cdar, gpointer user_data)
+static void mCalendar_day_selected_double_click_cb(GtkCalendar *calendar
+ , gpointer user_data)
{
if (g_par.show_days)
- create_day_win(orage_cal_to_i18_date(cdar));
+ create_day_win(orage_cal_to_i18_date(calendar));
else
create_el_win(NULL);
}
-static gboolean
-upd_calendar(GtkCalendar *calendar)
+static gboolean upd_calendar(GtkCalendar *calendar)
{
static guint year=-1, month=-1;
guint year_n, month_n, day_n;
@@ -203,8 +196,7 @@
return(FALSE); /* we do this only once */
}
-void
-mCalendar_month_changed_cb(GtkCalendar *calendar, gpointer user_data)
+void mCalendar_month_changed_cb(GtkCalendar *calendar, gpointer user_data)
{
/* orage_mark_appointments is rather heavy (=slow), so doing
* it here is not a good idea. We can't keep up with the autorepeat
@@ -295,6 +287,92 @@
, G_CALLBACK(mHelp_about_activate_cb),(gpointer) cal);
}
+static void todo_clicked(GtkWidget *widget
+ , GdkEventButton *event, gpointer *user_data)
+{
+ gchar *uid;
+
+ uid = g_object_get_data(G_OBJECT(widget), "UID");
+ create_appt_win("UPDATE", uid, NULL);
+}
+
+static void add_info_row(xfical_appt *appt)
+{
+ GtkWidget *ev, *label;
+ CalWin *cal = g_par.xfcal;
+ gchar *tip;
+
+ ev = gtk_event_box_new();
+ label = gtk_label_new(appt->title);
+ gtk_label_set_ellipsize(GTK_LABEL(label), PANGO_ELLIPSIZE_END);
+ gtk_container_add(GTK_CONTAINER(ev), label);
+ gtk_box_pack_start(GTK_BOX(cal->mInfo_vbox), ev, FALSE, FALSE, 0);
+ tip = g_strdup_printf("%s\n%s-%s\n%s", appt->title, appt->starttimecur
+ , appt->endtimecur ,appt->note);
+ gtk_tooltips_set_tip(cal->Tooltips, ev, tip, NULL);
+ g_free(tip);
+ g_object_set_data_full(G_OBJECT(ev), "UID", g_strdup(appt->uid), g_free);
+ g_signal_connect((gpointer)ev, "button-press-event"
+ , G_CALLBACK(todo_clicked), cal);
+
+}
+
+static void info_rows(char *a_day, xfical_type ical_type, gchar *file_type)
+{
+ xfical_appt *appt;
+
+ for (appt = xfical_appt_get_next_on_day(a_day, TRUE, 0
+ , ical_type , file_type);
+ appt;
+ appt = xfical_appt_get_next_on_day(a_day, FALSE, 0
+ , ical_type , file_type)) {
+ add_info_row(appt);
+ xfical_appt_free(appt);
+ }
+}
+
+void build_mainbox_info(void)
+{
+ CalWin *cal = g_par.xfcal;
+ char *s_time;
+ char a_day[9]; /* yyyymmdd */
+ struct tm *t;
+ xfical_type ical_type;
+ gchar file_type[8];
+ gint i;
+
+
+ gtk_widget_destroy(cal->mInfo_scrolledWin);
+ cal->mInfo_scrolledWin = gtk_scrolled_window_new(NULL, NULL);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(cal->mInfo_scrolledWin)
+ , GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
+ gtk_box_pack_start(GTK_BOX(cal->mVbox), cal->mInfo_scrolledWin
+ , FALSE, FALSE, 0);
+ cal->mInfo_vbox = gtk_vbox_new(FALSE, 0);
+ gtk_scrolled_window_add_with_viewport(
+ GTK_SCROLLED_WINDOW(cal->mInfo_scrolledWin), cal->mInfo_vbox);
+
+ t = orage_localtime();
+ s_time = orage_tm_time_to_icaltime(t);
+ strncpy(a_day, s_time, 8);
+ a_day[8] = '\0';
+
+ ical_type = XFICAL_TYPE_TODO;
+ /* first search base orage file */
+ if (!xfical_file_open(TRUE))
+ return;
+ strcpy(file_type, "O00.");
+ info_rows(a_day, ical_type, file_type);
+ /* then process all foreign files */
+ for (i = 0; i < g_par.foreign_count; i++) {
+ g_sprintf(file_type, "F%02d.", i);
+ info_rows(a_day, ical_type, file_type);
+ }
+ xfical_file_close(TRUE);
+
+ gtk_widget_show_all(cal->mInfo_scrolledWin);
+}
+
void build_mainWin()
{
GdkPixbuf *orage_logo;
@@ -304,9 +382,8 @@
* when date changes. Could be added, but not worth it.
* Dynamic icon is used in systray and about windows */
orage_logo = orage_create_icon(cal, TRUE, 48, 48);
- /* orage_logo = xfce_themed_icon_load("xfcalendar", 48); */
- /* orage_logo = create_icon(cal, 48, 48); */
cal->mAccel_group = gtk_accel_group_new();
+ cal->Tooltips = gtk_tooltips_new();
gtk_window_set_title(GTK_WINDOW(cal->mWindow), _("Orage"));
gtk_window_set_position(GTK_WINDOW(cal->mWindow), GTK_WIN_POS_NONE);
@@ -335,6 +412,11 @@
| GTK_CALENDAR_SHOW_WEEK_NUMBERS);
gtk_widget_show(cal->mCalendar);
+ /* Build the Info box */
+ /* build_mainbox_info always deletes scrolled window, so we create one
here */
+ cal->mInfo_scrolledWin = gtk_scrolled_window_new(NULL, NULL);
+ build_mainbox_info();
+
/* Signals */
g_signal_connect((gpointer) cal->mCalendar, "scroll_event"
, G_CALLBACK(mCalendar_scroll_event_cb), NULL);
Modified: xfcalendar/trunk/src/mainbox.h
===================================================================
--- xfcalendar/trunk/src/mainbox.h 2007-11-04 13:52:54 UTC (rev 26257)
+++ xfcalendar/trunk/src/mainbox.h 2007-11-04 23:14:51 UTC (rev 26258)
@@ -26,8 +26,12 @@
typedef struct _CalWin
{
+ GtkAccelGroup *mAccel_group;
+ GtkTooltips *Tooltips;
+
GtkWidget *mWindow;
GtkWidget *mVbox;
+
GtkWidget *mMenubar;
GtkWidget *mFile_menu;
GtkWidget *mFile_newApp;
@@ -43,12 +47,15 @@
GtkWidget *mHelp_menu;
GtkWidget *mHelp_help;
GtkWidget *mHelp_about;
+
GtkWidget *mCalendar;
- GtkAccelGroup *mAccel_group;
+ GtkWidget *mInfo_scrolledWin;
+ GtkWidget *mInfo_vbox;
} CalWin;
void build_mainWin();
gboolean orage_mark_appointments();
+void build_mainbox_info();
#endif /* !__MAINBOX_H__ */
_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits