2 * Evolution Accessibility: ea-week-view-main-item.c
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) version 3.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with the program; if not, see <http://www.gnu.org/licenses/>
20 * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
24 #include "ea-week-view-main-item.h"
25 #include "ea-week-view.h"
26 #include "ea-week-view-cell.h"
27 #include "ea-cell-table.h"
28 #include <glib/gi18n.h>
30 /* EaWeekViewMainItem */
31 static void ea_week_view_main_item_class_init
32 (EaWeekViewMainItemClass
*class);
33 static void ea_week_view_main_item_finalize (GObject
*object
);
34 static G_CONST_RETURN gchar
*
35 ea_week_view_main_item_get_name (AtkObject
*accessible
);
36 static G_CONST_RETURN gchar
*
37 ea_week_view_main_item_get_description
38 (AtkObject
*accessible
);
39 static gint ea_week_view_main_item_get_n_children
40 (AtkObject
*accessible
);
42 ea_week_view_main_item_ref_child (AtkObject
*accessible
,
45 ea_week_view_main_item_get_parent
46 (AtkObject
*accessible
);
47 static gint ea_week_view_main_item_get_index_in_parent
48 (AtkObject
*accessible
);
51 static void ea_week_view_main_item_dates_change_cb
54 static void ea_week_view_main_item_time_change_cb
55 (EWeekView
*week_view
,
58 /* component interface */
59 static void atk_component_interface_init (AtkComponentIface
*iface
);
60 static void component_interface_get_extents (AtkComponent
*component
,
65 AtkCoordType coord_type
);
67 /* atk table interface */
68 static void atk_table_interface_init (AtkTableIface
*iface
);
69 static gint
table_interface_get_index_at (AtkTable
*table
,
72 static gint table_interface_get_column_at_index
75 static gint
table_interface_get_row_at_index (AtkTable
*table
,
78 table_interface_ref_at (AtkTable
*table
,
81 static gint
table_interface_get_n_rows (AtkTable
*table
);
82 static gint
table_interface_get_n_columns (AtkTable
*table
);
83 static gint table_interface_get_column_extent_at
87 static gint table_interface_get_row_extent_at
92 static gboolean
table_interface_is_row_selected (AtkTable
*table
,
94 static gboolean table_interface_is_column_selected
97 static gboolean
table_interface_is_selected (AtkTable
*table
,
100 static gint table_interface_get_selected_rows
102 gint
**rows_selected
);
103 static gint table_interface_get_selected_columns
105 gint
**columns_selected
);
106 static gboolean table_interface_add_row_selection
109 static gboolean table_interface_remove_row_selection
112 static gboolean table_interface_add_column_selection
115 static gboolean table_interface_remove_column_selection
119 table_interface_get_row_header (AtkTable
*table
,
122 table_interface_get_column_header
126 table_interface_get_caption (AtkTable
*table
);
128 static G_CONST_RETURN gchar
*
129 table_interface_get_column_description
133 static G_CONST_RETURN gchar
*
134 table_interface_get_row_description
139 table_interface_get_summary (AtkTable
*table
);
141 /* atk selection interface */
142 static void atk_selection_interface_init (AtkSelectionIface
*iface
);
143 static gboolean
selection_interface_add_selection (AtkSelection
*selection
,
145 static gboolean
selection_interface_clear_selection (AtkSelection
*selection
);
146 static AtkObject
* selection_interface_ref_selection (AtkSelection
*selection
,
148 static gint
selection_interface_get_selection_count (AtkSelection
*selection
);
149 static gboolean
selection_interface_is_child_selected (AtkSelection
*selection
,
154 ea_week_view_main_item_get_cell_data
155 (EaWeekViewMainItem
*ea_main_item
);
157 static void ea_week_view_main_item_destory_cell_data
158 (EaWeekViewMainItem
*ea_main_item
);
160 static gint ea_week_view_main_item_get_child_index_at
161 (EaWeekViewMainItem
*ea_main_item
,
164 static gint ea_week_view_main_item_get_row_at_index
165 (EaWeekViewMainItem
*ea_main_item
,
167 static gint ea_week_view_main_item_get_column_at_index
168 (EaWeekViewMainItem
*ea_main_item
,
170 static gint ea_week_view_main_item_get_row_label
171 (EaWeekViewMainItem
*ea_main_item
,
177 static gint n_ea_week_view_main_item_created
= 0;
178 static gint n_ea_week_view_main_item_destroyed
= 0;
181 static gpointer parent_class
= NULL
;
184 ea_week_view_main_item_get_type (void)
186 static GType type
= 0;
187 AtkObjectFactory
*factory
;
189 GType derived_atk_type
;
192 static GTypeInfo tinfo
= {
193 sizeof (EaWeekViewMainItemClass
),
194 (GBaseInitFunc
) NULL
, /* base init */
195 (GBaseFinalizeFunc
) NULL
, /* base finalize */
196 (GClassInitFunc
) ea_week_view_main_item_class_init
,
197 (GClassFinalizeFunc
) NULL
, /* class finalize */
198 NULL
, /* class data */
199 sizeof (EaWeekViewMainItem
), /* instance size */
200 0, /* nb preallocs */
201 (GInstanceInitFunc
) NULL
, /* instance init */
202 NULL
/* value table */
205 static const GInterfaceInfo atk_component_info
= {
206 (GInterfaceInitFunc
) atk_component_interface_init
,
207 (GInterfaceFinalizeFunc
) NULL
,
211 static const GInterfaceInfo atk_table_info
= {
212 (GInterfaceInitFunc
) atk_table_interface_init
,
213 (GInterfaceFinalizeFunc
) NULL
,
216 static const GInterfaceInfo atk_selection_info
= {
217 (GInterfaceInitFunc
) atk_selection_interface_init
,
218 (GInterfaceFinalizeFunc
) NULL
,
223 * Figure out the size of the class and instance
224 * we are run-time deriving from (GailCanvasItem, in this case)
228 factory
= atk_registry_get_factory (atk_get_default_registry (),
229 e_week_view_main_item_get_type ());
230 derived_atk_type
= atk_object_factory_get_accessible_type (factory
);
231 g_type_query (derived_atk_type
, &query
);
233 tinfo
.class_size
= query
.class_size
;
234 tinfo
.instance_size
= query
.instance_size
;
236 type
= g_type_register_static (derived_atk_type
,
237 "EaWeekViewMainItem", &tinfo
, 0);
238 g_type_add_interface_static (type
, ATK_TYPE_COMPONENT
,
239 &atk_component_info
);
240 g_type_add_interface_static (type
, ATK_TYPE_TABLE
,
242 g_type_add_interface_static (type
, ATK_TYPE_SELECTION
,
243 &atk_selection_info
);
250 ea_week_view_main_item_class_init (EaWeekViewMainItemClass
*klass
)
252 GObjectClass
*gobject_class
= G_OBJECT_CLASS (klass
);
253 AtkObjectClass
*class = ATK_OBJECT_CLASS (klass
);
255 gobject_class
->finalize
= ea_week_view_main_item_finalize
;
256 parent_class
= g_type_class_peek_parent (klass
);
258 class->get_name
= ea_week_view_main_item_get_name
;
259 class->get_description
= ea_week_view_main_item_get_description
;
261 class->get_n_children
= ea_week_view_main_item_get_n_children
;
262 class->ref_child
= ea_week_view_main_item_ref_child
;
263 class->get_parent
= ea_week_view_main_item_get_parent
;
264 class->get_index_in_parent
= ea_week_view_main_item_get_index_in_parent
;
268 ea_week_view_main_item_new (GObject
*obj
)
270 AtkObject
*accessible
;
272 EWeekViewMainItem
*main_item
;
273 EWeekView
*week_view
;
275 g_return_val_if_fail (E_IS_WEEK_VIEW_MAIN_ITEM (obj
), NULL
);
277 accessible
= ATK_OBJECT (g_object_new (EA_TYPE_WEEK_VIEW_MAIN_ITEM
,
280 atk_object_initialize (accessible
, obj
);
281 accessible
->role
= ATK_ROLE_TABLE
;
284 ++n_ea_week_view_main_item_created
;
285 printf ("ACC_DEBUG: n_ea_week_view_main_item_created = %d\n",
286 n_ea_week_view_main_item_created
);
289 main_item
= E_WEEK_VIEW_MAIN_ITEM (obj
);
290 week_view
= e_week_view_main_item_get_week_view (main_item
);
293 week_view
, "selected_time_changed",
294 G_CALLBACK (ea_week_view_main_item_time_change_cb
),
297 /* listen for date changes of calendar */
298 gcal
= e_calendar_view_get_calendar (E_CALENDAR_VIEW (week_view
));
300 g_signal_connect (gcal
, "dates_shown_changed",
301 G_CALLBACK (ea_week_view_main_item_dates_change_cb
),
308 ea_week_view_main_item_finalize (GObject
*object
)
310 EaWeekViewMainItem
*ea_main_item
;
312 g_return_if_fail (EA_IS_WEEK_VIEW_MAIN_ITEM (object
));
314 ea_main_item
= EA_WEEK_VIEW_MAIN_ITEM (object
);
316 /* Free the allocated cell data */
317 ea_week_view_main_item_destory_cell_data (ea_main_item
);
319 G_OBJECT_CLASS (parent_class
)->finalize (object
);
321 ++n_ea_week_view_main_item_destroyed
;
322 printf ("ACC_DEBUG: n_ea_week_view_main_item_destroyed = %d\n",
323 n_ea_week_view_main_item_destroyed
);
327 static G_CONST_RETURN gchar
*
328 ea_week_view_main_item_get_name (AtkObject
*accessible
)
331 g_return_val_if_fail (EA_IS_WEEK_VIEW_MAIN_ITEM (accessible
), NULL
);
332 parent
= atk_object_get_parent (accessible
);
333 return atk_object_get_name (parent
);
337 static G_CONST_RETURN gchar
*
338 ea_week_view_main_item_get_description (AtkObject
*accessible
)
340 return _("a table to view and select the current time range");
344 ea_week_view_main_item_get_n_children (AtkObject
*accessible
)
346 AtkGObjectAccessible
*atk_gobj
;
348 EWeekViewMainItem
*main_item
;
349 EWeekView
*week_view
;
351 g_return_val_if_fail (EA_IS_WEEK_VIEW_MAIN_ITEM (accessible
), -1);
353 atk_gobj
= ATK_GOBJECT_ACCESSIBLE (accessible
);
354 g_obj
= atk_gobject_accessible_get_object (atk_gobj
);
358 main_item
= E_WEEK_VIEW_MAIN_ITEM (g_obj
);
359 week_view
= e_week_view_main_item_get_week_view (main_item
);
361 if (week_view
->multi_week_view
)
362 return 7 * week_view
->weeks_shown
;
368 ea_week_view_main_item_ref_child (AtkObject
*accessible
, gint index
)
370 AtkGObjectAccessible
*atk_gobj
;
372 EWeekViewMainItem
*main_item
;
373 EWeekView
*week_view
;
376 EaCellTable
*cell_data
;
377 EaWeekViewMainItem
*ea_main_item
;
379 g_return_val_if_fail (EA_IS_WEEK_VIEW_MAIN_ITEM (accessible
), NULL
);
381 atk_gobj
= ATK_GOBJECT_ACCESSIBLE (accessible
);
382 g_obj
= atk_gobject_accessible_get_object (atk_gobj
);
386 main_item
= E_WEEK_VIEW_MAIN_ITEM (g_obj
);
387 week_view
= e_week_view_main_item_get_week_view (main_item
);
389 n_children
= ea_week_view_main_item_get_n_children (accessible
);
390 if (index
< 0 || index
>= n_children
)
393 ea_main_item
= EA_WEEK_VIEW_MAIN_ITEM (accessible
);
394 cell_data
= ea_week_view_main_item_get_cell_data (ea_main_item
);
397 cell
= ea_cell_table_get_cell_at_index (cell_data
, index
);
401 row
= ea_week_view_main_item_get_row_at_index (ea_main_item
, index
);
402 column
= ea_week_view_main_item_get_column_at_index (ea_main_item
, index
);
403 cell
= e_week_view_cell_new (week_view
, row
, column
);
404 ea_cell_table_set_cell_at_index (cell_data
, index
, cell
);
405 g_object_unref (cell
);
408 return g_object_ref (atk_gobject_accessible_for_object (G_OBJECT (cell
)));
412 ea_week_view_main_item_get_parent (AtkObject
*accessible
)
414 AtkGObjectAccessible
*atk_gobj
;
416 EWeekViewMainItem
*main_item
;
417 EWeekView
*week_view
;
419 g_return_val_if_fail (EA_IS_WEEK_VIEW_MAIN_ITEM (accessible
), NULL
);
421 atk_gobj
= ATK_GOBJECT_ACCESSIBLE (accessible
);
422 g_obj
= atk_gobject_accessible_get_object (atk_gobj
);
426 main_item
= E_WEEK_VIEW_MAIN_ITEM (g_obj
);
427 week_view
= e_week_view_main_item_get_week_view (main_item
);
429 return gtk_widget_get_accessible (GTK_WIDGET (week_view
));
433 ea_week_view_main_item_get_index_in_parent (AtkObject
*accessible
)
435 AtkGObjectAccessible
*atk_gobj
;
438 g_return_val_if_fail (EA_IS_WEEK_VIEW_MAIN_ITEM (accessible
), -1);
440 atk_gobj
= ATK_GOBJECT_ACCESSIBLE (accessible
);
441 g_obj
= atk_gobject_accessible_get_object (atk_gobj
);
445 /* always the first child of ea-week-view */
452 ea_week_view_main_item_dates_change_cb (GnomeCalendar
*gcal
, gpointer data
)
454 EaWeekViewMainItem
*ea_main_item
;
456 g_return_if_fail (GNOME_IS_CALENDAR (gcal
));
457 g_return_if_fail (data
);
458 g_return_if_fail (EA_IS_WEEK_VIEW_MAIN_ITEM (data
));
460 ea_main_item
= EA_WEEK_VIEW_MAIN_ITEM (data
);
463 printf ("EvoAcc: ea_week_view_main_item update cb\n");
466 ea_week_view_main_item_destory_cell_data (ea_main_item
);
470 ea_week_view_main_item_time_change_cb (EWeekView
*week_view
, gpointer data
)
472 EaWeekViewMainItem
*ea_main_item
;
473 AtkObject
*item_cell
= NULL
;
475 g_return_if_fail (E_IS_WEEK_VIEW (week_view
));
476 g_return_if_fail (data
);
477 g_return_if_fail (EA_IS_WEEK_VIEW_MAIN_ITEM (data
));
479 ea_main_item
= EA_WEEK_VIEW_MAIN_ITEM (data
);
482 printf ("EvoAcc: ea_week_view_main_item time changed cb\n");
484 /* only deal with the first selected child, for now */
485 item_cell
= atk_selection_ref_selection (ATK_SELECTION (ea_main_item
),
488 AtkStateSet
*state_set
;
489 state_set
= atk_object_ref_state_set (item_cell
);
490 atk_state_set_add_state (state_set
, ATK_STATE_FOCUSED
);
491 g_object_unref (state_set
);
493 g_signal_emit_by_name (ea_main_item
,
494 "active-descendant-changed",
496 g_signal_emit_by_name (data
, "selection_changed");
497 atk_focus_tracker_notify (item_cell
);
498 g_object_unref (item_cell
);
505 ea_week_view_main_item_get_child_index_at (EaWeekViewMainItem
*ea_main_item
,
506 gint row
, gint column
)
508 AtkGObjectAccessible
*atk_gobj
;
510 EWeekViewMainItem
*main_item
;
511 EWeekView
*week_view
;
513 g_return_val_if_fail (ea_main_item
, -1);
515 atk_gobj
= ATK_GOBJECT_ACCESSIBLE (ea_main_item
);
516 g_obj
= atk_gobject_accessible_get_object (atk_gobj
);
520 main_item
= E_WEEK_VIEW_MAIN_ITEM (g_obj
);
521 week_view
= e_week_view_main_item_get_week_view (main_item
);
523 if (row
>= 0 && row
< week_view
->weeks_shown
&&
524 column
>= 0 && column
< 7)
525 return row
* 7 + column
;
531 ea_week_view_main_item_get_row_at_index (EaWeekViewMainItem
*ea_main_item
,
534 AtkGObjectAccessible
*atk_gobj
;
538 g_return_val_if_fail (ea_main_item
, -1);
540 atk_gobj
= ATK_GOBJECT_ACCESSIBLE (ea_main_item
);
541 g_obj
= atk_gobject_accessible_get_object (atk_gobj
);
545 n_children
= ea_week_view_main_item_get_n_children (ATK_OBJECT (ea_main_item
));
546 if (index
>= 0 && index
< n_children
)
552 ea_week_view_main_item_get_column_at_index (EaWeekViewMainItem
*ea_main_item
,
555 AtkGObjectAccessible
*atk_gobj
;
559 g_return_val_if_fail (ea_main_item
, -1);
561 atk_gobj
= ATK_GOBJECT_ACCESSIBLE (ea_main_item
);
562 g_obj
= atk_gobject_accessible_get_object (atk_gobj
);
566 n_children
= ea_week_view_main_item_get_n_children (ATK_OBJECT (ea_main_item
));
567 if (index
>= 0 && index
< n_children
)
573 ea_week_view_main_item_get_row_label (EaWeekViewMainItem
*ea_main_item
,
574 gint row
, gchar
*buffer
, gint buffer_size
)
576 AtkGObjectAccessible
*atk_gobj
;
579 g_return_val_if_fail (ea_main_item
, 0);
581 atk_gobj
= ATK_GOBJECT_ACCESSIBLE (ea_main_item
);
582 g_obj
= atk_gobject_accessible_get_object (atk_gobj
);
586 return g_snprintf (buffer
, buffer_size
, "the %i week",
592 ea_week_view_main_item_get_cell_data (EaWeekViewMainItem
*ea_main_item
)
594 AtkGObjectAccessible
*atk_gobj
;
596 EWeekViewMainItem
*main_item
;
597 EWeekView
*week_view
;
598 EaCellTable
*cell_data
;
600 g_return_val_if_fail (ea_main_item
, NULL
);
602 atk_gobj
= ATK_GOBJECT_ACCESSIBLE (ea_main_item
);
603 g_obj
= atk_gobject_accessible_get_object (atk_gobj
);
607 main_item
= E_WEEK_VIEW_MAIN_ITEM (g_obj
);
608 week_view
= e_week_view_main_item_get_week_view (main_item
);
610 cell_data
= g_object_get_data (G_OBJECT (ea_main_item
),
611 "ea-week-view-cell-table");
613 cell_data
= ea_cell_table_create (week_view
->weeks_shown
, 7, TRUE
);
614 g_object_set_data (G_OBJECT (ea_main_item
),
615 "ea-week-view-cell-table", cell_data
);
621 ea_week_view_main_item_destory_cell_data (EaWeekViewMainItem
*ea_main_item
)
623 EaCellTable
*cell_data
;
625 g_return_if_fail (ea_main_item
);
627 cell_data
= g_object_get_data (G_OBJECT (ea_main_item
),
628 "ea-week-view-cell-table");
630 g_object_set_data (G_OBJECT (ea_main_item
),
631 "ea-week-view-cell-table", NULL
);
632 ea_cell_table_destroy (cell_data
);
636 /* Atk Component Interface */
639 atk_component_interface_init (AtkComponentIface
*iface
)
641 g_return_if_fail (iface
!= NULL
);
643 iface
->get_extents
= component_interface_get_extents
;
647 component_interface_get_extents (AtkComponent
*component
,
648 gint
*x
, gint
*y
, gint
*width
, gint
*height
,
649 AtkCoordType coord_type
)
652 AtkObject
*ea_canvas
;
653 EWeekViewMainItem
*main_item
;
654 EWeekView
*week_view
;
656 *x
= *y
= *width
= *height
= 0;
658 g_return_if_fail (EA_IS_WEEK_VIEW_MAIN_ITEM (component
));
660 g_obj
= atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (component
));
664 main_item
= E_WEEK_VIEW_MAIN_ITEM (g_obj
);
665 week_view
= e_week_view_main_item_get_week_view (main_item
);
667 ea_canvas
= gtk_widget_get_accessible (week_view
->main_canvas
);
668 atk_component_get_extents (ATK_COMPONENT (ea_canvas
), x
, y
,
669 width
, height
, coord_type
);
672 /* atk table interface */
675 atk_table_interface_init (AtkTableIface
*iface
)
677 g_return_if_fail (iface
!= NULL
);
679 iface
->ref_at
= table_interface_ref_at
;
681 iface
->get_n_rows
= table_interface_get_n_rows
;
682 iface
->get_n_columns
= table_interface_get_n_columns
;
683 iface
->get_index_at
= table_interface_get_index_at
;
684 iface
->get_column_at_index
= table_interface_get_column_at_index
;
685 iface
->get_row_at_index
= table_interface_get_row_at_index
;
686 iface
->get_column_extent_at
= table_interface_get_column_extent_at
;
687 iface
->get_row_extent_at
= table_interface_get_row_extent_at
;
689 iface
->is_selected
= table_interface_is_selected
;
690 iface
->get_selected_rows
= table_interface_get_selected_rows
;
691 iface
->get_selected_columns
= table_interface_get_selected_columns
;
692 iface
->is_row_selected
= table_interface_is_row_selected
;
693 iface
->is_column_selected
= table_interface_is_column_selected
;
694 iface
->add_row_selection
= table_interface_add_row_selection
;
695 iface
->remove_row_selection
= table_interface_remove_row_selection
;
696 iface
->add_column_selection
= table_interface_add_column_selection
;
697 iface
->remove_column_selection
= table_interface_remove_column_selection
;
699 iface
->get_row_header
= table_interface_get_row_header
;
700 iface
->get_column_header
= table_interface_get_column_header
;
701 iface
->get_caption
= table_interface_get_caption
;
702 iface
->get_summary
= table_interface_get_summary
;
703 iface
->get_row_description
= table_interface_get_row_description
;
704 iface
->get_column_description
= table_interface_get_column_description
;
708 table_interface_ref_at (AtkTable
*table
,
714 EaWeekViewMainItem
* ea_main_item
= EA_WEEK_VIEW_MAIN_ITEM (table
);
715 index
= ea_week_view_main_item_get_child_index_at (ea_main_item
,
717 return ea_week_view_main_item_ref_child (ATK_OBJECT (ea_main_item
), index
);
721 table_interface_get_n_rows (AtkTable
*table
)
723 AtkGObjectAccessible
*atk_gobj
;
725 EWeekViewMainItem
*main_item
;
726 EWeekView
*week_view
;
727 EaWeekViewMainItem
* ea_main_item
= EA_WEEK_VIEW_MAIN_ITEM (table
);
729 atk_gobj
= ATK_GOBJECT_ACCESSIBLE (ea_main_item
);
730 g_obj
= atk_gobject_accessible_get_object (atk_gobj
);
734 main_item
= E_WEEK_VIEW_MAIN_ITEM (g_obj
);
735 week_view
= e_week_view_main_item_get_week_view (main_item
);
737 return week_view
->weeks_shown
;
741 table_interface_get_n_columns (AtkTable
*table
)
743 AtkGObjectAccessible
*atk_gobj
;
745 EaWeekViewMainItem
* ea_main_item
= EA_WEEK_VIEW_MAIN_ITEM (table
);
747 atk_gobj
= ATK_GOBJECT_ACCESSIBLE (ea_main_item
);
748 g_obj
= atk_gobject_accessible_get_object (atk_gobj
);
756 table_interface_get_index_at (AtkTable
*table
,
760 EaWeekViewMainItem
* ea_main_item
= EA_WEEK_VIEW_MAIN_ITEM (table
);
761 return ea_week_view_main_item_get_child_index_at (ea_main_item
,
766 table_interface_get_column_at_index (AtkTable
*table
,
769 EaWeekViewMainItem
* ea_main_item
= EA_WEEK_VIEW_MAIN_ITEM (table
);
770 return ea_week_view_main_item_get_column_at_index (ea_main_item
, index
);
774 table_interface_get_row_at_index (AtkTable
*table
,
777 EaWeekViewMainItem
* ea_main_item
= EA_WEEK_VIEW_MAIN_ITEM (table
);
778 return ea_week_view_main_item_get_row_at_index (ea_main_item
, index
);
782 table_interface_get_column_extent_at (AtkTable
*table
,
787 gint width
= 0, height
= 0;
789 EaWeekViewMainItem
* ea_main_item
= EA_WEEK_VIEW_MAIN_ITEM (table
);
791 index
= ea_week_view_main_item_get_child_index_at (ea_main_item
,
793 child
= atk_object_ref_accessible_child (ATK_OBJECT (ea_main_item
),
796 atk_component_get_size (ATK_COMPONENT (child
),
803 table_interface_get_row_extent_at (AtkTable
*table
,
808 gint width
= 0, height
= 0;
810 EaWeekViewMainItem
* ea_main_item
= EA_WEEK_VIEW_MAIN_ITEM (table
);
812 index
= ea_week_view_main_item_get_child_index_at (ea_main_item
,
814 child
= atk_object_ref_accessible_child (ATK_OBJECT (ea_main_item
),
817 atk_component_get_size (ATK_COMPONENT (child
),
824 table_interface_is_row_selected (AtkTable
*table
,
827 AtkGObjectAccessible
*atk_gobj
;
829 EWeekViewMainItem
*main_item
;
830 EWeekView
*week_view
;
831 EaWeekViewMainItem
* ea_main_item
= EA_WEEK_VIEW_MAIN_ITEM (table
);
833 atk_gobj
= ATK_GOBJECT_ACCESSIBLE (ea_main_item
);
834 g_obj
= atk_gobject_accessible_get_object (atk_gobj
);
838 main_item
= E_WEEK_VIEW_MAIN_ITEM (g_obj
);
839 week_view
= e_week_view_main_item_get_week_view (main_item
);
841 if (week_view
->selection_start_day
== -1)
844 if ((row
< 0)&&(row
+ 1 > week_view
->weeks_shown
))
846 if (((week_view
->selection_start_day
< row
* 7) &&
847 (week_view
->selection_end_day
< row
* 7)) ||
848 ((week_view
->selection_start_day
> row
* 7 + 6) &&
849 (week_view
->selection_end_day
> row
* 7 + 6)))
856 table_interface_is_selected (AtkTable
*table
,
860 return table_interface_is_row_selected (table
, row
) &&
861 table_interface_is_column_selected (table
, column
);
865 table_interface_is_column_selected (AtkTable
*table
,
868 AtkGObjectAccessible
*atk_gobj
;
870 EWeekViewMainItem
*main_item
;
871 EWeekView
*week_view
;
872 EaWeekViewMainItem
* ea_main_item
= EA_WEEK_VIEW_MAIN_ITEM (table
);
874 atk_gobj
= ATK_GOBJECT_ACCESSIBLE (ea_main_item
);
875 g_obj
= atk_gobject_accessible_get_object (atk_gobj
);
879 main_item
= E_WEEK_VIEW_MAIN_ITEM (g_obj
);
880 week_view
= e_week_view_main_item_get_week_view (main_item
);
882 if ((column
<0)||(column
>6))
886 for (i
=0;i
<week_view
->weeks_shown
;i
++)
887 if ((column
+ i
*7>= week_view
->selection_start_day
) &&
888 (column
+ i
*7<= week_view
->selection_end_day
))
895 table_interface_get_selected_rows (AtkTable
*table
,
896 gint
**rows_selected
)
898 AtkGObjectAccessible
*atk_gobj
;
900 EWeekViewMainItem
*main_item
;
901 EWeekView
*week_view
;
902 EaWeekViewMainItem
* ea_main_item
= EA_WEEK_VIEW_MAIN_ITEM (table
);
903 gint start_row
= -1, n_rows
= 0;
905 atk_gobj
= ATK_GOBJECT_ACCESSIBLE (ea_main_item
);
906 g_obj
= atk_gobject_accessible_get_object (atk_gobj
);
910 main_item
= E_WEEK_VIEW_MAIN_ITEM (g_obj
);
911 week_view
= e_week_view_main_item_get_week_view (main_item
);
913 if (week_view
->selection_start_day
== -1)
916 start_row
= week_view
->selection_start_day
;
917 n_rows
= week_view
->selection_end_day
- start_row
+ 1;
919 if (n_rows
> 0 && start_row
!= -1 && rows_selected
) {
922 *rows_selected
= (gint
*) g_malloc (n_rows
* sizeof (gint
));
923 for (index
= 0; index
< n_rows
; ++index
)
924 (*rows_selected
)[index
] = start_row
+ index
;
930 table_interface_get_selected_columns (AtkTable
*table
,
931 gint
**columns_selected
)
933 AtkGObjectAccessible
*atk_gobj
;
935 EWeekViewMainItem
*main_item
;
936 EWeekView
*week_view
;
937 EaWeekViewMainItem
* ea_main_item
= EA_WEEK_VIEW_MAIN_ITEM (table
);
938 gint start_column
= -1, n_columns
= 0;
940 atk_gobj
= ATK_GOBJECT_ACCESSIBLE (ea_main_item
);
941 g_obj
= atk_gobject_accessible_get_object (atk_gobj
);
945 main_item
= E_WEEK_VIEW_MAIN_ITEM (g_obj
);
946 week_view
= e_week_view_main_item_get_week_view (main_item
);
948 if (week_view
->selection_start_day
== -1)
950 if (week_view
->selection_end_day
- week_view
->selection_start_day
>= 6 ) {
954 start_column
= week_view
->selection_start_day
% 7;
955 n_columns
= (week_view
->selection_end_day
% 7) - start_column
+ 1;
957 if (n_columns
> 0 && start_column
!= -1 && columns_selected
) {
960 *columns_selected
= (gint
*) g_malloc (n_columns
* sizeof (gint
));
961 for (index
= 0; index
< n_columns
; ++index
)
962 (*columns_selected
)[index
] = start_column
+ index
;
968 table_interface_add_row_selection (AtkTable
*table
,
971 AtkGObjectAccessible
*atk_gobj
;
973 EWeekViewMainItem
*main_item
;
974 EWeekView
*week_view
;
975 EaWeekViewMainItem
* ea_main_item
= EA_WEEK_VIEW_MAIN_ITEM (table
);
977 atk_gobj
= ATK_GOBJECT_ACCESSIBLE (ea_main_item
);
978 g_obj
= atk_gobject_accessible_get_object (atk_gobj
);
982 main_item
= E_WEEK_VIEW_MAIN_ITEM (g_obj
);
983 week_view
= e_week_view_main_item_get_week_view (main_item
);
985 /* FIXME: we need multi-selection */
987 week_view
->selection_start_day
= row
* 7;
988 week_view
->selection_end_day
= row
*7 + 6;
990 gtk_widget_queue_draw (week_view
->main_canvas
);
995 table_interface_remove_row_selection (AtkTable
*table
,
1002 table_interface_add_column_selection (AtkTable
*table
,
1005 AtkGObjectAccessible
*atk_gobj
;
1007 EWeekViewMainItem
*main_item
;
1008 EWeekView
*week_view
;
1009 EaWeekViewMainItem
* ea_main_item
= EA_WEEK_VIEW_MAIN_ITEM (table
);
1011 atk_gobj
= ATK_GOBJECT_ACCESSIBLE (ea_main_item
);
1012 g_obj
= atk_gobject_accessible_get_object (atk_gobj
);
1016 main_item
= E_WEEK_VIEW_MAIN_ITEM (g_obj
);
1017 week_view
= e_week_view_main_item_get_week_view (main_item
);
1019 /* FIXME: we need multi-selection */
1021 week_view
->selection_start_day
= column
;
1022 week_view
->selection_end_day
= (week_view
->weeks_shown
- 1)*7+column
;
1024 gtk_widget_queue_draw (week_view
->main_canvas
);
1029 table_interface_remove_column_selection (AtkTable
*table
,
1032 /* FIXME: NOT IMPLEMENTED */
1037 table_interface_get_row_header (AtkTable
*table
,
1040 /* FIXME: NOT IMPLEMENTED */
1045 table_interface_get_column_header (AtkTable
*table
,
1048 /* FIXME: NOT IMPLEMENTED */
1053 table_interface_get_caption (AtkTable
*table
)
1055 /* FIXME: NOT IMPLEMENTED */
1059 static G_CONST_RETURN gchar
*
1060 table_interface_get_column_description (AtkTable
*table
,
1063 AtkGObjectAccessible
*atk_gobj
;
1065 EaWeekViewMainItem
* ea_main_item
= EA_WEEK_VIEW_MAIN_ITEM (table
);
1066 const gchar
*description
;
1067 EaCellTable
*cell_data
;
1069 atk_gobj
= ATK_GOBJECT_ACCESSIBLE (ea_main_item
);
1070 g_obj
= atk_gobject_accessible_get_object (atk_gobj
);
1074 if (in_col
< 0 || in_col
> 6)
1076 cell_data
= ea_week_view_main_item_get_cell_data (ea_main_item
);
1080 description
= ea_cell_table_get_column_label (cell_data
, in_col
);
1086 g_snprintf(buffer
,128,"Monday");
1089 g_snprintf(buffer
,128,"Tuesday");
1092 g_snprintf(buffer
,128,"Wednesday");
1095 g_snprintf(buffer
,128,"Thursday");
1098 g_snprintf(buffer
,128,"Friday");
1101 g_snprintf(buffer
,128,"Saturday");
1104 g_snprintf(buffer
,128,"Sunday");
1110 ea_cell_table_set_column_label (cell_data
, in_col
, buffer
);
1111 description
= ea_cell_table_get_column_label (cell_data
, in_col
);
1116 static G_CONST_RETURN gchar
*
1117 table_interface_get_row_description (AtkTable
*table
,
1120 AtkGObjectAccessible
*atk_gobj
;
1122 EWeekViewMainItem
*main_item
;
1123 EWeekView
*week_view
;
1124 EaWeekViewMainItem
* ea_main_item
= EA_WEEK_VIEW_MAIN_ITEM (table
);
1125 const gchar
*description
;
1126 EaCellTable
*cell_data
;
1128 atk_gobj
= ATK_GOBJECT_ACCESSIBLE (ea_main_item
);
1129 g_obj
= atk_gobject_accessible_get_object (atk_gobj
);
1133 main_item
= E_WEEK_VIEW_MAIN_ITEM (g_obj
);
1134 week_view
= e_week_view_main_item_get_week_view (main_item
);
1136 if (row
< 0 || row
>= week_view
->weeks_shown
)
1138 cell_data
= ea_week_view_main_item_get_cell_data (ea_main_item
);
1142 description
= ea_cell_table_get_row_label (cell_data
, row
);
1145 ea_week_view_main_item_get_row_label (ea_main_item
, row
, buffer
, sizeof (buffer
));
1146 ea_cell_table_set_row_label (cell_data
, row
, buffer
);
1147 description
= ea_cell_table_get_row_label (cell_data
,
1154 table_interface_get_summary (AtkTable
*table
)
1156 /* FIXME: NOT IMPLEMENTED */
1160 /* atkselection interface */
1163 atk_selection_interface_init (AtkSelectionIface
*iface
)
1165 g_return_if_fail (iface
!= NULL
);
1167 iface
->add_selection
= selection_interface_add_selection
;
1168 iface
->clear_selection
= selection_interface_clear_selection
;
1169 iface
->ref_selection
= selection_interface_ref_selection
;
1170 iface
->get_selection_count
= selection_interface_get_selection_count
;
1171 iface
->is_child_selected
= selection_interface_is_child_selected
;
1175 selection_interface_add_selection (AtkSelection
*selection
, gint i
)
1177 AtkGObjectAccessible
*atk_gobj
;
1179 EWeekViewMainItem
*main_item
;
1180 EWeekView
*week_view
;
1181 EaWeekViewMainItem
* ea_main_item
= EA_WEEK_VIEW_MAIN_ITEM (selection
);
1183 atk_gobj
= ATK_GOBJECT_ACCESSIBLE (ea_main_item
);
1184 g_obj
= atk_gobject_accessible_get_object (atk_gobj
);
1188 main_item
= E_WEEK_VIEW_MAIN_ITEM (g_obj
);
1189 week_view
= e_week_view_main_item_get_week_view (main_item
);
1191 if (i
< 0 || i
> week_view
->weeks_shown
* 7 -1)
1194 /*FIXME: multi-selection is needed */
1195 week_view
->selection_start_day
= i
;
1196 week_view
->selection_end_day
= i
;
1198 gtk_widget_queue_draw (week_view
->main_canvas
);
1203 selection_interface_clear_selection (AtkSelection
*selection
)
1205 AtkGObjectAccessible
*atk_gobj
;
1207 EWeekViewMainItem
*main_item
;
1208 EWeekView
*week_view
;
1209 EaWeekViewMainItem
* ea_main_item
= EA_WEEK_VIEW_MAIN_ITEM (selection
);
1211 atk_gobj
= ATK_GOBJECT_ACCESSIBLE (ea_main_item
);
1212 g_obj
= atk_gobject_accessible_get_object (atk_gobj
);
1216 main_item
= E_WEEK_VIEW_MAIN_ITEM (g_obj
);
1217 week_view
= e_week_view_main_item_get_week_view (main_item
);
1219 week_view
->selection_start_day
= -1;
1220 week_view
->selection_end_day
= -1;
1222 gtk_widget_queue_draw (week_view
->main_canvas
);
1228 selection_interface_ref_selection (AtkSelection
*selection
, gint i
)
1232 EWeekViewMainItem
*main_item
;
1233 EWeekView
*week_view
;
1234 EaWeekViewMainItem
* ea_main_item
= EA_WEEK_VIEW_MAIN_ITEM (selection
);
1237 count
= selection_interface_get_selection_count (selection
);
1238 if (i
< 0 || i
>=count
)
1241 g_obj
= atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (ea_main_item
));
1243 main_item
= E_WEEK_VIEW_MAIN_ITEM (g_obj
);
1244 week_view
= e_week_view_main_item_get_week_view (main_item
);
1246 start_index
= ea_week_view_main_item_get_child_index_at (ea_main_item
,
1247 week_view
->selection_start_day
/ 7,
1248 week_view
->selection_start_day
% 7);
1250 return ea_week_view_main_item_ref_child (ATK_OBJECT (selection
), start_index
+ i
);
1254 selection_interface_get_selection_count (AtkSelection
*selection
)
1256 AtkGObjectAccessible
*atk_gobj
;
1258 EWeekViewMainItem
*main_item
;
1259 EWeekView
*week_view
;
1260 EaWeekViewMainItem
* ea_main_item
= EA_WEEK_VIEW_MAIN_ITEM (selection
);
1262 atk_gobj
= ATK_GOBJECT_ACCESSIBLE (ea_main_item
);
1263 g_obj
= atk_gobject_accessible_get_object (atk_gobj
);
1267 main_item
= E_WEEK_VIEW_MAIN_ITEM (g_obj
);
1268 week_view
= e_week_view_main_item_get_week_view (main_item
);
1270 if (week_view
->selection_start_day
== -1 ||
1271 week_view
->selection_end_day
== -1)
1274 return week_view
->selection_end_day
- week_view
->selection_start_day
+ 1;
1278 selection_interface_is_child_selected (AtkSelection
*selection
, gint i
)
1280 AtkGObjectAccessible
*atk_gobj
;
1282 EWeekViewMainItem
*main_item
;
1283 EWeekView
*week_view
;
1284 EaWeekViewMainItem
* ea_main_item
= EA_WEEK_VIEW_MAIN_ITEM (selection
);
1286 atk_gobj
= ATK_GOBJECT_ACCESSIBLE (ea_main_item
);
1287 g_obj
= atk_gobject_accessible_get_object (atk_gobj
);
1291 main_item
= E_WEEK_VIEW_MAIN_ITEM (g_obj
);
1292 week_view
= e_week_view_main_item_get_week_view (main_item
);
1294 if ((week_view
->selection_start_day
<= i
)&&(week_view
->selection_end_day
>= i
))