aboutsummaryrefslogblamecommitdiffstats
path: root/calendar/year-view.c
blob: c3d60570860ea00f0558b01d0626fc1494aa2aa9 (plain) (tree)
1
2
3
4
5
6
7
8
9
10









                                                   

























































                                                                         


                                 


           
                                 




                                                        
                         



                                                           










                                                         





                                                          
                                                                                                              









                                                                      
                                                        






                                                                                 
                                                       
                                             
                                                 






                                                                    
                                          



                                  
                                                            

              







                                                          

                                  
                                                                                             

         








                                                                         
/* Week view composite widget for gncal
 *
 * Copyright (C) 1998 The Free Software Foundation
 *
 * Author: Arturo Espinosa <arturo@nuclecu.unam.mx>
 * 
 * Heavily based on Federico Mena's week view.
 * 
 */

#include "gncal-year-view.h"

static void gncal_year_view_init (GncalYearView *yview);

static void
select_day(GtkWidget *widget, gpointer data)
{
    int i;
    
    GncalYearView *yview;
    
    yview = GNCAL_YEAR_VIEW(data);
    
    for (i = 0; i < 12; i++)
      gtk_signal_handler_block(GTK_OBJECT(yview->calendar[i]),
                   yview->handler[i]);
    
    for (i = 0; i < 12; i++)
      if (GTK_CALENDAR(yview->calendar[i]) != GTK_CALENDAR(widget))
        gtk_calendar_select_day(GTK_CALENDAR(yview->calendar[i]), 0);
                          
    for (i = 0; i < 12; i++)
      gtk_signal_handler_unblock(GTK_OBJECT(yview->calendar[i]),
                   yview->handler[i]);
}

guint
gncal_year_view_get_type (void)
{
        static guint year_view_type = 0;

    if (!year_view_type) {
        GtkTypeInfo year_view_info = {
            "GncalYearView",
            sizeof (GncalYearView),
            sizeof (GncalYearViewClass),
            (GtkClassInitFunc) NULL,
            (GtkObjectInitFunc) gncal_year_view_init,
            (GtkArgSetFunc) NULL,
            (GtkArgGetFunc) NULL
        };

        year_view_type = gtk_type_unique (gtk_table_get_type (), 
                          &year_view_info);
    }

    return year_view_type;
}

static void
gncal_year_view_init (GncalYearView *yview)
{
    int i;
    
    for (i = 0; i < 12; i++) {
        yview->calendar[i] = NULL;
        yview->handler [i] = 0;
    }
    
    yview->year_label = NULL;
    yview->year = 0;
}

GtkWidget *
gncal_year_view_new (time_t date)
{
    struct tm my_tm = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
    char monthbuff[40];
    GncalYearView *yview;
    GtkWidget *frame, *vbox, *label;
    struct tm *tmptm;
    int i, x, y;

    yview = gtk_type_new (gncal_year_view_get_type ());

    tmptm = localtime(&date);
    yview->year = tmptm->tm_year;
    my_tm.tm_mon = tmptm->tm_year;
    yview->year_label = gtk_label_new("");
    gtk_table_attach (GTK_TABLE (yview), 
              GTK_WIDGET (yview->year_label),
              1, 2,
              0, 1,
              0, 0, 0, 5);
    gtk_widget_show(GTK_WIDGET(yview->year_label));
    
    for (x = 0; x < 3; x++)
      for (y = 0; y < 4; y++) {
          
          i = y * 3 + x;
          
          yview->calendar[i] = gtk_calendar_new();
          gtk_calendar_display_options(GTK_CALENDAR(yview->calendar[i]), GTK_CALENDAR_SHOW_DAY_NAMES);
          frame = gtk_frame_new(NULL);
          vbox = gtk_vbox_new(0,0);
        
          yview->handler[i] = 
            gtk_signal_connect(GTK_OBJECT(yview->calendar[i]),
                       "day_selected", 
                       GTK_SIGNAL_FUNC(select_day),
                       (gpointer *) yview);
          
          my_tm.tm_mon = i;
          strftime(monthbuff, 40, "%B", &my_tm);
          label = gtk_label_new(monthbuff);
        
          gtk_container_add(GTK_CONTAINER(frame), vbox);
          gtk_box_pack_start(GTK_BOX(vbox), label, 0, 0, 0);
          gtk_box_pack_start(GTK_BOX(vbox), yview->calendar[i], 0, 0, 0);
          
          gtk_table_attach (GTK_TABLE (yview), 
                    GTK_WIDGET (frame),
                    x, x + 1,
                    y + 1, y + 2,
                    0, 0, 0, 0);

          gtk_widget_show (frame);
          gtk_widget_show (vbox);
          gtk_widget_show (GTK_WIDGET (yview->calendar[i]));
      }

    gncal_year_view_set (yview, date);
    
    return GTK_WIDGET (yview);
}

void gncal_year_view_set (GncalYearView *yview, time_t date)
{
    int i;
    char buff[10];
    struct tm *tmptm;

    tmptm = localtime(&date);
    yview->year = tmptm->tm_year;

    snprintf(buff, 10, "%d", yview->year + 1900);
    gtk_label_set(GTK_LABEL(yview->year_label), buff);
    
    for (i = 0; i < 12; i++) {
        gtk_calendar_select_month (GTK_CALENDAR(yview->calendar[i]), i, yview->year);
    }
}

/*void
gncal_week_view_update (GncalWeekView *wview, iCalObject *ico, int flags)
{
    g_return_if_fail (wview != NULL);
    g_return_if_fail (GNCAL_IS_YEAR_VIEW (wview));

    update (wview, TRUE, ico, flags);
}*/